Full Code of pockethub/PocketHub for AI

master 8228cb8f7197 cached
732 files
2.5 MB
709.3k tokens
2210 symbols
1 requests
Download .txt
Showing preview only (2,822K chars total). Download the full file or copy to clipboard to get everything.
Repository: pockethub/PocketHub
Branch: master
Commit: 8228cb8f7197
Files: 732
Total size: 2.5 MB

Directory structure:
gitextract_6u3neemq/

├── .gitattributes
├── .gitignore
├── .travis.yml
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE.md
├── LICENSE
├── README.md
├── app/
│   ├── build.gradle
│   ├── quality.gradle
│   └── src/
│       ├── androidTest/
│       │   ├── AndroidManifest.xml
│       │   └── java/
│       │       └── com/
│       │           └── github/
│       │               └── pockethub/
│       │                   └── android/
│       │                       └── tests/
│       │                           ├── NewsEventTextTest.java
│       │                           ├── ViewVisibiltyIdlingResource.kt
│       │                           ├── commit/
│       │                           │   ├── CommitUriMatcherTest.java
│       │                           │   ├── CommitUtilsTest.java
│       │                           │   ├── CreateCommentActivityTest.java
│       │                           │   ├── DiffStylerTest.java
│       │                           │   └── FullCommitTest.java
│       │                           ├── gist/
│       │                           │   ├── CreateCommentActivityTest.java
│       │                           │   ├── CreateGistActivityTest.java
│       │                           │   ├── GistFilesViewActivityTest.java
│       │                           │   ├── GistStoreTest.java
│       │                           │   └── GistUriMatcherTest.java
│       │                           ├── issue/
│       │                           │   ├── CreateCommentActivityTest.java
│       │                           │   ├── EditIssueActivityTest.java
│       │                           │   ├── EditIssuesFilterActivityTest.java
│       │                           │   ├── IssueFilterTest.java
│       │                           │   ├── IssueStoreTest.java
│       │                           │   └── IssueUriMatcherTest.java
│       │                           ├── ref/
│       │                           │   └── RefUtilsTest.java
│       │                           ├── repo/
│       │                           │   ├── RecentRepositoriesTest.java
│       │                           │   ├── RepositoryEventMatcherTest.java
│       │                           │   ├── RepositoryUriMatcherTest.java
│       │                           │   └── SearchActivityTest.java
│       │                           ├── user/
│       │                           │   ├── UserComparatorTest.java
│       │                           │   └── UserUriMatcherTest.java
│       │                           └── util/
│       │                               └── HtmlUtilsTest.java
│       ├── debug/
│       │   └── res/
│       │       └── values/
│       │           └── strings.xml
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── assets/
│       │   │   ├── code_mirror/
│       │   │   │   ├── LICENSE
│       │   │   │   ├── VERSION
│       │   │   │   ├── addon/
│       │   │   │   │   ├── comment/
│       │   │   │   │   │   ├── comment.js
│       │   │   │   │   │   └── continuecomment.js
│       │   │   │   │   ├── dialog/
│       │   │   │   │   │   ├── dialog.css
│       │   │   │   │   │   └── dialog.js
│       │   │   │   │   ├── display/
│       │   │   │   │   │   ├── autorefresh.js
│       │   │   │   │   │   ├── fullscreen.css
│       │   │   │   │   │   ├── fullscreen.js
│       │   │   │   │   │   ├── panel.js
│       │   │   │   │   │   ├── placeholder.js
│       │   │   │   │   │   └── rulers.js
│       │   │   │   │   ├── edit/
│       │   │   │   │   │   ├── closebrackets.js
│       │   │   │   │   │   ├── closetag.js
│       │   │   │   │   │   ├── continuelist.js
│       │   │   │   │   │   ├── matchbrackets.js
│       │   │   │   │   │   ├── matchtags.js
│       │   │   │   │   │   └── trailingspace.js
│       │   │   │   │   ├── fold/
│       │   │   │   │   │   ├── brace-fold.js
│       │   │   │   │   │   ├── comment-fold.js
│       │   │   │   │   │   ├── foldcode.js
│       │   │   │   │   │   ├── foldgutter.css
│       │   │   │   │   │   ├── foldgutter.js
│       │   │   │   │   │   ├── indent-fold.js
│       │   │   │   │   │   ├── markdown-fold.js
│       │   │   │   │   │   └── xml-fold.js
│       │   │   │   │   ├── hint/
│       │   │   │   │   │   ├── anyword-hint.js
│       │   │   │   │   │   ├── css-hint.js
│       │   │   │   │   │   ├── html-hint.js
│       │   │   │   │   │   ├── javascript-hint.js
│       │   │   │   │   │   ├── show-hint.css
│       │   │   │   │   │   ├── show-hint.js
│       │   │   │   │   │   ├── sql-hint.js
│       │   │   │   │   │   └── xml-hint.js
│       │   │   │   │   ├── lint/
│       │   │   │   │   │   ├── coffeescript-lint.js
│       │   │   │   │   │   ├── css-lint.js
│       │   │   │   │   │   ├── html-lint.js
│       │   │   │   │   │   ├── javascript-lint.js
│       │   │   │   │   │   ├── json-lint.js
│       │   │   │   │   │   ├── lint.css
│       │   │   │   │   │   ├── lint.js
│       │   │   │   │   │   └── yaml-lint.js
│       │   │   │   │   ├── merge/
│       │   │   │   │   │   ├── merge.css
│       │   │   │   │   │   └── merge.js
│       │   │   │   │   ├── mode/
│       │   │   │   │   │   ├── loadmode.js
│       │   │   │   │   │   ├── multiplex.js
│       │   │   │   │   │   ├── multiplex_test.js
│       │   │   │   │   │   ├── overlay.js
│       │   │   │   │   │   └── simple.js
│       │   │   │   │   ├── runmode/
│       │   │   │   │   │   ├── colorize.js
│       │   │   │   │   │   ├── runmode-standalone.js
│       │   │   │   │   │   ├── runmode.js
│       │   │   │   │   │   └── runmode.node.js
│       │   │   │   │   ├── scroll/
│       │   │   │   │   │   ├── annotatescrollbar.js
│       │   │   │   │   │   ├── scrollpastend.js
│       │   │   │   │   │   ├── simplescrollbars.css
│       │   │   │   │   │   └── simplescrollbars.js
│       │   │   │   │   ├── search/
│       │   │   │   │   │   ├── jump-to-line.js
│       │   │   │   │   │   ├── match-highlighter.js
│       │   │   │   │   │   ├── matchesonscrollbar.css
│       │   │   │   │   │   ├── matchesonscrollbar.js
│       │   │   │   │   │   ├── search.js
│       │   │   │   │   │   └── searchcursor.js
│       │   │   │   │   ├── selection/
│       │   │   │   │   │   ├── active-line.js
│       │   │   │   │   │   ├── mark-selection.js
│       │   │   │   │   │   └── selection-pointer.js
│       │   │   │   │   ├── tern/
│       │   │   │   │   │   ├── tern.css
│       │   │   │   │   │   ├── tern.js
│       │   │   │   │   │   └── worker.js
│       │   │   │   │   └── wrap/
│       │   │   │   │       └── hardwrap.js
│       │   │   │   ├── lib/
│       │   │   │   │   ├── codemirror.css
│       │   │   │   │   └── codemirror.js
│       │   │   │   ├── mode/
│       │   │   │   │   ├── apl/
│       │   │   │   │   │   └── apl.js
│       │   │   │   │   ├── asciiarmor/
│       │   │   │   │   │   └── asciiarmor.js
│       │   │   │   │   ├── asn.1/
│       │   │   │   │   │   └── asn.1.js
│       │   │   │   │   ├── asterisk/
│       │   │   │   │   │   └── asterisk.js
│       │   │   │   │   ├── brainfuck/
│       │   │   │   │   │   └── brainfuck.js
│       │   │   │   │   ├── clike/
│       │   │   │   │   │   └── clike.js
│       │   │   │   │   ├── clojure/
│       │   │   │   │   │   └── clojure.js
│       │   │   │   │   ├── cmake/
│       │   │   │   │   │   └── cmake.js
│       │   │   │   │   ├── cobol/
│       │   │   │   │   │   └── cobol.js
│       │   │   │   │   ├── coffeescript/
│       │   │   │   │   │   └── coffeescript.js
│       │   │   │   │   ├── commonlisp/
│       │   │   │   │   │   └── commonlisp.js
│       │   │   │   │   ├── crystal/
│       │   │   │   │   │   └── crystal.js
│       │   │   │   │   ├── css/
│       │   │   │   │   │   └── css.js
│       │   │   │   │   ├── cypher/
│       │   │   │   │   │   └── cypher.js
│       │   │   │   │   ├── d/
│       │   │   │   │   │   └── d.js
│       │   │   │   │   ├── dart/
│       │   │   │   │   │   └── dart.js
│       │   │   │   │   ├── diff/
│       │   │   │   │   │   └── diff.js
│       │   │   │   │   ├── django/
│       │   │   │   │   │   └── django.js
│       │   │   │   │   ├── dockerfile/
│       │   │   │   │   │   └── dockerfile.js
│       │   │   │   │   ├── dtd/
│       │   │   │   │   │   └── dtd.js
│       │   │   │   │   ├── dylan/
│       │   │   │   │   │   └── dylan.js
│       │   │   │   │   ├── ebnf/
│       │   │   │   │   │   └── ebnf.js
│       │   │   │   │   ├── ecl/
│       │   │   │   │   │   └── ecl.js
│       │   │   │   │   ├── eiffel/
│       │   │   │   │   │   └── eiffel.js
│       │   │   │   │   ├── elm/
│       │   │   │   │   │   └── elm.js
│       │   │   │   │   ├── erlang/
│       │   │   │   │   │   └── erlang.js
│       │   │   │   │   ├── factor/
│       │   │   │   │   │   └── factor.js
│       │   │   │   │   ├── fcl/
│       │   │   │   │   │   └── fcl.js
│       │   │   │   │   ├── forth/
│       │   │   │   │   │   └── forth.js
│       │   │   │   │   ├── fortran/
│       │   │   │   │   │   └── fortran.js
│       │   │   │   │   ├── gas/
│       │   │   │   │   │   └── gas.js
│       │   │   │   │   ├── gfm/
│       │   │   │   │   │   └── gfm.js
│       │   │   │   │   ├── gherkin/
│       │   │   │   │   │   └── gherkin.js
│       │   │   │   │   ├── go/
│       │   │   │   │   │   └── go.js
│       │   │   │   │   ├── groovy/
│       │   │   │   │   │   └── groovy.js
│       │   │   │   │   ├── haml/
│       │   │   │   │   │   └── haml.js
│       │   │   │   │   ├── handlebars/
│       │   │   │   │   │   └── handlebars.js
│       │   │   │   │   ├── haskell/
│       │   │   │   │   │   └── haskell.js
│       │   │   │   │   ├── haskell-literate/
│       │   │   │   │   │   └── haskell-literate.js
│       │   │   │   │   ├── haxe/
│       │   │   │   │   │   └── haxe.js
│       │   │   │   │   ├── htmlembedded/
│       │   │   │   │   │   └── htmlembedded.js
│       │   │   │   │   ├── htmlmixed/
│       │   │   │   │   │   └── htmlmixed.js
│       │   │   │   │   ├── http/
│       │   │   │   │   │   └── http.js
│       │   │   │   │   ├── idl/
│       │   │   │   │   │   └── idl.js
│       │   │   │   │   ├── javascript/
│       │   │   │   │   │   └── javascript.js
│       │   │   │   │   ├── jinja2/
│       │   │   │   │   │   └── jinja2.js
│       │   │   │   │   ├── jsx/
│       │   │   │   │   │   └── jsx.js
│       │   │   │   │   ├── julia/
│       │   │   │   │   │   └── julia.js
│       │   │   │   │   ├── livescript/
│       │   │   │   │   │   └── livescript.js
│       │   │   │   │   ├── lua/
│       │   │   │   │   │   └── lua.js
│       │   │   │   │   ├── markdown/
│       │   │   │   │   │   └── markdown.js
│       │   │   │   │   ├── mathematica/
│       │   │   │   │   │   └── mathematica.js
│       │   │   │   │   ├── mbox/
│       │   │   │   │   │   └── mbox.js
│       │   │   │   │   ├── meta.js
│       │   │   │   │   ├── mirc/
│       │   │   │   │   │   └── mirc.js
│       │   │   │   │   ├── mllike/
│       │   │   │   │   │   └── mllike.js
│       │   │   │   │   ├── modelica/
│       │   │   │   │   │   └── modelica.js
│       │   │   │   │   ├── mscgen/
│       │   │   │   │   │   └── mscgen.js
│       │   │   │   │   ├── mumps/
│       │   │   │   │   │   └── mumps.js
│       │   │   │   │   ├── nginx/
│       │   │   │   │   │   └── nginx.js
│       │   │   │   │   ├── nsis/
│       │   │   │   │   │   └── nsis.js
│       │   │   │   │   ├── ntriples/
│       │   │   │   │   │   └── ntriples.js
│       │   │   │   │   ├── octave/
│       │   │   │   │   │   └── octave.js
│       │   │   │   │   ├── oz/
│       │   │   │   │   │   └── oz.js
│       │   │   │   │   ├── pascal/
│       │   │   │   │   │   └── pascal.js
│       │   │   │   │   ├── pegjs/
│       │   │   │   │   │   └── pegjs.js
│       │   │   │   │   ├── perl/
│       │   │   │   │   │   └── perl.js
│       │   │   │   │   ├── php/
│       │   │   │   │   │   └── php.js
│       │   │   │   │   ├── pig/
│       │   │   │   │   │   └── pig.js
│       │   │   │   │   ├── powershell/
│       │   │   │   │   │   └── powershell.js
│       │   │   │   │   ├── properties/
│       │   │   │   │   │   └── properties.js
│       │   │   │   │   ├── protobuf/
│       │   │   │   │   │   └── protobuf.js
│       │   │   │   │   ├── pug/
│       │   │   │   │   │   └── pug.js
│       │   │   │   │   ├── puppet/
│       │   │   │   │   │   └── puppet.js
│       │   │   │   │   ├── python/
│       │   │   │   │   │   └── python.js
│       │   │   │   │   ├── q/
│       │   │   │   │   │   └── q.js
│       │   │   │   │   ├── r/
│       │   │   │   │   │   └── r.js
│       │   │   │   │   ├── rpm/
│       │   │   │   │   │   └── rpm.js
│       │   │   │   │   ├── rst/
│       │   │   │   │   │   └── rst.js
│       │   │   │   │   ├── ruby/
│       │   │   │   │   │   └── ruby.js
│       │   │   │   │   ├── rust/
│       │   │   │   │   │   └── rust.js
│       │   │   │   │   ├── sas/
│       │   │   │   │   │   └── sas.js
│       │   │   │   │   ├── sass/
│       │   │   │   │   │   └── sass.js
│       │   │   │   │   ├── scheme/
│       │   │   │   │   │   └── scheme.js
│       │   │   │   │   ├── shell/
│       │   │   │   │   │   └── shell.js
│       │   │   │   │   ├── sieve/
│       │   │   │   │   │   └── sieve.js
│       │   │   │   │   ├── slim/
│       │   │   │   │   │   └── slim.js
│       │   │   │   │   ├── smalltalk/
│       │   │   │   │   │   └── smalltalk.js
│       │   │   │   │   ├── smarty/
│       │   │   │   │   │   └── smarty.js
│       │   │   │   │   ├── solr/
│       │   │   │   │   │   └── solr.js
│       │   │   │   │   ├── soy/
│       │   │   │   │   │   └── soy.js
│       │   │   │   │   ├── sparql/
│       │   │   │   │   │   └── sparql.js
│       │   │   │   │   ├── spreadsheet/
│       │   │   │   │   │   └── spreadsheet.js
│       │   │   │   │   ├── sql/
│       │   │   │   │   │   └── sql.js
│       │   │   │   │   ├── stex/
│       │   │   │   │   │   └── stex.js
│       │   │   │   │   ├── stylus/
│       │   │   │   │   │   └── stylus.js
│       │   │   │   │   ├── swift/
│       │   │   │   │   │   └── swift.js
│       │   │   │   │   ├── tcl/
│       │   │   │   │   │   └── tcl.js
│       │   │   │   │   ├── textile/
│       │   │   │   │   │   └── textile.js
│       │   │   │   │   ├── tiddlywiki/
│       │   │   │   │   │   ├── tiddlywiki.css
│       │   │   │   │   │   └── tiddlywiki.js
│       │   │   │   │   ├── tiki/
│       │   │   │   │   │   ├── tiki.css
│       │   │   │   │   │   └── tiki.js
│       │   │   │   │   ├── toml/
│       │   │   │   │   │   └── toml.js
│       │   │   │   │   ├── tornado/
│       │   │   │   │   │   └── tornado.js
│       │   │   │   │   ├── troff/
│       │   │   │   │   │   └── troff.js
│       │   │   │   │   ├── ttcn/
│       │   │   │   │   │   └── ttcn.js
│       │   │   │   │   ├── ttcn-cfg/
│       │   │   │   │   │   └── ttcn-cfg.js
│       │   │   │   │   ├── turtle/
│       │   │   │   │   │   └── turtle.js
│       │   │   │   │   ├── twig/
│       │   │   │   │   │   └── twig.js
│       │   │   │   │   ├── vb/
│       │   │   │   │   │   └── vb.js
│       │   │   │   │   ├── vbscript/
│       │   │   │   │   │   └── vbscript.js
│       │   │   │   │   ├── velocity/
│       │   │   │   │   │   └── velocity.js
│       │   │   │   │   ├── verilog/
│       │   │   │   │   │   └── verilog.js
│       │   │   │   │   ├── vhdl/
│       │   │   │   │   │   └── vhdl.js
│       │   │   │   │   ├── vue/
│       │   │   │   │   │   └── vue.js
│       │   │   │   │   ├── webidl/
│       │   │   │   │   │   └── webidl.js
│       │   │   │   │   ├── xml/
│       │   │   │   │   │   └── xml.js
│       │   │   │   │   ├── xquery/
│       │   │   │   │   │   └── xquery.js
│       │   │   │   │   ├── yacas/
│       │   │   │   │   │   └── yacas.js
│       │   │   │   │   ├── yaml/
│       │   │   │   │   │   └── yaml.js
│       │   │   │   │   ├── yaml-frontmatter/
│       │   │   │   │   │   └── yaml-frontmatter.js
│       │   │   │   │   └── z80/
│       │   │   │   │       └── z80.js
│       │   │   │   └── theme/
│       │   │   │       ├── 3024-day.css
│       │   │   │       ├── 3024-night.css
│       │   │   │       ├── abcdef.css
│       │   │   │       ├── ambiance-mobile.css
│       │   │   │       ├── ambiance.css
│       │   │   │       ├── base16-dark.css
│       │   │   │       ├── base16-light.css
│       │   │   │       ├── bespin.css
│       │   │   │       ├── blackboard.css
│       │   │   │       ├── cobalt.css
│       │   │   │       ├── colorforth.css
│       │   │   │       ├── dracula.css
│       │   │   │       ├── eclipse.css
│       │   │   │       ├── elegant.css
│       │   │   │       ├── erlang-dark.css
│       │   │   │       ├── hopscotch.css
│       │   │   │       ├── icecoder.css
│       │   │   │       ├── isotope.css
│       │   │   │       ├── lesser-dark.css
│       │   │   │       ├── liquibyte.css
│       │   │   │       ├── material.css
│       │   │   │       ├── mbo.css
│       │   │   │       ├── mdn-like.css
│       │   │   │       ├── midnight.css
│       │   │   │       ├── monokai.css
│       │   │   │       ├── neat.css
│       │   │   │       ├── neo.css
│       │   │   │       ├── night.css
│       │   │   │       ├── panda-syntax.css
│       │   │   │       ├── paraiso-dark.css
│       │   │   │       ├── paraiso-light.css
│       │   │   │       ├── pastel-on-dark.css
│       │   │   │       ├── railscasts.css
│       │   │   │       ├── rubyblue.css
│       │   │   │       ├── seti.css
│       │   │   │       ├── solarized.css
│       │   │   │       ├── the-matrix.css
│       │   │   │       ├── tomorrow-night-bright.css
│       │   │   │       ├── tomorrow-night-eighties.css
│       │   │   │       ├── ttcn.css
│       │   │   │       ├── twilight.css
│       │   │   │       ├── vibrant-ink.css
│       │   │   │       ├── xq-dark.css
│       │   │   │       ├── xq-light.css
│       │   │   │       ├── yeti.css
│       │   │   │       └── zenburn.css
│       │   │   ├── github.css
│       │   │   ├── intercept.js
│       │   │   ├── polyfills.js
│       │   │   ├── source-editor.css
│       │   │   ├── source-editor.html
│       │   │   └── source-editor.js
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── github/
│       │   │           └── pockethub/
│       │   │               └── android/
│       │   │                   ├── ApplicationComponent.java
│       │   │                   ├── ApplicationModule.kt
│       │   │                   ├── GitHubModule.java
│       │   │                   ├── Intents.java
│       │   │                   ├── PocketHub.java
│       │   │                   ├── PocketHubModule.java
│       │   │                   ├── RequestCodes.java
│       │   │                   ├── RequestReader.java
│       │   │                   ├── RequestWriter.java
│       │   │                   ├── ResultCodes.java
│       │   │                   ├── accounts/
│       │   │                   │   ├── AccountAuthenticator.java
│       │   │                   │   ├── AccountAuthenticatorService.java
│       │   │                   │   ├── AccountUtils.java
│       │   │                   │   ├── AccountsHelper.java
│       │   │                   │   ├── LoginActivity.java
│       │   │                   │   └── LoginWebViewActivity.java
│       │   │                   ├── core/
│       │   │                   │   ├── GitHubRequest.kt
│       │   │                   │   ├── ItemStore.java
│       │   │                   │   ├── OnLoadListener.java
│       │   │                   │   ├── code/
│       │   │                   │   │   ├── FullTree.java
│       │   │                   │   │   └── RefreshTreeTask.java
│       │   │                   │   ├── commit/
│       │   │                   │   │   ├── CommitMatch.kt
│       │   │                   │   │   ├── CommitStore.java
│       │   │                   │   │   ├── CommitUriMatcher.java
│       │   │                   │   │   ├── CommitUtils.kt
│       │   │                   │   │   ├── FullCommit.java
│       │   │                   │   │   ├── FullCommitFile.java
│       │   │                   │   │   └── RefreshCommitTask.java
│       │   │                   │   ├── gist/
│       │   │                   │   │   ├── FullGist.kt
│       │   │                   │   │   ├── GistEventMatcher.java
│       │   │                   │   │   ├── GistStore.java
│       │   │                   │   │   ├── GistUriMatcher.java
│       │   │                   │   │   └── RefreshGistTask.java
│       │   │                   │   ├── issue/
│       │   │                   │   │   ├── FullIssue.kt
│       │   │                   │   │   ├── IssueEventMatcher.java
│       │   │                   │   │   ├── IssueFilter.java
│       │   │                   │   │   ├── IssueStore.java
│       │   │                   │   │   ├── IssueUriMatcher.java
│       │   │                   │   │   ├── IssueUtils.java
│       │   │                   │   │   └── RefreshIssueTask.java
│       │   │                   │   ├── ref/
│       │   │                   │   │   └── RefUtils.java
│       │   │                   │   ├── repo/
│       │   │                   │   │   ├── RepositoryEventMatcher.java
│       │   │                   │   │   ├── RepositoryUriMatcher.java
│       │   │                   │   │   └── RepositoryUtils.kt
│       │   │                   │   └── user/
│       │   │                   │       ├── UserComparator.java
│       │   │                   │       ├── UserEventMatcher.java
│       │   │                   │       └── UserUriMatcher.java
│       │   │                   ├── dagger/
│       │   │                   │   ├── ActivityBuilder.java
│       │   │                   │   ├── ActivityScope.java
│       │   │                   │   ├── CommitCompareViewFragmentProvider.java
│       │   │                   │   ├── CommitViewFragmentProvider.java
│       │   │                   │   ├── CreateCommentFragmentProvider.java
│       │   │                   │   ├── DialogFragmentBuilder.java
│       │   │                   │   ├── FiltersViewFragmentProvider.java
│       │   │                   │   ├── GistFilesViewFragmentProvider.java
│       │   │                   │   ├── GistsPagerFragmentProvider.java
│       │   │                   │   ├── GistsViewFragmentProvider.java
│       │   │                   │   ├── HomePagerFragmentProvider.java
│       │   │                   │   ├── IssueBrowseFragmentProvider.java
│       │   │                   │   ├── IssueDashboardPagerFragmentProvider.java
│       │   │                   │   ├── IssueSearchFragmentProvider.java
│       │   │                   │   ├── IssuesViewFragmentProvider.java
│       │   │                   │   ├── MainFragmentProvider.java
│       │   │                   │   ├── NotificationFragmentProvider.java
│       │   │                   │   ├── RepositoryContributorsFragmentProvider.java
│       │   │                   │   ├── RepositoryViewFragmentProvider.java
│       │   │                   │   ├── SearchActivityFragmentProvider.java
│       │   │                   │   ├── ServiceBuilder.java
│       │   │                   │   └── UserViewFragmentProvider.java
│       │   │                   ├── markwon/
│       │   │                   │   ├── AlignHandler.java
│       │   │                   │   ├── AsyncDrawableSchedulerPlugin.java
│       │   │                   │   ├── FontResolver.java
│       │   │                   │   ├── GifAwareGlideStore.java
│       │   │                   │   ├── MarkwonUtils.java
│       │   │                   │   ├── SpanLinkPlugin.java
│       │   │                   │   ├── SvgDecoder.java
│       │   │                   │   ├── SvgDrawableTranscoder.java
│       │   │                   │   └── SvgModule.java
│       │   │                   ├── persistence/
│       │   │                   │   ├── AccountDataManager.java
│       │   │                   │   ├── DatabaseCache.kt
│       │   │                   │   ├── OrganizationRepositories.kt
│       │   │                   │   ├── OrganizationRepositoriesFactory.java
│       │   │                   │   ├── Organizations.kt
│       │   │                   │   └── PersistableResource.java
│       │   │                   ├── rx/
│       │   │                   │   ├── AutoDisposeUtils.java
│       │   │                   │   └── RxProgress.java
│       │   │                   ├── sync/
│       │   │                   │   ├── ContentProviderAdapter.java
│       │   │                   │   ├── SyncAdapter.java
│       │   │                   │   ├── SyncAdapterService.java
│       │   │                   │   └── SyncCampaign.java
│       │   │                   ├── ui/
│       │   │                   │   ├── ConfirmDialogFragment.java
│       │   │                   │   ├── DialogResultListener.java
│       │   │                   │   ├── FragmentProvider.java
│       │   │                   │   ├── MainActivity.kt
│       │   │                   │   ├── NewsFragment.kt
│       │   │                   │   ├── SingleChoiceDialogFragment.java
│       │   │                   │   ├── TextWatcherAdapter.java
│       │   │                   │   ├── ViewPager.java
│       │   │                   │   ├── WebView.java
│       │   │                   │   ├── base/
│       │   │                   │   │   ├── AccountAuthenticatorAppCompatActivity.java
│       │   │                   │   │   ├── BaseActivity.kt
│       │   │                   │   │   ├── BaseFragment.kt
│       │   │                   │   │   ├── DialogFragmentHelper.java
│       │   │                   │   │   ├── FragmentPagerAdapter.java
│       │   │                   │   │   └── FragmentStatePagerAdapter.java
│       │   │                   │   ├── code/
│       │   │                   │   │   └── RepositoryCodeFragment.kt
│       │   │                   │   ├── comment/
│       │   │                   │   │   ├── CommentPreviewPagerAdapter.java
│       │   │                   │   │   ├── CreateCommentActivity.kt
│       │   │                   │   │   ├── DeleteCommentListener.java
│       │   │                   │   │   ├── EditCommentListener.java
│       │   │                   │   │   ├── RawCommentFragment.kt
│       │   │                   │   │   └── RenderedCommentFragment.kt
│       │   │                   │   ├── commit/
│       │   │                   │   │   ├── CommitCompareListFragment.kt
│       │   │                   │   │   ├── CommitCompareViewActivity.java
│       │   │                   │   │   ├── CommitDiffListFragment.kt
│       │   │                   │   │   ├── CommitFileComparator.java
│       │   │                   │   │   ├── CommitFileViewActivity.kt
│       │   │                   │   │   ├── CommitListFragment.kt
│       │   │                   │   │   ├── CommitPagerAdapter.java
│       │   │                   │   │   ├── CommitViewActivity.kt
│       │   │                   │   │   ├── CreateCommentActivity.java
│       │   │                   │   │   └── DiffStyler.java
│       │   │                   │   ├── gist/
│       │   │                   │   │   ├── CreateCommentActivity.java
│       │   │                   │   │   ├── CreateGistActivity.kt
│       │   │                   │   │   ├── EditCommentActivity.java
│       │   │                   │   │   ├── GistFileFragment.kt
│       │   │                   │   │   ├── GistFilesPagerAdapter.java
│       │   │                   │   │   ├── GistFilesViewActivity.kt
│       │   │                   │   │   ├── GistFragment.kt
│       │   │                   │   │   ├── GistQueriesPagerAdapter.java
│       │   │                   │   │   ├── GistsFragment.kt
│       │   │                   │   │   ├── GistsPagerAdapter.java
│       │   │                   │   │   ├── GistsPagerFragment.kt
│       │   │                   │   │   ├── GistsViewActivity.kt
│       │   │                   │   │   ├── MyGistsFragment.java
│       │   │                   │   │   ├── PublicGistsFragment.java
│       │   │                   │   │   └── StarredGistsFragment.java
│       │   │                   │   ├── helpers/
│       │   │                   │   │   ├── ItemListHandler.kt
│       │   │                   │   │   ├── ListFetcher.kt
│       │   │                   │   │   ├── PagedListFetcher.kt
│       │   │                   │   │   ├── PagedScrollListener.kt
│       │   │                   │   │   ├── PagerHandler.kt
│       │   │                   │   │   └── ResourceLoadingIndicator.kt
│       │   │                   │   ├── issue/
│       │   │                   │   │   ├── AssigneeDialog.java
│       │   │                   │   │   ├── AssigneeDialogFragment.java
│       │   │                   │   │   ├── CreateCommentActivity.java
│       │   │                   │   │   ├── DashboardIssueFragment.kt
│       │   │                   │   │   ├── EditAssigneeTask.java
│       │   │                   │   │   ├── EditCommentActivity.java
│       │   │                   │   │   ├── EditIssueActivity.kt
│       │   │                   │   │   ├── EditIssuesFilterActivity.kt
│       │   │                   │   │   ├── EditLabelsTask.java
│       │   │                   │   │   ├── EditMilestoneTask.java
│       │   │                   │   │   ├── EditStateTask.java
│       │   │                   │   │   ├── FilterListFragment.kt
│       │   │                   │   │   ├── FiltersViewActivity.java
│       │   │                   │   │   ├── IssueBrowseActivity.java
│       │   │                   │   │   ├── IssueDashboardPagerAdapter.java
│       │   │                   │   │   ├── IssueDashboardPagerFragment.kt
│       │   │                   │   │   ├── IssueFragment.kt
│       │   │                   │   │   ├── IssueSearchActivity.java
│       │   │                   │   │   ├── IssueSearchSuggestionsProvider.java
│       │   │                   │   │   ├── IssuesFragment.kt
│       │   │                   │   │   ├── IssuesPagerAdapter.java
│       │   │                   │   │   ├── IssuesViewActivity.kt
│       │   │                   │   │   ├── LabelDrawableSpan.kt
│       │   │                   │   │   ├── LabelsDialog.java
│       │   │                   │   │   ├── LabelsDialogFragment.java
│       │   │                   │   │   ├── MilestoneDialog.java
│       │   │                   │   │   ├── MilestoneDialogFragment.kt
│       │   │                   │   │   └── SearchIssueListFragment.kt
│       │   │                   │   ├── item/
│       │   │                   │   │   ├── ContributorItem.kt
│       │   │                   │   │   ├── GitHubCommentItem.kt
│       │   │                   │   │   ├── LoadingItem.kt
│       │   │                   │   │   ├── TextItem.kt
│       │   │                   │   │   ├── UserItem.kt
│       │   │                   │   │   ├── code/
│       │   │                   │   │   │   ├── BlobItem.kt
│       │   │                   │   │   │   ├── FolderItem.kt
│       │   │                   │   │   │   └── PathHeaderItem.kt
│       │   │                   │   │   ├── commit/
│       │   │                   │   │   │   ├── CommitCommentItem.kt
│       │   │                   │   │   │   ├── CommitFileHeaderItem.kt
│       │   │                   │   │   │   ├── CommitFileLineItem.kt
│       │   │                   │   │   │   ├── CommitHeaderItem.kt
│       │   │                   │   │   │   ├── CommitItem.kt
│       │   │                   │   │   │   └── CommitParentItem.kt
│       │   │                   │   │   ├── dialog/
│       │   │                   │   │   │   ├── AssigneeDialogItem.kt
│       │   │                   │   │   │   ├── LabelDialogItem.kt
│       │   │                   │   │   │   ├── MilestoneDialogItem.kt
│       │   │                   │   │   │   └── RefDialogItem.kt
│       │   │                   │   │   ├── gist/
│       │   │                   │   │   │   ├── GistFileItem.kt
│       │   │                   │   │   │   ├── GistHeaderItem.kt
│       │   │                   │   │   │   └── GistItem.kt
│       │   │                   │   │   ├── issue/
│       │   │                   │   │   │   ├── IssueDashboardItem.kt
│       │   │                   │   │   │   ├── IssueEventItem.kt
│       │   │                   │   │   │   ├── IssueFilterHeaderItem.kt
│       │   │                   │   │   │   ├── IssueFilterItem.kt
│       │   │                   │   │   │   ├── IssueHeaderItem.kt
│       │   │                   │   │   │   └── IssueItem.kt
│       │   │                   │   │   ├── news/
│       │   │                   │   │   │   ├── CommitCommentEventItem.kt
│       │   │                   │   │   │   ├── CreateEventItem.kt
│       │   │                   │   │   │   ├── DeleteEventItem.kt
│       │   │                   │   │   │   ├── FollowEventItem.kt
│       │   │                   │   │   │   ├── ForkEventItem.kt
│       │   │                   │   │   │   ├── GistEventItem.kt
│       │   │                   │   │   │   ├── GollumEventItem.kt
│       │   │                   │   │   │   ├── IssueCommentEventItem.kt
│       │   │                   │   │   │   ├── IssuesEventItem.kt
│       │   │                   │   │   │   ├── MemberEventItem.kt
│       │   │                   │   │   │   ├── NewsItem.kt
│       │   │                   │   │   │   ├── PublicEventItem.kt
│       │   │                   │   │   │   ├── PullRequestEventItem.kt
│       │   │                   │   │   │   ├── PullRequestReviewCommentEventItem.kt
│       │   │                   │   │   │   ├── PushEventItem.kt
│       │   │                   │   │   │   ├── ReleaseEventItem.kt
│       │   │                   │   │   │   ├── TeamAddEventItem.kt
│       │   │                   │   │   │   └── WatchEventItem.kt
│       │   │                   │   │   ├── notification/
│       │   │                   │   │   │   ├── NotificationHeaderItem.kt
│       │   │                   │   │   │   └── NotificationItem.kt
│       │   │                   │   │   └── repository/
│       │   │                   │   │       ├── RepositoryHeaderItem.kt
│       │   │                   │   │       └── RepositoryItem.kt
│       │   │                   │   ├── notification/
│       │   │                   │   │   ├── NotificationActivity.kt
│       │   │                   │   │   ├── NotificationListFragment.kt
│       │   │                   │   │   ├── NotificationPagerAdapter.java
│       │   │                   │   │   └── NotificationReadListener.java
│       │   │                   │   ├── ref/
│       │   │                   │   │   ├── BranchFileViewActivity.kt
│       │   │                   │   │   ├── RefDialog.java
│       │   │                   │   │   └── RefDialogFragment.java
│       │   │                   │   ├── repo/
│       │   │                   │   │   ├── RecentRepositories.java
│       │   │                   │   │   ├── RepositoryContributorsActivity.java
│       │   │                   │   │   ├── RepositoryContributorsFragment.kt
│       │   │                   │   │   ├── RepositoryListFragment.kt
│       │   │                   │   │   ├── RepositoryNewsFragment.java
│       │   │                   │   │   ├── RepositoryPagerAdapter.java
│       │   │                   │   │   ├── RepositoryReadmeFragment.kt
│       │   │                   │   │   ├── RepositoryViewActivity.kt
│       │   │                   │   │   └── UserRepositoryListFragment.kt
│       │   │                   │   ├── search/
│       │   │                   │   │   ├── RepositorySearchSuggestionsProvider.java
│       │   │                   │   │   ├── SearchActivity.kt
│       │   │                   │   │   ├── SearchPagerAdapter.java
│       │   │                   │   │   ├── SearchRepositoryListFragment.kt
│       │   │                   │   │   └── SearchUserListFragment.kt
│       │   │                   │   ├── user/
│       │   │                   │   │   ├── FollowersFragment.kt
│       │   │                   │   │   ├── FollowingFragment.kt
│       │   │                   │   │   ├── HomePagerAdapter.kt
│       │   │                   │   │   ├── HomePagerFragment.kt
│       │   │                   │   │   ├── MembersFragment.kt
│       │   │                   │   │   ├── MyFollowersFragment.java
│       │   │                   │   │   ├── MyFollowingFragment.java
│       │   │                   │   │   ├── OrganizationNewsFragment.java
│       │   │                   │   │   ├── OrganizationSelectionListener.java
│       │   │                   │   │   ├── OrganizationSelectionProvider.java
│       │   │                   │   │   ├── PagedUserFragment.kt
│       │   │                   │   │   ├── UriLauncherActivity.java
│       │   │                   │   │   ├── UserCreatedNewsFragment.java
│       │   │                   │   │   ├── UserFollowersFragment.java
│       │   │                   │   │   ├── UserFollowingFragment.java
│       │   │                   │   │   ├── UserNewsFragment.java
│       │   │                   │   │   ├── UserPagerAdapter.java
│       │   │                   │   │   ├── UserReceivedNewsFragment.java
│       │   │                   │   │   └── UserViewActivity.kt
│       │   │                   │   └── view/
│       │   │                   │       ├── LinkTextView.kt
│       │   │                   │       └── OcticonTextView.java
│       │   │                   └── util/
│       │   │                       ├── AvatarLoader.kt
│       │   │                       ├── ConvertUtils.java
│       │   │                       ├── GravatarUtils.java
│       │   │                       ├── HtmlUtils.java
│       │   │                       ├── HttpImageGetter.java
│       │   │                       ├── ImageBinPoster.kt
│       │   │                       ├── ImageUtils.java
│       │   │                       ├── InfoUtils.java
│       │   │                       ├── MarkdownLoader.java
│       │   │                       ├── MarkdownUtils.java
│       │   │                       ├── PermissionsUtils.java
│       │   │                       ├── PreferenceUtils.java
│       │   │                       ├── RxPageUtil.java
│       │   │                       ├── ServiceUtils.java
│       │   │                       ├── ShareUtils.java
│       │   │                       ├── SourceEditor.java
│       │   │                       ├── TimeUtils.java
│       │   │                       ├── ToastUtils.java
│       │   │                       └── android/
│       │   │                           └── text/
│       │   │                               └── SpannableStringBuilder.kt
│       │   ├── res/
│       │   │   ├── color/
│       │   │   │   └── color_navigation_view_icon.xml
│       │   │   ├── drawable/
│       │   │   │   ├── actionbar_spinner.xml
│       │   │   │   ├── diff_add_background.xml
│       │   │   │   ├── diff_marker_background.xml
│       │   │   │   ├── diff_remove_background.xml
│       │   │   │   ├── edit_text_background.xml
│       │   │   │   ├── edit_text_cursor.xml
│       │   │   │   ├── footer_selector.xml
│       │   │   │   ├── ic_add_a_photo.xml
│       │   │   │   ├── ic_notifications_black.xml
│       │   │   │   ├── ic_search_white_24dp.xml
│       │   │   │   ├── inset_background.xml
│       │   │   │   ├── label_background.xml
│       │   │   │   ├── list_divider_5dp.xml
│       │   │   │   ├── list_item_background.xml
│       │   │   │   ├── milestone_background.xml
│       │   │   │   ├── milestone_closed_background.xml
│       │   │   │   ├── section_background.xml
│       │   │   │   ├── section_selected_background.xml
│       │   │   │   └── section_selector.xml
│       │   │   ├── layout/
│       │   │   │   ├── activity_commit_file_view.xml
│       │   │   │   ├── activity_gist_create.xml
│       │   │   │   ├── activity_issue_edit.xml
│       │   │   │   ├── activity_issue_search.xml
│       │   │   │   ├── activity_issues_filter_edit.xml
│       │   │   │   ├── activity_main.xml
│       │   │   │   ├── activity_pager.xml
│       │   │   │   ├── activity_pager_with_title.xml
│       │   │   │   ├── activity_repo_contributors.xml
│       │   │   │   ├── activity_repo_issue_list.xml
│       │   │   │   ├── adapter_fenced_code_block.xml
│       │   │   │   ├── blob_item.xml
│       │   │   │   ├── collaborator_item.xml
│       │   │   │   ├── comment.xml
│       │   │   │   ├── comment_event.xml
│       │   │   │   ├── comment_event_item.xml
│       │   │   │   ├── comment_item.xml
│       │   │   │   ├── commit_comment_item.xml
│       │   │   │   ├── commit_compare.xml
│       │   │   │   ├── commit_compare_file_details_header.xml
│       │   │   │   ├── commit_details_header.xml
│       │   │   │   ├── commit_diff_file_header.xml
│       │   │   │   ├── commit_diff_line.xml
│       │   │   │   ├── commit_file_details_header.xml
│       │   │   │   ├── commit_header.xml
│       │   │   │   ├── commit_item.xml
│       │   │   │   ├── commit_parent_item.xml
│       │   │   │   ├── contributor_item.xml
│       │   │   │   ├── dashboard_issue_item.xml
│       │   │   │   ├── diff_comment_item.xml
│       │   │   │   ├── diff_line_dialog.xml
│       │   │   │   ├── drawer_header.xml
│       │   │   │   ├── folder_item.xml
│       │   │   │   ├── fragment_comment_create.xml
│       │   │   │   ├── fragment_comment_list.xml
│       │   │   │   ├── fragment_comment_preview.xml
│       │   │   │   ├── fragment_commit_diff_list.xml
│       │   │   │   ├── fragment_commit_list.xml
│       │   │   │   ├── fragment_gist_file_view.xml
│       │   │   │   ├── fragment_item_list.xml
│       │   │   │   ├── fragment_repo_code.xml
│       │   │   │   ├── gist_file_item.xml
│       │   │   │   ├── gist_header.xml
│       │   │   │   ├── gist_item.xml
│       │   │   │   ├── issue_details.xml
│       │   │   │   ├── issue_header.xml
│       │   │   │   ├── issue_number.xml
│       │   │   │   ├── issues_filter_details.xml
│       │   │   │   ├── issues_filter_header.xml
│       │   │   │   ├── issues_filter_item.xml
│       │   │   │   ├── issues_filter_list.xml
│       │   │   │   ├── label_item.xml
│       │   │   │   ├── loading_item.xml
│       │   │   │   ├── login.xml
│       │   │   │   ├── markwon_adapter.xml
│       │   │   │   ├── markwon_adapter_test.xml
│       │   │   │   ├── markwon_table_block.xml
│       │   │   │   ├── markwon_table_cell.xml
│       │   │   │   ├── milestone.xml
│       │   │   │   ├── milestone_item.xml
│       │   │   │   ├── news_item.xml
│       │   │   │   ├── notification_item.xml
│       │   │   │   ├── notification_item_header.xml
│       │   │   │   ├── pager_with_tabs.xml
│       │   │   │   ├── path_item.xml
│       │   │   │   ├── ref_footer.xml
│       │   │   │   ├── ref_item.xml
│       │   │   │   ├── repo_details.xml
│       │   │   │   ├── repo_dialog.xml
│       │   │   │   ├── repo_header_item.xml
│       │   │   │   ├── repo_issue_item.xml
│       │   │   │   ├── tabbed_progress_pager.xml
│       │   │   │   ├── user_item.xml
│       │   │   │   └── user_repo_item.xml
│       │   │   ├── menu/
│       │   │   │   ├── activity_comment.xml
│       │   │   │   ├── activity_create_gist.xml
│       │   │   │   ├── activity_file_view.xml
│       │   │   │   ├── activity_issue_edit.xml
│       │   │   │   ├── activity_issue_filter.xml
│       │   │   │   ├── activity_login.xml
│       │   │   │   ├── activity_main.xml
│       │   │   │   ├── activity_repository.xml
│       │   │   │   ├── activity_search.xml
│       │   │   │   ├── activity_user_follow.xml
│       │   │   │   ├── fragment_code_view.xml
│       │   │   │   ├── fragment_commit_view.xml
│       │   │   │   ├── fragment_gist_view.xml
│       │   │   │   ├── fragment_gists.xml
│       │   │   │   ├── fragment_issue_view.xml
│       │   │   │   ├── fragment_issues.xml
│       │   │   │   ├── fragment_refresh.xml
│       │   │   │   └── navigation.xml
│       │   │   ├── values/
│       │   │   │   ├── colors.xml
│       │   │   │   ├── dimens.xml
│       │   │   │   ├── strings.xml
│       │   │   │   ├── styles.xml
│       │   │   │   ├── theme.xml
│       │   │   │   └── typeface.xml
│       │   │   ├── values-bg/
│       │   │   │   └── strings.xml
│       │   │   ├── values-cs/
│       │   │   │   └── strings.xml
│       │   │   ├── values-de/
│       │   │   │   └── strings.xml
│       │   │   ├── values-el/
│       │   │   │   └── strings.xml
│       │   │   ├── values-es/
│       │   │   │   └── strings.xml
│       │   │   ├── values-fr/
│       │   │   │   └── strings.xml
│       │   │   ├── values-hu/
│       │   │   │   └── strings.xml
│       │   │   ├── values-is/
│       │   │   │   └── strings.xml
│       │   │   ├── values-it/
│       │   │   │   └── strings.xml
│       │   │   ├── values-iw/
│       │   │   │   └── strings.xml
│       │   │   ├── values-ja/
│       │   │   │   └── strings.xml
│       │   │   ├── values-ko/
│       │   │   │   └── strings.xml
│       │   │   ├── values-no/
│       │   │   │   └── strings.xml
│       │   │   ├── values-pl/
│       │   │   │   └── strings.xml
│       │   │   ├── values-pt/
│       │   │   │   └── strings.xml
│       │   │   ├── values-ro/
│       │   │   │   └── strings.xml
│       │   │   ├── values-ru/
│       │   │   │   └── strings.xml
│       │   │   ├── values-sk/
│       │   │   │   └── strings.xml
│       │   │   ├── values-sv/
│       │   │   │   └── strings.xml
│       │   │   ├── values-tr/
│       │   │   │   └── strings.xml
│       │   │   ├── values-uk/
│       │   │   │   └── strings.xml
│       │   │   ├── values-v21/
│       │   │   │   └── dimens.xml
│       │   │   ├── values-v23/
│       │   │   │   └── styles.xml
│       │   │   ├── values-zh-rCN/
│       │   │   │   └── strings.xml
│       │   │   ├── values-zh-rTW/
│       │   │   │   └── strings.xml
│       │   │   └── xml/
│       │   │       ├── authenticator.xml
│       │   │       ├── searchable_issues.xml
│       │   │       ├── searchable_repos_users.xml
│       │   │       └── sync_adapter.xml
│       │   └── sqldelight/
│       │       └── com.github.pockethub.android/
│       │           ├── 10.sqm
│       │           ├── 11.sqm
│       │           ├── 12.sqm
│       │           ├── 9.sqm
│       │           ├── issue_filter.sq
│       │           ├── organizations.sq
│       │           └── repositories.sq
│       └── test/
│           └── java/
│               └── com/
│                   └── github/
│                       └── pockethub/
│                           └── android/
│                               ├── AccountManagerShadow.java
│                               ├── ui/
│                               │   └── MainActivityTest.java
│                               └── util/
│                                   └── ConvertUtilsTest.java
├── build.gradle
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── proguard.cfg
├── script/
│   └── style/
│       └── checkstyle.xml
└── settings.gradle

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
# Set default behaviour, in case users don't have core.autocrlf set.
* text=auto


================================================
FILE: .gitignore
================================================
*/target
target
tmp
*~
bin
*/test-output
temp-testng-customsuite.xml
**pom.xml.releaseBackup
release.properties
gen
*/seed.txt
notes
logs
gen-external-apklibs
.idea
*.iml
.DS_Store
*.swp
out
.gradle
/local.properties
/build

###OSX###

.DS_Store
.AppleDouble
.LSOverride

# Icon must ends with two \r.
Icon


# Thumbnails
._*

# Files that might appear on external disk
.Spotlight-V100
.Trashes


###Linux###

*~

# KDE directory preferences
.directory


###Android###

# Built application files
*.apk
*.ap_

# Files for ART and Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/

# Gradle files
.gradle/
.gradletasknamecache
build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Lint
lint-report.html
lint-report_files/
lint_result.txt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.war
*.ear

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*


###IntelliJ###

*.iml
*.ipr
*.iws
.idea/


###Eclipse###

*.pydevproject
.metadata
tmp/
*.tmp
*.bak
*.swp
*~.nib
.settings/
.loadpath

# External tool builders
.externalToolBuilders/

# Locally stored "Eclipse launch configurations"
*.launch

# CDT-specific
.cproject

# PDT-specific
.buildpath

# sbteclipse plugin
.target

# TeXlipse plugin
.texlipse

#GitHub application codes (local and personal)
github.properties


================================================
FILE: .travis.yml
================================================
language: android
android:
   components:
   - tools
   - tools #Running this twice get's the latest build tools (https://github.com/codepath/android_guides/wiki/Setting-up-Travis-CI)
   - platform-tools
   - android-28
   - build-tools-28.0.3
   - extra
   licenses:
   - 'android-sdk-license-.+'

jdk: oraclejdk8

notifications:
  email: false

sudo: required #The build runs out of memory and is killed if we use the container system

before_install:
  - yes | sdkmanager "platforms;android-28"

script:
  - ./gradlew clean build
  - ./gradlew test


================================================
FILE: CONTRIBUTING.md
================================================
Contributing
============

## Reporting issues

* IMPORTANT: Any issues reported regarding the old Play Store version of the original GitHub app will be closed without investigation. Please only report issues regarding the current repo version (i.e. you must confirm this issue exists in the latest master). This is a different app now, and many old issues with the original app (such as 2FA) were resolved in master but not released.
* Make sure there's not already an issue (open or closed) regarding your issue.
* Include detailed information and steps to reproduce. Any issues opened with no description will be ignored.
* Include a screenshot(s) of the issue. Brownie points for a screen recording of the issue.

## ALL pull requests

Please include a descriptive title and description. If you changed anything with the UI, please include screenshots of how
it looks. Use descriptive messages for your commits, and be sure to explain the *why* for commits where appropriate.

Please **don't** squash all your commits into one before opening the PR. Commits are easier to review when they're split up and in the
order they happened. Of course, do squash smaller commits together as needed to ensure a clean history.

If you open a pull request, you are responsible for engaging with us in the review and discussion afterward. If you don't respond
to comments after opening, we will probably just close it.

## Translations

Always welcome, but please be prepared to have someone else that speaks if available to review it. Chances are that we cannot
review it ourselves, for obvious reasons.

## Bugfixes for existing issues

Always welcome. Please reference the issue number you're addressing in the PR, and let us know in the issue tracker if
you're working on it.

## New features, UI changes, and infrastructure changes

Please make sure you discuss these with us in the issue tracker before opening a pull request. It's good to get a conversation
going first to make sure that everyone is on the same page, and this way you don't accidentally invest a lot of time into
something we don't want to merge. That said, we're always open to these, so please don't hesitate to start the discussion!


================================================
FILE: ISSUE_TEMPLATE.md
================================================
## If the issues at hand is a BUG, please follow this template. Otherwise feel free to ignore it.

## Description
A concise description of what the problem is.

### Versions and device
What version of the app does this happen on?\
Was the version downloaded from the Play Store?\
What version of Android does it happen on?\
What model of phone does it happen on?

## Steps to Reproduce
1. Step by step instructions on how to reproduce this bug.
2. The more detailed your list of instructions, the easier it is for the developer to track down the problem!

### Actual behaviour
Describe what happens when you perform the steps above.

### Expected behaviour
Describe what you expected to happen when performing the steps above.

## Logs
Please include any relevant log output that might assist in tracking down the problem.


================================================
FILE: LICENSE
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: README.md
================================================
# PocketHub [![Build Status](https://travis-ci.org/pockethub/PocketHub.svg?branch=master)](https://travis-ci.org/pockethub/PocketHub) <a style="margin-bottom: 0;" href='https://play.google.com/store/apps/details?id=com.github.pockethub.android&utm_source=global_co&utm_medium=prtnr&utm_content=Mar2515&utm_campaign=PartBadge&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png' height="80px"/></a>

This repository contains the source code for the PocketHub Android app.

This is the *same* repository as the now-defunct official GitHub Android app.

## What's going on here?

> What happened to the old app?

GitHub didn't want to maintain the app anymore, so it's been released to the community and maintained as a public project.
We are actively working towards a re-release to the Play Store, and this app will be the spiritual successor to the original GitHub app.

> What's PocketHub?

A name we decided that sounded good. We're a team of a few people helping organizing and prepare this. 

> What about the other forks out there?

They'll remain forks. Obviously we'd prefer them to focus on improving this project, but otherwise we're not coordinating anything with them.

> What's the immediate plan?

We're shooting for an initial re-release just to get the app out there. There have been a significant number of changes since the app was last updated, with many functional and design changes that we need to make sure are good to go.

> What's the less-immediate plan?

After the initial release, we'll start working on giving this app a proper refresh. Much of the UI has already been touched up with elements of Material Design, but we have a long ways to go. Android has changed a lot since this was actively developed, and it's time we take advantage of those changes.

> How can I help?

Please see the [issues](https://github.com/pockethub/PocketHub/issues) section to report any bugs or feature requests and to see the list of known issues. We can't promise fast response times since we all have full time jobs of our own, but we will do our best to respond in a timely fashion.  If you'd like to contribute, please fork this repository and contribute back using [pull requests](https://github.com/pockethub/PocketHub/pulls).

Any contributions, large or small, major features, bug fixes, additional language translations, unit/integration tests are welcomed and appreciated but will be thoroughly reviewed and discussed. **Please read [CONTRIBUTING.md](https://github.com/pockethub/PocketHub/blob/master/CONTRIBUTING.md) first!**

## Setup Environment

1. Create a GitHub application (https://github.com/settings/applications/new)
2. Set the following gradle properties via one of the ways described [here](https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_properties_and_system_properties):
  - `pockethub_github_client`=your_application_client_id
  - `pockethub_github_secret`=your_application_client_secret
  - `pockethub_github_callback`=your_callback_url

### Callback URL
- The callback URL needs to be in the format `your_schema://whatever_you_want`
- Use a custom schema like `myawesomeschema` (not `http` or `https`)
- The schema must be lowercase ([Reference](https://developer.android.com/guide/topics/manifest/data-element.html))

## Legacy Notes

If you had a current installation of the Github App installed and then enabled 2FA (2 Factor Authentication), then you must delete the Personal Access Token (PAT) from your configuration (via the web interface). A thanks to @landstander668 for posting this workaround.

## License

* [Apache Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html)


================================================
FILE: app/build.gradle
================================================
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'com.github.ben-manes.versions'   // ./gradlew dependencyUpdates -Drevision=release
apply plugin: 'com.squareup.sqldelight'
//apply from: 'quality.gradle'

repositories {
    flatDir {
        dirs 'libs'
    }
}

// Manifest version information!
def versionMajor = 0
def versionMinor = 5
def versionPatch = 1
def versionBuild = 0 // bump for dogfood builds, public betas, etc.

def isTravis = "true".equals(System.getenv("TRAVIS"))
def preDexEnabled = "true".equals(System.getProperty("pre-dex", "true"))
def clientIdIsNotSet = true;
def clientSecretIsNotSet = true;

def addConfigValues = { name, isDebug, suffix = "" ->
    def value = (isDebug ? "com.github.debug" : "com.github") + suffix

    android.defaultConfig.buildConfigField "String", name, "\"${value}\""
    android.defaultConfig.resValue "string", name.toLowerCase(), value
}

sqldelight {
    Database {
        packageName = "com.github.pockethub.android"
    }
}

android {
    compileSdkVersion 28

    defaultConfig {
        applicationId 'com.github.pockethub.android'
        minSdkVersion 19
        targetSdkVersion 28
        multiDexEnabled true
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        testOptions.unitTests.includeAndroidResources = true

        versionCode versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild
        versionName "${versionMajor}.${versionMinor}.${versionPatch}"
        vectorDrawables.useSupportLibrary = true

        addConfigValues("ACCOUNT_TYPE", false)
        addConfigValues("PROVIDER_AUTHORITY_SYNC", false, ".sync")
        addConfigValues("PROVIDER_AUTHORITY_SEARCH_SUGGEST_ISSUES", false, ".search.suggest.recent.issues")
        addConfigValues("PROVIDER_AUTHORITY_SEARCH_SUGGEST_REPOS", false, ".search.suggest.recent.repos")

        if (project.hasProperty('pockethub_github_client')) {
            resValue "string", "github_client", pockethub_github_client
            clientIdIsNotSet = false
        } else {
            resValue "string", "github_client", "dummy_client"
        }

        if (project.hasProperty('pockethub_github_secret')) {
            resValue "string", "github_secret", pockethub_github_secret
            clientSecretIsNotSet = false
        } else {
            resValue "string", "github_secret", "dummy_secret"
        }

        if (clientIdIsNotSet || clientSecretIsNotSet) {
            logger.warn("You won't be able to login, because the oauth client or secret isn't set")
            logger.warn("Read the README.md: https://github.com/pockethub/PocketHub#setup-environment")
        }

        if (project.hasProperty('pockethub_bugsnag_api_key')) {
            resValue "string", "bugsnag_api_key", pockethub_bugsnag_api_key
        } else {
            resValue "string", "bugsnag_api_key", "bugsnag-api-key"
        }

        String oauth = ""
        if (project.hasProperty('pockethub_github_callback')) {
            oauth = pockethub_github_callback
        } else {
            oauth = "http://dummy.example.com"
        }

        resValue "string", "github_oauth", oauth
        resValue "string", "github_oauth_scheme", oauth.split("://")[0]
    }


    buildTypes {
        debug {
            addConfigValues("ACCOUNT_TYPE", true)
            addConfigValues("PROVIDER_AUTHORITY_SYNC", true, ".sync")
            addConfigValues("PROVIDER_AUTHORITY_SEARCH_SUGGEST_ISSUES", true, ".search.suggest.recent.issues")
            addConfigValues("PROVIDER_AUTHORITY_SEARCH_SUGGEST_REPOS", true, ".search.suggest.recent.repos")
            applicationIdSuffix ".debug"
        }

        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8.toString()
    }

    testOptions {
        animationsDisabled = true
        unitTests {
            includeAndroidResources = true
        }
    }

    configurations {
        implementation.exclude group: 'org.jetbrains', module: 'annotations'
    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }

    lintOptions {
        warning 'MissingTranslation'
        abortOnError true
        check 'NewApi', 'InlinedApi'
        fatal 'NewApi', 'InlinedApi'
        checkReleaseBuilds true
        
        textReport isTravis
        textOutput 'stdout'
        
        htmlReport !isTravis
        xmlReport !isTravis
    }

    dexOptions {
        // Skip pre-dexing when running on Travis CI or when disabled via -Dpre-dex=false.
        preDexLibraries = preDexEnabled && !isTravis
    }
}

androidExtensions {
    experimental = true
}

kapt {
    correctErrorTypes = true
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    implementation 'androidx.core:core-ktx:1.2.0'
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
    implementation 'com.google.android.material:material:1.1.0'

    final def markwon_version = '4.3.0'
    implementation "io.noties.markwon:core:$markwon_version"
    implementation "io.noties.markwon:ext-strikethrough:$markwon_version"
    implementation "io.noties.markwon:ext-tasklist:$markwon_version"
    implementation "io.noties.markwon:html:$markwon_version"
    implementation "io.noties.markwon:image:$markwon_version"
    implementation "io.noties.markwon:image-glide:$markwon_version"
    implementation "io.noties.markwon:linkify:$markwon_version"
    implementation "io.noties.markwon:recycler-table:$markwon_version"
    implementation "io.noties.markwon:syntax-highlight:$markwon_version"

    implementation "com.caverock:androidsvg:1.4"
    implementation "pl.droidsonroids.gif:android-gif-drawable:1.2.19"

    implementation 'com.github.bumptech.glide:glide:4.11.0'
    implementation "com.github.bumptech.glide:okhttp3-integration:4.11.0"
    kapt 'com.github.bumptech.glide:compiler:4.11.0'

    kapt 'io.noties:prism4j-bundler:2.0.0'

    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
    implementation "com.squareup.sqldelight:android-driver:1.2.2"

    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
    implementation 'io.reactivex.rxjava2:rxjava:2.1.10'
    implementation 'com.uber.autodispose:autodispose:0.6.1'
    implementation 'com.uber.autodispose:autodispose-android-archcomponents:0.6.1'

    implementation 'com.bugsnag:bugsnag-android:4.3.1'

    implementation 'com.google.dagger:dagger:2.27'
    implementation 'com.google.dagger:dagger-android:2.27'
    implementation 'com.google.dagger:dagger-android-support:2.27'
    
    kapt 'com.google.dagger:dagger-compiler:2.27'
    kapt 'com.google.dagger:dagger-android-processor:2.27'

    compileOnly 'com.episode6.hackit.auto.factory:auto-factory-annotations:1.0-beta5'
    kapt 'com.google.auto.factory:auto-factory:1.0-beta7'

    implementation 'com.github.meisolsson:githubsdk:0.7.0'
    implementation "com.squareup.moshi:moshi:1.9.2"
    implementation 'com.afollestad.material-dialogs:core:0.9.6.0'
    implementation 'com.xwray:groupie:2.3.0'
    implementation 'com.xwray:groupie-kotlin-android-extensions:2.3.0'

    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.1.0'
    androidTestImplementation 'com.android.support:support-annotations:28.0.0'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test:rules:1.0.2'

    //Libs for testing
    testImplementation 'junit:junit:4.12'
    testImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
    testImplementation "androidx.test:core:1.2.0"
    testImplementation "org.mockito:mockito-core:2.18.3"
    testImplementation "org.robolectric:robolectric:4.2.1"
}


================================================
FILE: app/quality.gradle
================================================
apply plugin: 'checkstyle'

check.dependsOn 'checkstyle'

checkstyle {
    toolVersion = '7.5.1'
}

task checkstyle(type: Checkstyle) {
    configFile file("${project.rootDir}/script/style/checkstyle.xml")
    source 'src'
    include '**/*.java'
    exclude '**/gen/**'

    classpath = files()

    reports {
        html {
            enabled true
            destination "$project.buildDir/reports/checkstyle/checkstyle.html"
        }
    }
}


================================================
FILE: app/src/androidTest/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.github.pockethub.android.tests"
    android:versionCode="100"
    android:versionName="1.0" >

    <application>
        <uses-library android:name="android.test.runner" />
    </application>
</manifest>


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/NewsEventTextTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import androidx.test.annotation.UiThreadTest;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import com.github.pockethub.android.R;
import com.github.pockethub.android.ui.item.news.NewsItem;
import com.github.pockethub.android.util.AvatarLoader;
import com.meisolsson.githubsdk.model.*;
import com.meisolsson.githubsdk.model.payload.*;
import com.xwray.groupie.ViewHolder;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.Collections;
import java.util.Date;

import static androidx.test.InstrumentationRegistry.getInstrumentation;
import static junit.framework.Assert.assertNotNull;
import static org.junit.Assert.assertEquals;

/**
 * Tests of the news text rendering
 */
@RunWith(AndroidJUnit4.class)
@SmallTest
public class NewsEventTextTest {

    private TextView text;

    private User actor;

    private GitHubEvent.RepoIdentifier repo;

    private AvatarLoader avatarLoader;

    private LayoutInflater layoutInflater;

    @Before
    public void setUp() {
        actor = User.builder().login("user").build();
        repo = GitHubEvent.RepoIdentifier.builder()
                .repoWithUserName("user/repo")
                .build();

        Context context = getInstrumentation().getTargetContext();
        avatarLoader = new AvatarLoader(context);
        layoutInflater = LayoutInflater.from(context);
    }

    private GitHubEvent createEvent(GitHubEventType type, GitHubPayload payload) {
        return GitHubEvent.builder()
                .id("test")
                .createdAt(new Date())
                .type(type)
                .payload(payload)
                .actor(actor)
                .repo(repo)
                .build();
    }

    private void verify(String expected) {
        CharSequence actual = text.getText();
        assertNotNull(actual);
        assertEquals(expected, actual.toString());
    }

    private void updateView(GitHubEvent event) {

        NewsItem item = NewsItem.createNewsItem(avatarLoader, event);

        View itemView = layoutInflater.inflate(item.getLayout(), null);
        ViewHolder viewHolder = item.createViewHolder(itemView);
        item.bind((com.xwray.groupie.kotlinandroidextensions.ViewHolder) viewHolder, 0);

        text = viewHolder.itemView.findViewById(R.id.tv_event);
        assertNotNull(text);
    }

    /**
     * Verify text of commit comment event
     */
    @Test
    @UiThreadTest
    public void testCommitCommentEvent() {
        GitHubEvent event = createEvent(GitHubEventType.CommitCommentEvent,
                CommitCommentPayload.builder().build());
        updateView(event);

        verify("user commented on user/repo");
    }

    /**
     * Verify text of create event
     */
    @Test
    @UiThreadTest
    public void testCreateRepositoryEvent() {
        CreatePayload payload = CreatePayload.builder()
                .refType(ReferenceType.Repository)
                .build();

        GitHubEvent event = createEvent(GitHubEventType.CreateEvent, payload);
        updateView(event);

        verify("user created repository repo");
    }

    /**
     * Verify text of create event
     */
    @Test
    @UiThreadTest
    public void testCreateBranchEvent() {
        CreatePayload payload = CreatePayload.builder()
                .refType(ReferenceType.Branch)
                .ref("b1")
                .build();

        GitHubEvent event = createEvent(GitHubEventType.CreateEvent, payload);
        updateView(event);

        verify("user created branch b1 at user/repo");
    }

    /**
     * Verify text of delete event
     */
    @Test
    @UiThreadTest
    public void testDelete() {
        DeletePayload payload = DeletePayload.builder()
                .refType(ReferenceType.Branch)
                .ref("b1")
                .build();

        GitHubEvent event = createEvent(GitHubEventType.DeleteEvent, payload);
        updateView(event);

        verify("user deleted branch b1 at user/repo");
    }

    /**
     * Verify text of follow event
     */
    @Test
    @UiThreadTest
    public void testFollow() {
        User target = User.builder()
                .login("user2")
                .build();

        FollowPayload payload = FollowPayload.builder()
                .target(target)
                .build();

        GitHubEvent event = createEvent(GitHubEventType.FollowEvent, payload);
        updateView(event);

        verify("user started following user2");
    }

    /**
     * Verify text of Gist event
     */
    @Test
    @UiThreadTest
    public void testGist() {
        Gist gist = Gist.builder()
                .id("1")
                .build();

        GistPayload payload = GistPayload.builder()
                .action(GistPayload.Action.Created)
                .gist(gist)
                .build();

        GitHubEvent event = createEvent(GitHubEventType.GistEvent, payload);
        updateView(event);

        verify("user created Gist 1");
    }

    /**
     * Verify text of wiki event
     */
    @Test
    @UiThreadTest
    public void testWiki() {
        GitHubEvent event = createEvent(GitHubEventType.GollumEvent, null);
        updateView(event);

        verify("user updated the wiki in user/repo");
    }

    /**
     * Verify text of issue comment event
     */
    @Test
    @UiThreadTest
    public void testIssueComment() {
        Issue issue = Issue.builder()
                .number(5)
                .build();

        IssueCommentPayload payload = IssueCommentPayload.builder()
                .issue(issue)
                .build();

        GitHubEvent event = createEvent(GitHubEventType.IssueCommentEvent, payload);
        updateView(event);

        verify("user commented on issue 5 on user/repo");
    }

    /**
     * Verify text of issue event
     */
    @Test
    @UiThreadTest
    public void testIssue() {
        Issue issue = Issue.builder()
                .number(8)
                .build();

        IssuesPayload payload = IssuesPayload.builder()
                .action(IssuesPayload.Action.Closed)
                .issue(issue)
                .build();

        GitHubEvent event = createEvent(GitHubEventType.IssuesEvent, payload);
        updateView(event);

        verify("user closed issue 8 on user/repo");
    }

    /**
     * Verify text of member event
     */
    @Test
    @UiThreadTest
    public void testAddMember() {
        User user = User.builder()
                .login("person")
                .build();

        MemberPayload payload = MemberPayload.builder()
                .member(user)
                .build();

        GitHubEvent event = createEvent(GitHubEventType.MemberEvent, payload);
        updateView(event);

        verify("user added person as a collaborator to user/repo");
    }

    /**
     * Verify text of open sourced event
     */
    @Test
    @UiThreadTest
    public void testOpenSourced() {
        GitHubEvent event = createEvent(GitHubEventType.PublicEvent, null);
        updateView(event);

        verify("user open sourced repository user/repo");
    }

    /**
     * Verify text of watch event
     */
    @Test
    @UiThreadTest
    public void testWatch() {
        GitHubEvent event = createEvent(GitHubEventType.WatchEvent, null);
        updateView(event);

        verify("user starred user/repo");
    }

    /**
     * Verify text of pull request event
     */
    @Test
    @UiThreadTest
    public void testPullRequest() {
        PullRequestPayload payload = PullRequestPayload.builder()
                .number(30)
                .action(PullRequestPayload.Action.Closed)
                .build();

        GitHubEvent event = createEvent(GitHubEventType.PullRequestEvent, payload);
        updateView(event);

        verify("user closed pull request 30 on user/repo");
    }

    /**
     * Verify text of push event
     */
    @Test
    @UiThreadTest
    public void testPush() {
        PushPayload payload = PushPayload.builder()
                .ref("refs/heads/master")
                .commits(Collections.emptyList())
                .build();

        GitHubEvent event = createEvent(GitHubEventType.PushEvent, payload);
        updateView(event);

        verify("user pushed to master at user/repo");
    }

    /**
     * Verify text of push event
     */
    @Test
    @UiThreadTest
    public void testTeamAdd() {
        Team team = Team.builder()
                .name("t1")
                .build();

        Repository repo = Repository.builder()
                .name("r2")
                .build();

        TeamAddPayload payload = TeamAddPayload.builder()
                .repository(repo)
                .team(team)
                .build();

        GitHubEvent event = createEvent(GitHubEventType.TeamAddEvent, payload);
        updateView(event);

        verify("user added r2 to team t1");
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/ViewVisibiltyIdlingResource.kt
================================================
package com.github.pockethub.android.tests

import android.app.Activity
import android.os.Handler
import android.view.View
import androidx.annotation.IdRes
import androidx.test.espresso.IdlingResource
import androidx.test.espresso.IdlingResource.ResourceCallback
import java.lang.ref.WeakReference

/**
 * [IdlingResource] which monitors a [View] for a given visibility state. The resource is considered idle when the
 * View has the desired state.
 *
 * @author vaughandroid@gmail.com
 * @param view the View to monitor
 * @param visibility One of [View.VISIBLE], [View.INVISIBLE], or [View.GONE].
 */
class ViewVisibilityIdlingResource(view: View, private val mVisibility: Int) : IdlingResource {

    /** Hold weak reference to the View, so we don't leak memory even if the resource isn't unregistered.  */
    private val mView: WeakReference<View> = WeakReference(view)
    private val mName: String

    private var mResourceCallback: ResourceCallback? = null

    /**
     * @param activity which owns the View
     * @param viewId ID of the View to monitor
     * @param visibility One of [View.VISIBLE], [View.INVISIBLE], or [View.GONE].
     */
    constructor(activity: Activity, @IdRes viewId: Int, visibility: Int)
        : this(activity.findViewById<View>(viewId), visibility)

    init {
        mName = "View Visibility for view " + view.id + "(@" + System.identityHashCode(mView) + ")"
    }

    override fun getName(): String {
        return mName
    }

    override fun isIdleNow(): Boolean {
        val view = mView.get()
        val isIdle = view == null || view.visibility == mVisibility
        if (isIdle) {
            if (mResourceCallback != null) {
                mResourceCallback!!.onTransitionToIdle()
            }
        } else {
            /* Force a re-check of the idle state in a little while.
             * If isIdleNow() returns false, Espresso only polls it every few seconds which can slow down our tests.
             * Ideally we would watch for the visibility state changing, but AFAIK we can't detect when a View's
             * visibility changes to GONE.
             */
            Handler().postDelayed({ isIdleNow }, IDLE_POLL_DELAY_MILLIS.toLong())
        }

        return isIdle
    }

    override fun registerIdleTransitionCallback(resourceCallback: ResourceCallback) {
        mResourceCallback = resourceCallback
    }

    companion object {

        private val IDLE_POLL_DELAY_MILLIS = 100
    }
}

================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/commit/CommitUriMatcherTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.commit;

import android.net.Uri;

import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import com.github.pockethub.android.core.commit.CommitMatch;
import com.github.pockethub.android.core.commit.CommitUriMatcher;
import org.junit.Test;
import org.junit.runner.RunWith;

import static junit.framework.Assert.assertNotNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;

/**
 * Tests of {@link CommitUriMatcher}
 */
@RunWith(AndroidJUnit4.class)
@SmallTest
public class CommitUriMatcherTest {

    /**
     * Verity empty uri
     */
    @Test
    public void testEmptyUri() {
        assertNull(CommitUriMatcher.getCommit(Uri.parse("")));
    }

    /**
     * Verify non-hex commit SHA-1 in uri
     */
    public void testNonHexId() {
        assertNull(CommitUriMatcher.getCommit(Uri
                .parse("https://github.com/defunkt/resque/commit/abck")));
    }

    /**
     * Verify http uri
     */
    @Test
    public void testHttpUri() {
        CommitMatch commit = CommitUriMatcher.getCommit(Uri
                .parse("https://github.com/defunkt/resque/commit/abcd"));
        assertNotNull(commit);
        assertEquals("abcd", commit.getCommit());
        assertNotNull(commit.getRepository());
        assertEquals("resque", commit.getRepository().name());
        assertNotNull(commit.getRepository().owner());
        assertEquals("defunkt", commit.getRepository().owner().login());
    }

    /**
     * Verify https uri
     */
    @Test
    public void testHttpsUri() {
        CommitMatch commit = CommitUriMatcher.getCommit(Uri
                .parse("https://github.com/defunkt/resque/commit/1234"));
        assertNotNull(commit);
        assertEquals("1234", commit.getCommit());
        assertNotNull(commit.getRepository());
        assertEquals("resque", commit.getRepository().name());
        assertNotNull(commit.getRepository().owner());
        assertEquals("defunkt", commit.getRepository().owner().login());
    }

    /**
     * Verify uri with comment fragment
     */
    @Test
    public void testCommentUri() {
        CommitMatch commit = CommitUriMatcher
                .getCommit(Uri
                        .parse("https://github.com/defunkt/resque/commit/a1b2#commitcomment-1605701"));
        assertNotNull(commit);
        assertEquals("a1b2", commit.getCommit());
        assertNotNull(commit.getRepository());
        assertEquals("resque", commit.getRepository().name());
        assertNotNull(commit.getRepository().owner());
        assertEquals("defunkt", commit.getRepository().owner().login());
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/commit/CommitUtilsTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.commit;

import androidx.test.filters.SmallTest;
import com.github.pockethub.android.core.commit.CommitUtils;
import com.meisolsson.githubsdk.model.Commit;
import com.meisolsson.githubsdk.model.GitHubFile;
import com.meisolsson.githubsdk.model.git.GitCommit;
import com.meisolsson.githubsdk.model.git.GitUser;
import org.junit.Test;

import java.util.Date;

import static junit.framework.Assert.assertFalse;
import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;

/**
 * Test of {@link CommitUtils}
 */
@SmallTest
public class CommitUtilsTest {

    /**
     * Test commit SHA-1 abbreviation
     */
    @Test
    public void testAbbreviate() {
        assertNull(CommitUtils.abbreviate((GitCommit) null));
        assertNull(CommitUtils.abbreviate((Commit) null));
        assertNull(CommitUtils.abbreviate((String) null));
        assertEquals("", CommitUtils.abbreviate(""));
        assertEquals("a", CommitUtils.abbreviate("a"));
        assertEquals("abcdefghij", CommitUtils.abbreviate("abcdefghijk"));

        GitCommit gitCommit = GitCommit.builder()
                .sha("abc")
                .build();

        assertEquals("abc", CommitUtils.abbreviate(gitCommit));

        Commit commit = Commit.builder()
                .sha("abcd")
                .build();

        assertEquals("abcd", CommitUtils.abbreviate(commit));
    }

    /**
     * Test commit name parsing from path
     */
    @Test
    public void testGetName() {
        assertNull(CommitUtils.getName((String) null));
        assertNull(CommitUtils.getName((GitHubFile) null));
        assertEquals("", CommitUtils.getName(""));
        assertEquals("/", CommitUtils.getName("/"));
        assertEquals("b", CommitUtils.getName("a/b"));
        GitHubFile file = GitHubFile.builder().filename("a/b/c").build();
        assertEquals("c", CommitUtils.getName(file));
    }

    /**
     * Test commit SHA-1 evaluation
     */
    @Test
    public void testIsValidCommit() {
        assertFalse(CommitUtils.isValidCommit(""));
        assertTrue(CommitUtils.isValidCommit("a"));
        assertTrue(CommitUtils.isValidCommit("bbbbb"));
        assertFalse(CommitUtils.isValidCommit("am"));
        assertFalse(CommitUtils.isValidCommit("xyz"));
    }

    /**
     * Test parsing author from commit
     */
    @Test
    public void testGetAuthor() {
        Commit commit = Commit.builder().build();
        assertNull(CommitUtils.getAuthor(commit));

        GitCommit rawCommit = GitCommit.builder().build();
        commit = commit.toBuilder()
                .commit(rawCommit)
                .build();
        assertNull(CommitUtils.getAuthor(commit));

        GitUser user = GitUser.builder().build();
        rawCommit = rawCommit.toBuilder()
                .author(user)
                .build();
        commit = commit.toBuilder()
                .commit(rawCommit)
                .build();
        assertNull(CommitUtils.getAuthor(commit));

        user = user.toBuilder().name("u1").build();
        rawCommit = rawCommit.toBuilder()
                .author(user)
                .build();
        commit = commit.toBuilder()
                .commit(rawCommit)
                .build();
        assertEquals("u1", CommitUtils.getAuthor(commit));
    }

    /**
     * Test parsing committer from commit
     */
    @Test
    public void testGetCommitter() {
        Commit commit = Commit.builder().build();
        assertNull(CommitUtils.getCommitter(commit));

        GitCommit rawCommit = GitCommit.builder().build();
        commit = commit.toBuilder()
                .commit(rawCommit)
                .build();
        assertNull(CommitUtils.getCommitter(commit));

        GitUser user = GitUser.builder().build();
        rawCommit = rawCommit.toBuilder()
                .committer(user)
                .build();
        commit = commit.toBuilder()
                .commit(rawCommit)
                .build();
        assertNull(CommitUtils.getCommitter(commit));

        user = user.toBuilder().name("u1").build();
        rawCommit = rawCommit.toBuilder()
                .committer(user)
                .build();
        commit = commit.toBuilder()
                .commit(rawCommit)
                .build();
        assertEquals("u1", CommitUtils.getCommitter(commit));

        user = user.toBuilder().name("u2").build();
        rawCommit = rawCommit.toBuilder()
                .committer(user)
                .build();
        commit = commit.toBuilder()
                .commit(rawCommit)
                .build();
        assertEquals("u2", CommitUtils.getCommitter(commit));
    }

    /**
     * Test parsing author date from commit
     */
    @Test
    public void testGetAuthorDate() {
        Commit commit = Commit.builder().build();
        assertNull(CommitUtils.getAuthorDate(commit));

        GitCommit rawCommit = GitCommit.builder().build();
        commit = commit.toBuilder()
                .commit(rawCommit)
                .build();
        assertNull(CommitUtils.getAuthorDate(commit));

        GitUser user = GitUser.builder().build();
        rawCommit = rawCommit.toBuilder()
                .author(user)
                .build();
        commit = commit.toBuilder()
                .commit(rawCommit)
                .build();
        assertNull(CommitUtils.getAuthorDate(commit));

        user = user.toBuilder()
                .date(new Date(12000))
                .build();
        rawCommit = rawCommit.toBuilder()
                .author(user)
                .build();
        commit = commit.toBuilder()
                .commit(rawCommit)
                .build();
        assertEquals(new Date(12000), CommitUtils.getAuthorDate(commit));
    }

    /**
     * Test parsing committer date from commit
     */
    @Test
    public void testGetCommitterDate() {
        Commit commit = Commit.builder().build();
        assertNull(CommitUtils.getCommitterDate(commit));

        GitCommit rawCommit = GitCommit.builder().build();
        commit = commit.toBuilder()
                .commit(rawCommit)
                .build();
        assertNull(CommitUtils.getCommitterDate(commit));

        GitUser user = GitUser.builder().build();
        rawCommit = rawCommit.toBuilder()
                .committer(user)
                .build();
        commit = commit.toBuilder()
                .commit(rawCommit)
                .build();
        assertNull(CommitUtils.getCommitterDate(commit));

        user = user.toBuilder()
                .date(new Date(12000))
                .build();
        rawCommit = rawCommit.toBuilder()
                .committer(user)
                .build();
        commit = commit.toBuilder()
                .commit(rawCommit)
                .build();
        assertEquals(new Date(12000), CommitUtils.getCommitterDate(commit));
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/commit/CreateCommentActivityTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.commit;

import androidx.test.espresso.ViewInteraction;
import androidx.test.espresso.action.ViewActions;
import androidx.test.espresso.assertion.ViewAssertions;
import androidx.test.rule.ActivityTestRule;
import com.github.pockethub.android.R;
import com.github.pockethub.android.ui.commit.CreateCommentActivity;
import com.meisolsson.githubsdk.model.Repository;
import com.meisolsson.githubsdk.model.User;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;

import static androidx.test.espresso.Espresso.closeSoftKeyboard;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.matcher.ViewMatchers.isEnabled;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static org.hamcrest.CoreMatchers.not;

/**
 * Tests of {@link CreateCommentActivity}
 */
public class CreateCommentActivityTest {

    @Rule
    public ActivityTestRule<CreateCommentActivity> activityTestRule =
            new ActivityTestRule<>(CreateCommentActivity.class, false, false);

    @Before
    public void setUp() {
        User user = User.builder()
                .login("owner")
                .build();

        Repository repo = Repository.builder()
                .name("name")
                .owner(user)
                .build();

        activityTestRule.launchActivity(CreateCommentActivity.createIntent(repo, "abcdef"));
    }

    /**
     * Verify empty comment can't be created
     */
    @Test
    public void testEmptyCommentIsProhibited() {
        ViewInteraction createMenu = onView(withId(R.id.m_apply));
        ViewInteraction comment = onView(withId(R.id.et_comment));

        createMenu.check(ViewAssertions.matches(not(isEnabled())));

        closeSoftKeyboard();
        comment.perform(ViewActions.typeText("a"));

        createMenu.check(ViewAssertions.matches(isEnabled()));
        comment.perform(ViewActions.replaceText(""));

        createMenu.check(ViewAssertions.matches(not(isEnabled())));
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/commit/DiffStylerTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.commit;

import androidx.test.filters.SmallTest;
import com.github.pockethub.android.ui.commit.DiffStyler;
import com.meisolsson.githubsdk.model.GitHubFile;
import org.junit.Test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.Collections;
import java.util.List;

import static androidx.test.InstrumentationRegistry.getTargetContext;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertEquals;

/**
 * Tests of {@link DiffStyler}
 */
@SmallTest
public class DiffStylerTest {

    private void compareStyled(String patch) throws IOException {
        assertNotNull(patch);
        String fileName = "file.txt";
        DiffStyler styler = new DiffStyler(getTargetContext().getResources());
        GitHubFile file = GitHubFile.builder()
                .filename(fileName)
                .patch(patch)
                .build();

        styler.setFiles(Collections.singletonList(file));
        List<CharSequence> styled = styler.get(fileName);
        assertNotNull(styled);
        BufferedReader reader = new BufferedReader(new StringReader(patch));
        String line = reader.readLine();
        int processed = 0;
        while (line != null) {
            assertEquals(line, styled.get(processed).toString());
            line = reader.readLine();
            processed++;
        }
        assertEquals(processed, styled.size());
    }

    /**
     * Test styler with empty files
     */
    @Test
    public void testEmptyFiles() {
        DiffStyler styler = new DiffStyler(getTargetContext().getResources());
        styler.setFiles(null);
        assertTrue(styler.get("navigation_drawer_header_background").isEmpty());
        styler.setFiles(Collections.emptyList());
        assertTrue(styler.get("navigation_drawer_header_background").isEmpty());
    }

    /**
     * Test styler with empty patch
     */
    @Test
    public void testEmptyPatch() {
        DiffStyler styler = new DiffStyler(getTargetContext().getResources());
        GitHubFile file = GitHubFile.builder()
                .filename("file.txt")
                .build();
        styler.setFiles(Collections.singletonList(file));
        assertTrue(styler.get("file.txt").isEmpty());

        file = file.toBuilder().filename("").build();
        styler.setFiles(Collections.singletonList(file));
        assertTrue(styler.get("file.txt").isEmpty());
    }

    /**
     * Test styler for file with only single newline
     *
     * @throws IOException
     */
    @Test
    public void testOnlyNewline() throws IOException {
        compareStyled("\n");
    }

    /**
     * Test styler for file with an empty patch line with other valid lines
     *
     * @throws IOException
     */
    @Test
    public void testEmptyPatchLineWithOtherValidLines() throws IOException {
        compareStyled("@@ 0,1 0,1 @@\n\n-navigation_drawer_header_background\n");
    }

    /**
     * Test styler for file with trailing empty line
     *
     * @throws IOException
     */
    @Test
    public void testTrailingEmptyLine() throws IOException {
        compareStyled("@@ 0,1 0,1 @@\n-navigation_drawer_header_background\n\n");
    }

    /**
     * Test styler for file with only newlines
     *
     * @throws IOException
     */
    @Test
    public void testOnlyNewlines() throws IOException {
        compareStyled("\n\n\n");
    }

    /**
     * Test styler for patch with no trailing newline after the second line
     *
     * @throws IOException
     */
    @Test
    public void testNoTrailingNewlineAfterSecondLine() throws IOException {
        compareStyled("@@ 1,2 1,2 @@\n+navigation_drawer_header_background");
    }

    /**
     * Test styler for patch with no trailing newline
     *
     * @throws IOException
     */
    @Test
    public void testNoTrailingNewline() throws IOException {
        compareStyled("@@ 1,2 1,2 @@");
    }

    /**
     * Test styler for file with valid patch
     *
     * @throws IOException
     */
    @Test
    public void testFormattedPatch() throws IOException {
        compareStyled("@@ 1,2 1,2 @@\n+navigation_drawer_header_background\n");
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/commit/FullCommitTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.commit;

import androidx.test.filters.SmallTest;
import com.github.pockethub.android.core.commit.FullCommit;
import com.meisolsson.githubsdk.model.Commit;
import com.meisolsson.githubsdk.model.GitHubFile;
import com.meisolsson.githubsdk.model.git.GitComment;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

import static junit.framework.Assert.assertFalse;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

/**
 * Tests of {@link FullCommit}
 */
@SmallTest
public class FullCommitTest {

    /**
     * Test commit with one file and one line comment
     */
    @Test
    public void testSingleLineCommentSingleFile() {
        GitHubFile file = GitHubFile.builder()
                .filename("a.txt")
                .build();

        GitComment comment = GitComment.builder()
                .path(file.filename())
                .position(10)
                .build();

        Commit commit = Commit.builder()
                .files(Collections.singletonList(file))
                .build();

        FullCommit full = new FullCommit(commit, new ArrayList<>(
                Collections.singletonList(comment)));

        assertTrue(full.isEmpty());
        assertEquals(1, full.getFiles().size());
        assertEquals(comment, full.getFiles().get(0).get(10).get(0));
    }

    /**
     * Test commit with one file and one commit comment
     */
    @Test
    public void testSingleCommentSingleFile() {
        GitHubFile file = GitHubFile.builder()
                .filename("a.txt")
                .build();

        GitComment comment = GitComment.builder().build();

        Commit commit = Commit.builder()
                .files(Collections.singletonList(file))
                .build();

        FullCommit full = new FullCommit(commit, Collections.singletonList(comment));
        assertFalse(full.isEmpty());
        assertEquals(comment, full.get(0));
        assertEquals(1, full.getFiles().size());
    }

    /**
     * Test commit with no files and one commit comment
     */
    @Test
    public void testSingleCommentNoFiles() {
        GitComment comment = GitComment.builder().build();

        Commit commit = Commit.builder().build();

        FullCommit full = new FullCommit(commit, Collections.singletonList(comment));
        assertFalse(full.isEmpty());
        assertEquals(comment, full.get(0));
        assertTrue(full.getFiles().isEmpty());
    }

    /**
     * Test commit with no comments and one file
     */
    @Test
    public void testNoCommentsSingleFile() {
        GitHubFile file = GitHubFile.builder()
                .filename("a.txt")
                .build();

        Commit commit = Commit.builder()
                .files(Collections.singletonList(file))
                .build();

        FullCommit full = new FullCommit(commit);
        assertTrue(full.isEmpty());
        assertEquals(1, full.getFiles().size());
    }

    /**
     * Test commit with line and global comments
     */
    @Test
    public void testBothTypesOfComments() {
        GitHubFile file = GitHubFile.builder()
                .filename("a.txt")
                .build();

        GitComment comment1 = GitComment.builder()
                .path(file.filename())
                .position(10)
                .build();

        GitComment comment2 = GitComment.builder().build();

        Commit commit = Commit.builder()
                .files(Collections.singletonList(file))
                .build();

        FullCommit full = new FullCommit(commit, new ArrayList<>(Arrays.asList(comment1, comment2)));
        assertEquals(1, full.size());
        assertEquals(comment2, full.get(0));
        assertEquals(1, full.getFiles().size());
        assertEquals(comment1, full.getFiles().get(0).get(10).get(0));
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/gist/CreateCommentActivityTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.gist;

import androidx.test.espresso.ViewInteraction;
import androidx.test.espresso.action.ViewActions;
import androidx.test.espresso.assertion.ViewAssertions;
import androidx.test.rule.ActivityTestRule;
import com.github.pockethub.android.R;
import com.github.pockethub.android.ui.gist.CreateCommentActivity;
import com.meisolsson.githubsdk.model.Gist;
import com.meisolsson.githubsdk.model.User;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;

import static androidx.test.espresso.Espresso.closeSoftKeyboard;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.matcher.ViewMatchers.isEnabled;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static org.hamcrest.CoreMatchers.not;

/**
 * Tests of {@link CreateCommentActivity}
 */
public class CreateCommentActivityTest  {

    @Rule
    public ActivityTestRule<CreateCommentActivity> activityTestRule =
            new ActivityTestRule<>(CreateCommentActivity.class, false, false);

    @Before
    public void setUp() {
        User user = User.builder()
                .login("abc")
                .build();

        Gist gist = Gist.builder()
                .owner(user)
                .id("123")
                .build();

        activityTestRule.launchActivity(CreateCommentActivity.createIntent(gist));
    }

    /**
     * Verify empty comment can't be created
     *
     * @throws Throwable
     */
    @Test
    public void testEmptyCommentIsProhibited() {
        ViewInteraction createMenu = onView(withId(R.id.m_apply));
        ViewInteraction comment = onView(withId(R.id.et_comment));

        createMenu.check(ViewAssertions.matches(not(isEnabled())));

        closeSoftKeyboard();
        comment.perform(ViewActions.typeText("a"));
        createMenu.check(ViewAssertions.matches(isEnabled()));
        comment.perform(ViewActions.replaceText(""));

        createMenu.check(ViewAssertions.matches(not(isEnabled())));
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/gist/CreateGistActivityTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.gist;

import android.content.Intent;
import androidx.test.espresso.ViewInteraction;
import androidx.test.espresso.action.ViewActions;
import androidx.test.espresso.assertion.ViewAssertions;
import androidx.test.rule.ActivityTestRule;
import com.github.pockethub.android.R;
import com.github.pockethub.android.R.id;
import com.github.pockethub.android.ui.gist.CreateGistActivity;
import org.junit.Rule;
import org.junit.Test;

import static android.content.Intent.EXTRA_TEXT;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.matcher.ViewMatchers.*;
import static org.hamcrest.CoreMatchers.not;

/**
 * Tests of {@link CreateGistActivity}
 */
public class CreateGistActivityTest {

    @Rule
    public ActivityTestRule<CreateGistActivity> activityTestRule =
            new ActivityTestRule<>(CreateGistActivity.class, false, false);

    /**
     * Create Gist with initial text
     */
    @Test
    public void testCreateWithInitialText() {
        activityTestRule.launchActivity(new Intent().putExtra(EXTRA_TEXT, "gist content"));

        onView(withId(id.create_gist))
                .check(ViewAssertions.matches(isEnabled()));

        onView(withId(id.et_gist_content))
                .check(ViewAssertions.matches(withText("gist content")));
    }

    /**
     * Create Gist with no initial text
     *
     * @throws Throwable
     */
    @Test
    public void testCreateWithNoInitialText() throws Throwable {
        activityTestRule.launchActivity(new Intent());
        ViewInteraction createMenu = onView(withId(R.id.create_gist));
        ViewInteraction content = onView(withId(R.id.et_gist_content));

        createMenu.check(ViewAssertions.matches(not(isEnabled())));

        content.perform(ViewActions.typeText("gist content"));

        createMenu.check(ViewAssertions.matches(isEnabled()));
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/gist/GistFilesViewActivityTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.gist;

import android.content.Context;
import androidx.collection.ArrayMap;
import androidx.test.rule.ActivityTestRule;
import androidx.viewpager.widget.ViewPager;
import com.github.pockethub.android.PocketHub;
import com.github.pockethub.android.R.id;
import com.github.pockethub.android.core.gist.GistStore;
import com.github.pockethub.android.ui.gist.GistFilesViewActivity;
import com.meisolsson.githubsdk.model.Gist;
import com.meisolsson.githubsdk.model.GistFile;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;

import java.util.Map;

import static androidx.test.InstrumentationRegistry.getInstrumentation;
import static org.junit.Assert.assertEquals;

/**
 * Tests of {@link GistFilesViewActivity}
 */
public class GistFilesViewActivityTest {

    protected GistStore store;

    private Gist gist;

    @Rule
    public ActivityTestRule<GistFilesViewActivity> activityTestRule =
            new ActivityTestRule<>(GistFilesViewActivity.class, false, false);

    @Before
    public void setUp() {
        Context context = getInstrumentation().getTargetContext();
        PocketHub pocketHub = (PocketHub) context.getApplicationContext();
        store = pocketHub.applicationComponent().gistStore();

        Map<String, GistFile> files = new ArrayMap<>();

        GistFile a = GistFile.builder()
                .content("aa")
                .filename("a")
                .build();
        GistFile b = GistFile.builder()
                .content("bb")
                .filename("b")
                .build();

        files.put("a", a);
        files.put("b", b);

        gist = Gist.builder()
                .id("abcd")
                .files(files)
                .build();

        store.addGist(gist);
        activityTestRule.launchActivity(GistFilesViewActivity.Companion.createIntent(gist, 0));
    }

    /**
     * Verify changing pages between gist files
     *
     * @throws Throwable
     */
    @Test
    public void testChangingPages() throws Throwable {
        final ViewPager pager = activityTestRule.getActivity().findViewById(id.vp_pages);

        assertEquals(0, pager.getCurrentItem());
        activityTestRule.runOnUiThread(() -> pager.setCurrentItem(1, true));
        assertEquals(1, pager.getCurrentItem());
        activityTestRule.runOnUiThread(() -> pager.setCurrentItem(0, true));
        assertEquals(0, pager.getCurrentItem());
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/gist/GistStoreTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.gist;

import androidx.test.filters.SmallTest;
import com.github.pockethub.android.core.gist.GistStore;
import com.meisolsson.githubsdk.model.Gist;
import org.junit.Test;

import static junit.framework.Assert.assertNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;

/**
 * Unit tests of {@link GistStore}
 */
@SmallTest
public class GistStoreTest {

    /**
     * Verify issue is updated when re-added
     */
    @Test
    public void testReuseIssue() {
        GistStore store = new GistStore();
        assertNull(store.getGist("abcd"));

        Gist gist = Gist.builder()
                .id("abcd")
                .description("description")
                .build();

        // The gist is added and the store will return the given gist
        assertEquals(gist, store.addGist(gist));
        assertEquals(gist, store.getGist("abcd"));

        Gist gist2 = Gist.builder()
                .id("abcd")
                .description("description2")
                .build();

        // The gist has now been updated and should not return the same gist
        assertNotEquals(gist, store.addGist(gist2));
        assertNotEquals(gist.description(), gist2.description());
        assertNotEquals(gist, store.getGist("abcd"));
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/gist/GistUriMatcherTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.gist;

import android.net.Uri;
import androidx.test.filters.SmallTest;
import com.github.pockethub.android.core.gist.GistUriMatcher;
import com.meisolsson.githubsdk.model.Gist;
import org.junit.Test;

import static junit.framework.Assert.assertNotNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;

/**
 * Unit tests of {@link GistUriMatcher}
 */
@SmallTest
public class GistUriMatcherTest {

    /**
     * Verify empty uri
     */
    @Test
    public void testEmptyUri() {
        assertNull(GistUriMatcher.getGist(Uri.parse("")));
    }

    /**
     * Verify invalid Gist ids in URIs
     */
    @Test
    public void testNonGistId() {
        assertNull(GistUriMatcher.getGist(Uri
                .parse("https://gist.github.com/TEST")));
        assertNull(GistUriMatcher.getGist(Uri
                .parse("https://gist.github.com/abc%20")));
        assertNull(GistUriMatcher.getGist(Uri
                .parse("https://gist.github.com/abcdefg")));
    }

    /**
     * Verify public Gist id
     */
    @Test
    public void testPublicGist() {
        Gist gist = GistUriMatcher.getGist(Uri
                .parse("https://gist.github.com/1234"));
        assertNotNull(gist);
        assertEquals("1234", gist.id());
    }

    /**
     * Verify public Gist id
     */
    @Test
    public void testPrivateGist() {
        Gist gist = GistUriMatcher.getGist(Uri
                .parse("https://gist.github.com/abcd1234abcd1234abcd"));
        assertNotNull(gist);
        assertEquals("abcd1234abcd1234abcd", gist.id());
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/issue/CreateCommentActivityTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.issue;

import androidx.test.espresso.ViewInteraction;
import androidx.test.espresso.action.ViewActions;
import androidx.test.espresso.assertion.ViewAssertions;
import androidx.test.rule.ActivityTestRule;
import com.github.pockethub.android.R;
import com.github.pockethub.android.ui.issue.CreateCommentActivity;
import com.github.pockethub.android.util.InfoUtils;
import com.meisolsson.githubsdk.model.User;
import org.junit.Before;
import org.junit.Test;

import static androidx.test.espresso.Espresso.closeSoftKeyboard;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.matcher.ViewMatchers.isEnabled;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static org.hamcrest.CoreMatchers.not;

/**
 * Tests of {@link CreateCommentActivity}
 */
public class CreateCommentActivityTest {


    public ActivityTestRule<CreateCommentActivity> activityTestRule =
            new ActivityTestRule<>(CreateCommentActivity.class);

    @Before
    public void setUp() {
        User user = User.builder()
                .login("u")
                .build();

        activityTestRule.launchActivity(
                CreateCommentActivity.createIntent(
                        InfoUtils.createRepoFromData("o", "u"),
                        1,
                        user
                )
        );
    }

    /**
     * Verify empty comment can't be created
     *
     * @throws Throwable
     */
    @Test
    public void testEmptyCommentIsProhibited() {
        ViewInteraction createMenu = onView(withId(R.id.m_apply));
        ViewInteraction comment = onView(withId(R.id.et_comment));

        createMenu.check(ViewAssertions.matches(not(isEnabled())));

        closeSoftKeyboard();
        comment.perform(ViewActions.typeText("a"));
        createMenu.check(ViewAssertions.matches(isEnabled()));
        comment.perform(ViewActions.replaceText(""));

        createMenu.check(ViewAssertions.matches(not(isEnabled())));
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/issue/EditIssueActivityTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.issue;

import android.view.View;
import androidx.test.espresso.IdlingRegistry;
import androidx.test.espresso.ViewInteraction;
import androidx.test.espresso.action.ViewActions;
import androidx.test.espresso.assertion.ViewAssertions;
import androidx.test.rule.ActivityTestRule;
import com.github.pockethub.android.R;
import com.github.pockethub.android.tests.ViewVisibilityIdlingResource;
import com.github.pockethub.android.ui.issue.EditIssueActivity;
import com.github.pockethub.android.util.InfoUtils;
import com.meisolsson.githubsdk.model.Repository;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;

import static androidx.test.espresso.Espresso.closeSoftKeyboard;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.matcher.ViewMatchers.isEnabled;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static org.hamcrest.CoreMatchers.not;

/**
 * Tests of {@link EditIssueActivity}
 */
public class EditIssueActivityTest {

    @Rule
    public ActivityTestRule<EditIssueActivity> activityTestRule =
            new ActivityTestRule<>(EditIssueActivity.class, true, false);

    @Before
    public void setUp() {
        Repository repo = InfoUtils.createRepoFromData("owner", "repo");
        activityTestRule.launchActivity(EditIssueActivity.Companion.createIntent(repo));
    }

    /**
     * Verify save menu is properly enabled/disable depending on the issue have
     * a non-empty title
     *
     * @throws Throwable
     */
    @Test
    public void testSaveMenuEnabled() {
        ViewInteraction createMenu = onView(withId(R.id.m_apply));
        ViewInteraction comment = onView(withId(R.id.et_issue_title));
        ViewVisibilityIdlingResource idlingResource =
                new ViewVisibilityIdlingResource(
                        activityTestRule.getActivity(),
                        R.id.sv_issue_content,
                        View.VISIBLE
                );

        IdlingRegistry.getInstance().register(idlingResource);
        createMenu.check(ViewAssertions.matches(not(isEnabled())));

        closeSoftKeyboard();
        comment.perform(ViewActions.typeText("a"));
        createMenu.check(ViewAssertions.matches(isEnabled()));
        comment.perform(ViewActions.replaceText(""));

        createMenu.check(ViewAssertions.matches(not(isEnabled())));
        IdlingRegistry.getInstance().unregister(idlingResource);
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/issue/EditIssuesFilterActivityTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.issue;

import androidx.test.rule.ActivityTestRule;
import com.github.pockethub.android.core.issue.IssueFilter;
import com.github.pockethub.android.ui.issue.EditIssuesFilterActivity;
import com.github.pockethub.android.util.InfoUtils;
import com.meisolsson.githubsdk.model.Repository;
import org.junit.Before;
import org.junit.Rule;

import java.util.UUID;

/**
 * Tests of {@link EditIssuesFilterActivity}
 */
public class EditIssuesFilterActivityTest {

    @Rule
    public ActivityTestRule<EditIssuesFilterActivity> activityTestRule =
            new ActivityTestRule<>(EditIssuesFilterActivity.class);

    @Before
    public void setUp() {
        Repository repo = InfoUtils.createRepoFromData("owner", "name");
        IssueFilter filter = new IssueFilter(repo, UUID.randomUUID().toString());
        activityTestRule.launchActivity(EditIssuesFilterActivity.Companion.createIntent(filter));
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/issue/IssueFilterTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.issue;

import androidx.test.filters.SmallTest;
import com.github.pockethub.android.core.issue.IssueFilter;
import com.meisolsson.githubsdk.model.Milestone;
import com.meisolsson.githubsdk.model.Repository;
import com.meisolsson.githubsdk.model.User;
import org.junit.Test;

import java.util.UUID;

import static junit.framework.Assert.assertFalse;
import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertEquals;

/**
 * Unit tests of {@link IssueFilter}
 */
@SmallTest
public class IssueFilterTest {

    /**
     * Verify {@link IssueFilter#equals(Object)}
     */
    @Test
    public void testEqualFilter() {
        Repository repo = Repository.builder()
                .id(1L)
                .build();

        IssueFilter filter1 = new IssueFilter(repo, UUID.randomUUID().toString());

        assertFalse(filter1.equals(null));
        assertFalse(filter1.equals(""));
        assertTrue(filter1.equals(filter1));

        IssueFilter filter2 = new IssueFilter(repo, UUID.randomUUID().toString());
        assertEquals(filter1, filter2);
        assertEquals(filter1.hashCode(), filter2.hashCode());

        User user = User.builder()
                .id(2L)
                .build();

        filter1.setAssignee(user);
        assertFalse(filter1.equals(filter2));
        filter2.setAssignee(user);
        assertEquals(filter1, filter2);
        assertEquals(filter1.hashCode(), filter2.hashCode());

        filter1.setOpen(false);
        assertFalse(filter1.equals(filter2));
        filter2.setOpen(false);
        assertEquals(filter1, filter2);
        assertEquals(filter1.hashCode(), filter2.hashCode());

        Milestone milestone = Milestone.builder()
                .number(3)
                .build();
        filter1.setMilestone(milestone);
        assertFalse(filter1.equals(filter2));
        filter2.setMilestone(milestone);
        assertEquals(filter1, filter2);
        assertEquals(filter1.hashCode(), filter2.hashCode());
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/issue/IssueStoreTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.issue;

import androidx.test.filters.SmallTest;
import com.github.pockethub.android.core.issue.IssueStore;
import com.github.pockethub.android.util.InfoUtils;
import com.meisolsson.githubsdk.model.Issue;
import com.meisolsson.githubsdk.model.Repository;
import org.junit.Test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNull;

/**
 * Unit tests of {@link IssueStore}
 */
@SmallTest
public class IssueStoreTest {

    /**
     * Verify issue is updated when re-added
     */
    @Test
    public void testReuseIssue() {
        IssueStore store = new IssueStore();
        Repository repo = InfoUtils.createRepoFromData("owner", "name");

        assertNull(store.getIssue(repo, 1));

        Issue issue = Issue.builder()
                .repository(repo)
                .number(1)
                .body("body")
                .build();
        assertEquals(issue, store.addIssue(issue));
        assertEquals(issue, store.getIssue(repo, 1));

        Issue issue2 = Issue.builder()
                .repository(repo)
                .number(1)
                .body("body2")
                .build();

        assertNotEquals(issue, store.addIssue(issue2));
        assertNotEquals(issue2.body(), issue.body());
        assertNotEquals(issue, store.getIssue(repo, 1));
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/issue/IssueUriMatcherTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.issue;

import android.net.Uri;
import androidx.test.filters.SmallTest;
import com.github.pockethub.android.core.issue.IssueUriMatcher;
import com.meisolsson.githubsdk.model.Issue;
import org.junit.Test;

import static junit.framework.Assert.assertNotNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;

/**
 * Unit tests of {@link IssueUriMatcher}
 */
@SmallTest
public class IssueUriMatcherTest {

    /**
     * Verify empty uri
     */
    @Test
    public void testEmptyUri() {
        assertNull(IssueUriMatcher.getIssue(Uri.parse("")));
    }

    /**
     * Verify non-numeric issue number in uri
     */
    @Test
    public void testNonNumericIssueNumber() {
        assertNull(IssueUriMatcher.getIssue(Uri
                .parse("https://github.com/defunkt/resque/issues/fourty")));
    }

    /**
     * Verify http uri
     */
    @Test
    public void testHttpUri() {
        Issue issue = IssueUriMatcher.getIssue(Uri
                .parse("https://github.com/defunkt/resque/issues/3"));
        assertNotNull(issue);
        assertEquals(3, issue.number().intValue());
        assertNotNull(issue.repository());
        assertEquals("resque", issue.repository().name());
        assertNotNull(issue.repository().owner());
        assertEquals("defunkt", issue.repository().owner().login());
    }

    /**
     * Verify pull uri
     */
    @Test
    public void testPullUri() {
        Issue issue = IssueUriMatcher.getIssue(Uri
                .parse("https://github.com/defunkt/resque/pull/3"));
        assertNotNull(issue);
        assertEquals(3, issue.number().intValue());
        assertNotNull(issue.repository());
        assertEquals("resque", issue.repository().name());
        assertNotNull(issue.repository().owner());
        assertEquals("defunkt", issue.repository().owner().login());
    }

    /**
     * Verify https uri
     */
    @Test
    public void testHttpsUri() {
        Issue issue = IssueUriMatcher.getIssue(Uri
                .parse("http://github.com/defunkt/resque/issues/15"));
        assertNotNull(issue);
        assertEquals(15, issue.number().intValue());
        assertNotNull(issue.repository());
        assertEquals("resque", issue.repository().name());
        assertNotNull(issue.repository().owner());
        assertEquals("defunkt", issue.repository().owner().login());
    }

    /**
     * Verify uri with comment fragment
     */
    @Test
    public void testCommentUri() {
        Issue issue = IssueUriMatcher
                .getIssue(Uri
                        .parse("https://github.com/defunkt/resque/issues/300#issuecomment-123456"));
        assertNotNull(issue);
        assertEquals(300, issue.number().intValue());
        assertNotNull(issue.repository());
        assertEquals("resque", issue.repository().name());
        assertNotNull(issue.repository().owner());
        assertEquals("defunkt", issue.repository().owner().login());
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/ref/RefUtilsTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.ref;

import androidx.test.filters.SmallTest;
import com.github.pockethub.android.core.ref.RefUtils;
import com.meisolsson.githubsdk.model.git.GitReference;
import org.junit.Test;

import static junit.framework.Assert.assertFalse;
import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;


/**
 * Tests of {@link RefUtils}
 */
@SmallTest
public class RefUtilsTest {

    /**
     * Verify {@link RefUtils#isBranch(GitReference)}
     */
    @Test
    public void testIsBranch() {
        assertFalse(RefUtils.isBranch(null));
        assertFalse(RefUtils.isBranch(GitReference.builder().build()));
        assertFalse(RefUtils.isBranch(createGitReference("")));
        assertFalse(RefUtils.isBranch(createGitReference("navigation_drawer_header_background")));
        assertFalse(RefUtils.isBranch(createGitReference("refs/tags/v1")));
        assertFalse(RefUtils.isBranch(createGitReference("refs/b1")));
        assertTrue(RefUtils.isBranch(createGitReference("refs/heads/b2")));
    }

    /**
     * Verify {@link RefUtils#isTag(GitReference)}
     */
    @Test
    public void testIsTag() {
        assertFalse(RefUtils.isTag((GitReference) null));
        assertFalse(RefUtils.isTag(GitReference.builder().build()));
        assertFalse(RefUtils.isTag(createGitReference("")));
        assertFalse(RefUtils.isTag(createGitReference("navigation_drawer_header_background")));
        assertFalse(RefUtils.isTag(createGitReference("refs/b1")));
        assertFalse(RefUtils.isTag(createGitReference("refs/heads/b2")));
        assertTrue(RefUtils.isTag(createGitReference("refs/tags/v1")));
    }

    /**
     * Verify {@link RefUtils#isValid(GitReference)}
     */
    @Test
    public void testIsValid() {
        assertFalse(RefUtils.isValid(null));
        assertFalse(RefUtils.isValid(GitReference.builder().build()));
        assertFalse(RefUtils.isValid(createGitReference("")));
        assertFalse(RefUtils.isValid(createGitReference("refs/pull/6/merge")));
        assertFalse(RefUtils.isValid(createGitReference("refs/pull/6/head")));
        assertTrue(RefUtils.isValid(createGitReference("refs/pull")));
        assertTrue(RefUtils.isValid(createGitReference("refs/heads/b1")));
        assertTrue(RefUtils.isValid(createGitReference("refs/tags/v1")));
    }

    /**
     * Verify {@link RefUtils#getName(GitReference)}
     */
    @Test
    public void testGetName() {
        assertNull(RefUtils.getName((GitReference) null));
        assertNull(RefUtils.getName(GitReference.builder().build()));
        assertEquals("", RefUtils.getName(createGitReference("")));
        assertEquals("unchanged",
            RefUtils.getName(createGitReference("unchanged")));
        assertEquals("branch",
            RefUtils.getName(createGitReference("refs/heads/branch")));
        assertEquals("tag",
            RefUtils.getName(createGitReference("refs/tags/tag")));
        assertEquals("notes",
            RefUtils.getName(createGitReference("refs/notes")));

    }

    /**
     * Verify {@link RefUtils#getPath(GitReference)}
     */
    @Test
    public void testGetPath() {
        assertNull(RefUtils.getPath(null));
        assertNull(RefUtils.getPath(GitReference.builder().build()));
        assertEquals("", RefUtils.getPath(createGitReference("")));
        assertEquals("unchanged",
            RefUtils.getPath(createGitReference("unchanged")));
        assertEquals("heads/branch",
            RefUtils.getPath(createGitReference("refs/heads/branch")));
        assertEquals("tags/tag",
            RefUtils.getPath(createGitReference("refs/tags/tag")));
        assertEquals("notes",
            RefUtils.getPath(createGitReference("refs/notes")));

    }

    private GitReference createGitReference(String ref){
        return GitReference.builder()
                .ref(ref)
                .build();
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/repo/RecentRepositoriesTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.repo;

import androidx.test.filters.SmallTest;
import com.github.pockethub.android.ui.repo.RecentRepositories;
import com.meisolsson.githubsdk.model.User;
import org.junit.Test;

import static androidx.test.InstrumentationRegistry.getTargetContext;
import static com.github.pockethub.android.ui.repo.RecentRepositories.MAX_SIZE;
import static junit.framework.Assert.assertFalse;
import static junit.framework.TestCase.assertTrue;

/**
 * Unit tests of {@link RecentRepositories}
 */
@SmallTest
public class RecentRepositoriesTest {

    /**
     * Verify bad input
     */
    @Test
    public void testBadInput() {
        User org = User.builder()
                .id(20L)
                .build();

        RecentRepositories recent = new RecentRepositories(getTargetContext(), org);
        assertFalse(recent.contains(null));
        assertFalse(recent.contains(-1));
    }

    /**
     * Verify eviction
     */
    @Test
    public void testMaxReached() {
        User org = User.builder()
                .id(20L)
                .build();

        RecentRepositories recent = new RecentRepositories(getTargetContext(), org);

        for (int i = 0; i < MAX_SIZE; i++) {
            recent.add(i);
            assertTrue(recent.contains(i));
        }

        recent.add(MAX_SIZE + 1);
        assertTrue(recent.contains(MAX_SIZE + 1));
        assertFalse(recent.contains(0));

        for (int i = 1; i < MAX_SIZE; i++) {
            assertTrue(recent.contains(i));
        }
    }

    /**
     * Verify input/output to disk of {@link RecentRepositories} state
     */
    @Test
    public void testIO() {
        User org = User.builder()
                .id(20L)
                .build();

        RecentRepositories recent1 = new RecentRepositories(getTargetContext(), org);
        long id = 1234;
        recent1.add(id);
        assertTrue(recent1.contains(id));
        recent1.save();
        RecentRepositories recent2 = new RecentRepositories(getTargetContext(), org);
        assertTrue(recent2.contains(id));
    }

    /**
     * Verify repositories are scoped to organization
     */
    @Test
    public void testScopedStorage() {
        User org1 = User.builder()
                .id(20L)
                .build();

        RecentRepositories recent1 = new RecentRepositories(getTargetContext(), org1);
        long id1 = 1234;
        recent1.add(id1);
        assertTrue(recent1.contains(id1));

        User org2 = User.builder()
                .id(40L)
                .build();

        RecentRepositories recent2 = new RecentRepositories(getTargetContext(), org2);
        assertFalse(recent2.contains(id1));
        long id2 = 2345;
        recent2.add(id2);
        assertTrue(recent2.contains(id2));

        recent2.save();
        recent1 = new RecentRepositories(getTargetContext(), org1);
        assertFalse(recent1.contains(id2));
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/repo/RepositoryEventMatcherTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.repo;

import androidx.test.filters.SmallTest;
import com.github.pockethub.android.core.repo.RepositoryEventMatcher;
import com.meisolsson.githubsdk.model.GitHubEvent;
import com.meisolsson.githubsdk.model.GitHubEventType;
import com.meisolsson.githubsdk.model.Repository;
import com.meisolsson.githubsdk.model.User;
import com.meisolsson.githubsdk.model.payload.ForkPayload;
import org.junit.Test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;

/**
 * Unit tests of {@link RepositoryEventMatcher}
 */
@SmallTest
public class RepositoryEventMatcherTest {

    /**
     * Test fork event that has an incomplete forkee in the payload
     */
    @Test
    public void testIncompleteRepositoryFork() {
        RepositoryEventMatcher matcher = new RepositoryEventMatcher();
        ForkPayload payload = ForkPayload.builder().build();

        GitHubEvent event = GitHubEvent.builder()
                .type(GitHubEventType.ForkEvent)
                .payload(payload)
                .build();

        assertNull(matcher.getRepository(event));

        Repository repository = Repository.builder().build();
        payload = payload.toBuilder().forkee(repository).build();
        event = event.toBuilder().payload(payload).build();
        assertNull(matcher.getRepository(event));

        repository = repository.toBuilder().name("repo").build();
        payload = payload.toBuilder().forkee(repository).build();
        event = event.toBuilder().payload(payload).build();
        assertNull(matcher.getRepository(event));

        User user = User.builder().build();
        repository = repository.toBuilder().owner(user).build();
        payload = payload.toBuilder().forkee(repository).build();
        event = event.toBuilder().payload(payload).build();
        assertNull(matcher.getRepository(event));

        user = user.toBuilder().login("owner").build();
        repository = repository.toBuilder().owner(user).build();
        payload = payload.toBuilder().forkee(repository).build();
        event = event.toBuilder().payload(payload).build();
        assertEquals(repository, matcher.getRepository(event));
    }

}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/repo/RepositoryUriMatcherTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.repo;

import android.net.Uri;
import com.github.pockethub.android.core.repo.RepositoryUriMatcher;
import com.meisolsson.githubsdk.model.Repository;
import org.junit.Test;

import static junit.framework.Assert.assertNotNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;

/**
 * Unit tests of {@link RepositoryUriMatcher}
 */
public class RepositoryUriMatcherTest {

    /**
     * Verity empty uri
     */
    @Test
    public void testEmptyUri() {
        assertNull(RepositoryUriMatcher.getRepository(Uri.parse("")));
    }

    /**
     * Verify URI with no owner
     */
    @Test
    public void testUriWithNoOnwer() {
        assertNull(RepositoryUriMatcher.getRepository(Uri
                .parse("http://github.com")));
        assertNull(RepositoryUriMatcher.getRepository(Uri
                .parse("http://github.com/")));
        assertNull(RepositoryUriMatcher.getRepository(Uri
                .parse("http://github.com//")));
    }

    /**
     * Verify URI with owner but no name
     */
    @Test
    public void testUriWithNoName() {
        assertNull(RepositoryUriMatcher.getRepository(Uri
                .parse("http://github.com/defunkt")));
        assertNull(RepositoryUriMatcher.getRepository(Uri
                .parse("http://github.com/defunkt/")));
    }

    /**
     * Verify URI with owner but no name
     */
    @Test
    public void testHttpUriWithOwnerAndName() {
        Repository repo = RepositoryUriMatcher.getRepository(Uri
                .parse("http://github.com/defunkt/resque"));
        assertNotNull(repo);
        assertEquals("resque", repo.name());
        assertNotNull(repo.owner());
        assertEquals("defunkt", repo.owner().login());
    }

    /**
     * Verify URI with owner but no name
     */
    @Test
    public void testHttpsUriWithOwnerAndName() {
        Repository repo = RepositoryUriMatcher.getRepository(Uri
                .parse("https://github.com/mojombo/jekyll"));
        assertNotNull(repo);
        assertEquals("jekyll", repo.name());
        assertNotNull(repo.owner());
        assertEquals("mojombo", repo.owner().login());
    }

    /**
     * Verify URI with white-listed owner
     */
    @Test
    public void testInvalidOwner() {
        assertNull(RepositoryUriMatcher.getRepository(Uri
                .parse("http://github.com/blog/page1")));
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/repo/SearchActivityTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.repo;

import android.content.Intent;
import androidx.test.rule.ActivityTestRule;
import com.github.pockethub.android.ui.search.SearchActivity;
import org.junit.Before;
import org.junit.Rule;

import static android.app.SearchManager.QUERY;
import static android.content.Intent.ACTION_SEARCH;

/**
 * Tests of {@link SearchActivity}
 */
public class SearchActivityTest {

    @Rule
    public ActivityTestRule<SearchActivity> activityTestRule =
            new ActivityTestRule<>(SearchActivity.class);

    @Before
    public void setUp() {
        Intent intent = new Intent(ACTION_SEARCH)
                .putExtra(QUERY, "navigation_drawer_header_background");

        activityTestRule.launchActivity(intent);
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/user/UserComparatorTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.user;

import android.accounts.Account;
import androidx.test.filters.SmallTest;
import com.github.pockethub.android.core.user.UserComparator;
import com.meisolsson.githubsdk.model.User;
import org.junit.Test;

import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertEquals;

/**
 * Unit tests of {@link UserComparator}
 */
@SmallTest
public class UserComparatorTest {

    /**
     * Test sorting of users that match login
     */
    @Test
    public void testLoginMatch() {
        Account account = new Account("m", "t");
        UserComparator comparator = new UserComparator(account);

        assertTrue(comparator.compare(createUser("m"),
                createUser("a")) < 0);
        assertTrue(comparator.compare(createUser("a"),
                createUser("m")) > 0);
        assertTrue(comparator.compare(createUser("m"),
                createUser("z")) < 0);
        assertTrue(comparator.compare(createUser("z"),
                createUser("m")) > 0);
        assertEquals(
                0,
                comparator.compare(createUser("m"),
                        createUser("m")));
    }

    /**
     * Test sorting of users that don't match login
     */
    @Test
    public void testNoLoginMatch() {
        Account account = new Account("m", "t");
        UserComparator comparator = new UserComparator(account);

        assertTrue(comparator.compare(createUser("a"),
                createUser("c")) < 0);
        assertTrue(comparator.compare(createUser("db"),
                createUser("da")) > 0);
    }

    private User createUser(String login){
        return User.builder()
                .login(login)
                .build();
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/user/UserUriMatcherTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.user;

import android.net.Uri;
import com.github.pockethub.android.core.user.UserUriMatcher;
import com.meisolsson.githubsdk.model.User;
import org.junit.Test;

import static junit.framework.Assert.assertNotNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;

/**
 * Unit tests of {@link UserUriMatcher}
 */
public class UserUriMatcherTest {

    /**
     * Verify empty URI
     */
    @Test
    public void testEmptyUri() {
        assertNull(UserUriMatcher.getUser(Uri.parse("")));
    }

    /**
     * Verify no name
     */
    @Test
    public void testUriWithNoName() {
        assertNull(UserUriMatcher.getUser(Uri.parse("http://github.com")));
        assertNull(UserUriMatcher.getUser(Uri.parse("https://github.com")));
        assertNull(UserUriMatcher.getUser(Uri.parse("http://github.com/")));
        assertNull(UserUriMatcher.getUser(Uri.parse("http://github.com//")));
    }

    /**
     * Verify URI with name
     */
    @Test
    public void testHttpUriWithName() {
        User user = UserUriMatcher.getUser(Uri
                .parse("http://github.com/defunkt"));
        assertNotNull(user);
        assertEquals("defunkt", user.login());
    }

    /**
     * Verify URI with name
     */
    @Test
    public void testHttpsUriWithName() {
        User user = UserUriMatcher.getUser(Uri
                .parse("https://github.com/mojombo"));
        assertNotNull(user);
        assertEquals("mojombo", user.login());
    }

    /**
     * Verify URI with name
     */
    @Test
    public void testUriWithTrailingSlash() {
        User user = UserUriMatcher.getUser(Uri
                .parse("http://github.com/defunkt/"));
        assertNotNull(user);
        assertEquals("defunkt", user.login());
    }

    /**
     * Verify URI with name
     */
    @Test
    public void testUriWithTrailingSlashes() {
        User user = UserUriMatcher.getUser(Uri
                .parse("http://github.com/defunkt//"));
        assertNotNull(user);
        assertEquals("defunkt", user.login());
    }
}


================================================
FILE: app/src/androidTest/java/com/github/pockethub/android/tests/util/HtmlUtilsTest.java
================================================
/*
 * Copyright (c) 2015 PocketHub
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pockethub.android.tests.util;

import com.github.pockethub.android.util.HtmlUtils;
import org.junit.Test;

import static junit.framework.Assert.assertNotNull;
import static org.junit.Assert.assertEquals;

/**
 * Unit tests of HTML conversions done when rendering markdown
 */
public class HtmlUtilsTest {

    private String format(String html) {
        CharSequence formatted = HtmlUtils.format(html);
        assertNotNull(formatted);
        return formatted.toString().replace("<githubroot>", "")
                .replace("</githubroot>", "");
    }

    /**
     * Single email toggle span is removed
     */
    @Test
    public void testToggleRemoved() {
        String html = "before <span class=\"email-hidden-toggle\"><a href=\"#\">…</a></span>after";
        assertEquals("before after", format(html));
    }

    /**
     * Multiple email toggle spans are removed
     */
    @Test
    public void testTogglesRemoved() {
        String html = "before <span class=\"email-hidden-toggle\"><a href=\"#\">…</a></span>after<span class=\"email-hidden-toggle\"><a href=\"#\">…</a></span>";
        assertEquals("before after", format(html));
    }

    /**
     * Email div is transformed into block quote
     */
    @Test
    public void testEmailQuoted() {
        String html = "before <div class=\"email-quoted-reply\">quoted</div> after";
        assertEquals("before <blockquote>quoted</blockquote> after",
                format(html));
    }

    /**
     * Email fragment div is removed and newlines are replaced with br tags
     */
    @Test
    public void testEmailFragment() {
        String html = "before <div class=\"email-fragment\">in\nside</div> after";
        assertEquals("before in<br>side after", format(html));
    }

    /**
     * Email fragment div is removed and newlines are replaced with br tags
     */
    @Test
    public void testEmailFragments() {
        String html = "before <div class=\"email-fragment\">in\nside</div> after <div class=\"email-fragment\">out\nside</div>";
        assertEquals("before in<br>side after out<br>side", format(html));
    }

    /**
     * Email fragment div is removed and newlines are replaced with br tags
     */
    @Test
    public void testTrailingEmailFragment() {
        String html = "before <div class=\"email-fragment\">in\nside</div>";
        assertEquals("before in<br>side", format(html));
    }

    /**
     * Leading break is removed
     */
    @Test
    public void testLeadingBreak() {
        String html = "<br>content";
        assertEquals("content", format(html));
    }

    /**
     * Trailing break is removed
     */
    @Test
    public void testTrailingBreak() {
        String html = "content<br>";
        assertEquals("content", format(html));
    }

    /**
     * Leading & trailing breaks are removed
     */
    @Test
    public void testWrappedBreaks() {
        String html = "<br>content<br>";
        assertEquals("content", format(html));
    }

    /**
     * Leading & trailing breaks are removed
     */
    @Test
    public void testWrappedParagraphs() {
        String html = "<p>content</p>";
        assertEquals("content", format(html));
    }

    /**
     * Paragraph replaced with break
     */
    @Test
    public void testParagraphReplacedWithBreak() {
        String html = "line1<p>line2</p>";
        assertEquals("line1<br>line2", format(html));
    }

    /**
     * em tags replaced with i tags
     */
    @Test
    public void testEmReplacedWithI() {
        String html = "a<em>b</em>c";
        assertEquals(html, format(html));
    }

    /**
     * strong tags replaced with b tags
     */
    @Test
    public void testStrongReplacedWithB() {
        String html = "<strong>a</strong>";
        assertEquals(html, format(html));
    }

    /**
     * Leading whitespace is removed
     */
    @Test
    public void testLeadingWhitespace() {
        String html = " content";
        assertEquals("content", format(html));
    }

    /**
     * Trailing whitespace is removed
     */
    @Test
    public void testTrailingWhitespace() {
        String html = "content ";
        assertEquals("content", format(html));
    }

    /**
     * Leading & trailing whitespace is removed
     */
    @Test
    public void testWrappedWhitetspace() {
        String html = " content ";
        assertEquals("content", format(html));
    }

    /**
     * Pre untouched
     */
    @Test
    public void testPreWithNoWhitespace() {
        String html = "a<pre>b</pre> c";
        assertEquals("a<pre>b</pre> c", format(html));
    }

    /**
     * Pre space escaped
     */
    @Test
    public void testPreWithSpaces() {
        String html = "a<pre> b</pre> c";
        assertEquals("a<pre>&nbsp;b</pre> c", format(html));
    }

    /**
     * Pre tab escaped
     */
    @Test
    public void testPreWithTabs() {
        String html = "a<pre>\tb</pre> c";
        assertEquals("a<pre>&nbsp;&nbsp;&nbsp;&nbsp;b</pre> c", format(html));
    }

    /**
     * Pre newline escaped
     */
    @Test
    public void testPreWithNewline() {
        String html = "a<pre>\nb</pre> c";
        assertEquals("a<pre><br>b</pre> c", format(html));
    }

    /**
     * Pre space, tab, and newline escaped
     */
    @Test
    public void testPreWithAllWhitepsace() {
        String html = "a<pre>\nb\tc </pre>d";
        assertEquals("a<pre><br>b&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</pre>d",
                format(html));
    }

    /**
     * Multiple pre elements escaped
     */
    @Test
    public void testMultiplePresEscaped() {
        String html = "a<pre> c </pre>d<pre>\te\t</pre>";
        assertEquals(
                "a<pre>&nbsp;c&nbsp;</pre>d<pre>&nbsp;&nbsp;&nbsp;&nbsp;e&nbsp;&nbsp;&nbsp;&nbsp;</pre>",
                format(html));
    }

    /**
     * Single code element inside a pre element
     */
    @Test
    public void testFormatPreCodeOnly() {
        String html = "<pre><code>a\nb\nc\n</code></pre>";
        assertEquals("<pre><code>a<br>b<br>c</code></pre>", format(html));
    }
}


================================================
FILE: app/src/debug/res/values/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name" translatable="false">PocketHub Debug</string>
</resources>

================================================
FILE: app/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.github.pockethub.android">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
    <uses-permission android:name="android.permission.READ_SYNC_STATS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <supports-screens
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true"
        android:xlargeScreens="true" />

    <application
        android:allowBackup="true"
        android:hardwareAccelerated="false"
        android:icon="@drawable/app_icon"
        android:supportsRtl="true"
        android:label="@string/app_name"
        android:theme="@style/Theme.PocketHub"
        android:name=".PocketHub"
        android:usesCleartextTraffic="true">

        <activity
            android:name=".ui.MainActivity"
            android:theme="@style/Theme.PocketHub.NavigationDrawer"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:hardwareAccelerated="true">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <meta-data
                android:name="android.app.default_searchable"
                android:value="com.github.pockethub.android.ui.search.SearchActivity" />
        </activity>
        <activity
            android:name=".ui.gist.CreateGistActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/create_gist"
            android:parentActivityName=".ui.MainActivity"
            tools:ignore="UnusedAttribute">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.github.pockethub.android.ui.MainActivity" />
            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/*" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.notification.NotificationActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:parentActivityName=".ui.MainActivity"
            android:hardwareAccelerated="true"
            tools:ignore="UnusedAttribute">

            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.github.pockethub.android.ui.MainActivity" />
        </activity>
        <activity
            android:name=".ui.issue.IssueBrowseActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:hardwareAccelerated="true">
            <intent-filter>
                <action android:name="${applicationId}.repo.issues.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

            <meta-data
                android:name="android.app.default_searchable"
                android:value="com.github.pockethub.android.ui.issue.IssueSearchActivity" />
        </activity>
        <activity
            android:name=".ui.issue.EditIssuesFilterActivity"
            android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="${applicationId}.repo.issues.filter.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.issue.EditIssueActivity"
            android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="${applicationId}.repo.issues.edit.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.search.SearchActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:hardwareAccelerated="true"
            android:label="@string/search_title"
            android:launchMode="singleTop">
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>

            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable_repos_users" />
        </activity>
        <activity
            android:name=".ui.issue.FiltersViewActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:hardwareAccelerated="true">
            <intent-filter>
                <action android:name="${applicationId}.repo.issues.filters.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.gist.GistsViewActivity"
            android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="${applicationId}.gists.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.gist.GistFilesViewActivity"
            android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="${applicationId}.gist.files.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.issue.CreateCommentActivity"
            android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="${applicationId}.issue.comment.create.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.issue.EditCommentActivity"
            android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="${applicationId}.issue.comment.edit.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.gist.CreateCommentActivity"
            android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="${applicationId}.gist.comment.create.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.gist.EditCommentActivity"
            android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="${applicationId}.gist.comment.edit.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.commit.CreateCommentActivity"
            android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="${applicationId}.commit.comment.create.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.repo.RepositoryViewActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:hardwareAccelerated="true">
            <intent-filter>
                <action android:name="${applicationId}.repo.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

            <meta-data
                android:name="android.app.default_searchable"
                android:value="com.github.pockethub.android.ui.issue.IssueSearchActivity" />
        </activity>
        <activity
            android:name=".ui.repo.RepositoryContributorsActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:hardwareAccelerated="true">
            <intent-filter>
                <action android:name="${applicationId}.repo.contributors.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.user.UserViewActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:hardwareAccelerated="true">
            <intent-filter>
                <action android:name="${applicationId}.user.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.issue.IssuesViewActivity"
            android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="${applicationId}.issues.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

        <service
            android:name=".accounts.AccountAuthenticatorService"
            android:exported="false"
            android:process=":auth">
            <intent-filter>
                <action android:name="android.accounts.AccountAuthenticator" />
            </intent-filter>

            <meta-data
                android:name="android.accounts.AccountAuthenticator"
                android:resource="@xml/authenticator" />
        </service>

        <activity
            android:name=".accounts.LoginActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:launchMode="singleTop">

            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <data android:scheme="@string/github_oauth_scheme" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>

        </activity>

        <activity
            android:name=".ui.user.UriLauncherActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:excludeFromRecents="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />

                <data
                    android:host="github.com"
                    android:scheme="http" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />

                <data
                    android:host="github.com"
                    android:scheme="https" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />

                <data
                    android:host="gist.github.com"
                    android:scheme="http" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />

                <data
                    android:host="gist.github.com"
                    android:scheme="https" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.issue.IssueSearchActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:hardwareAccelerated="true"
            android:label="@string/search_title"
            android:launchMode="singleTop">
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>

            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable_issues" />
        </activity>
        <activity
            android:name=".ui.commit.CommitCompareViewActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/commit_compare_title">
            <intent-filter>
                <action android:name="${applicationId}.commits.compare.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.commit.CommitViewActivity"
            android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="${applicationId}.commits.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.commit.CommitFileViewActivity"
            android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="${applicationId}.commit.file.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.ref.BranchFileViewActivity"
            android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="${applicationId}.branch.file.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

        <activity android:name=".accounts.LoginWebViewActivity"
            android:launchMode="singleTop"
            android:configChanges="orientation|keyboardHidden|screenSize" />

        <service
            android:name=".sync.SyncAdapterService"
            android:exported="false"
            android:process=":repos">
            <intent-filter>
                <action android:name="android.content.SyncAdapter" />
            </intent-filter>

            <meta-data
                android:name="android.content.SyncAdapter"
                android:resource="@xml/sync_adapter" />
        </service>

        <provider
            android:name=".sync.ContentProviderAdapter"
            android:authorities="@string/provider_authority_sync"
            android:exported="false"
            android:label="@string/app_name"
            android:syncable="true" />
        <provider
            android:name=".ui.search.RepositorySearchSuggestionsProvider"
            android:authorities="@string/provider_authority_search_suggest_repos"
            android:exported="false" />
        <provider
            android:name=".ui.issue.IssueSearchSuggestionsProvider"
            android:authorities="@string/provider_authority_search_suggest_issues"
            android:exported="false" />

        <meta-data
            android:name="com.alorma.github.sdk.client"
            android:value="@string/github_client"/>

        <meta-data
            android:name="com.alorma.github.sdk.secret"
            android:value="@string/github_secret"/>

        <meta-data
            android:name="com.alorma.github.sdk.oauth"
            android:value="@string/github_oauth"/>

        <meta-data
            android:name="com.bugsnag.android.API_KEY"
            android:value="@string/bugsnag_api_key"/>
    </application>

</manifest>


================================================
FILE: app/src/main/assets/code_mirror/LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2016 Marijn Haverbeke <marijnh@gmail.com> and others
Copyright (c) 2016 Michael Zhou <zhoumotongxue008@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: app/src/main/assets/code_mirror/VERSION
================================================
5.19.0-minified

================================================
FILE: app/src/main/assets/code_mirror/addon/comment/comment.js
================================================
'use strict';(function(h){"object"==typeof exports&&"object"==typeof module?h(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],h):h(CodeMirror)})(function(h){function w(a){a=a.search(q);return-1==a?0:a}function D(a,d,b){return/\bstring\b/.test(a.getTokenTypeAt(k(d.line,0)))&&!/^[\'\"`]/.test(b)}var A={},q=/[^\s\u00a0]/,k=h.Pos;h.commands.toggleComment=function(a){a.toggleComment()};h.defineExtension("toggleComment",function(a){a||(a=A);for(var d=
Infinity,b=this.listSelections(),c=null,e=b.length-1;0<=e;e--){var f=b[e].from(),g=b[e].to();f.line>=d||(g.line>=d&&(g=k(d,0)),d=f.line,null==c?this.uncomment(f,g,a)?c="un":(this.lineComment(f,g,a),c="line"):"un"==c?this.uncomment(f,g,a):this.lineComment(f,g,a))}});h.defineExtension("lineComment",function(a,d,b){b||(b=A);var c=this,e=c.getModeAt(a),f=c.getLine(a.line);if(null!=f&&!D(c,a,f)){var g=b.lineComment||e.lineComment;if(g){var m=Math.min(0!=d.ch||d.line==a.line?d.line+1:d.line,c.lastLine()+
1),h=null==b.padding?" ":b.padding,l=b.commentBlankLines||a.line==d.line;c.operation(function(){if(b.indent){for(var d=null,f=a.line;f<m;++f){var e=c.getLine(f),e=e.slice(0,w(e));if(null==d||d.length>e.length)d=e}for(f=a.line;f<m;++f){var e=c.getLine(f),n=d.length;if(l||q.test(e))e.slice(0,n)!=d&&(n=w(e)),c.replaceRange(d+g+h,k(f,0),k(f,n))}}else for(f=a.line;f<m;++f)(l||q.test(c.getLine(f)))&&c.replaceRange(g+h,k(f,0))})}else if(b.blockCommentStart||e.blockCommentStart)b.fullLines=!0,c.blockComment(a,
d,b)}});h.defineExtension("blockComment",function(a,d,b){b||(b=A);var c=this,e=c.getModeAt(a),f=b.blockCommentStart||e.blockCommentStart,g=b.blockCommentEnd||e.blockCommentEnd;if(!f||!g)(b.lineComment||e.lineComment)&&0!=b.fullLines&&c.lineComment(a,d,b);else if(!/\bcomment\b/.test(c.getTokenTypeAt(k(a.line,0)))){var m=Math.min(d.line,c.lastLine());m!=a.line&&0==d.ch&&q.test(c.getLine(m))&&--m;var h=null==b.padding?" ":b.padding;a.line>m||c.operation(function(){if(0!=b.fullLines){var l=q.test(c.getLine(m));
c.replaceRange(h+g,k(m));c.replaceRange(f+h,k(a.line,0));var x=b.blockCommentLead||e.blockCommentLead;if(null!=x)for(var p=a.line+1;p<=m;++p)(p!=m||l)&&c.replaceRange(x+h,k(p,0))}else c.replaceRange(g,d),c.replaceRange(f,a)})}});h.defineExtension("uncomment",function(a,d,b){b||(b=A);var c=this,e=c.getModeAt(a),f=Math.min(0!=d.ch||d.line==a.line?d.line:d.line-1,c.lastLine()),g=Math.min(a.line,f),h=b.lineComment||e.lineComment,w=[],l=null==b.padding?" ":b.padding,x;a:if(h){for(var p=g;p<=f;++p){var B=
c.getLine(p),n=B.indexOf(h);-1<n&&!/comment/.test(c.getTokenTypeAt(k(p,n+1)))&&(n=-1);if(-1==n&&q.test(B))break a;if(-1<n&&q.test(B.slice(0,n)))break a;w.push(B)}c.operation(function(){for(var a=g;a<=f;++a){var b=w[a-g],d=b.indexOf(h),e=d+h.length;0>d||(b.slice(e,e+l.length)==l&&(e+=l.length),x=!0,c.replaceRange("",k(a,d),k(a,e)))}});if(x)return!0}var t=b.blockCommentStart||e.blockCommentStart,u=b.blockCommentEnd||e.blockCommentEnd;if(!t||!u)return!1;var C=b.blockCommentLead||e.blockCommentLead,y=
c.getLine(g),z=y.indexOf(t);if(-1==z)return!1;var v=f==g?y:c.getLine(f),r=v.indexOf(u,f==g?z+t.length:0);-1==r&&g!=f&&(v=c.getLine(--f),r=v.indexOf(u));if(-1==r||!/comment/.test(c.getTokenTypeAt(k(g,z+1)))||!/comment/.test(c.getTokenTypeAt(k(f,r+1))))return!1;e=y.lastIndexOf(t,a.ch);b=-1==e?-1:y.slice(0,a.ch).indexOf(u,e+t.length);if(-1!=e&&-1!=b&&b+u.length!=a.ch)return!1;b=v.indexOf(u,d.ch);a=v.slice(d.ch).lastIndexOf(t,b-d.ch);e=-1==b||-1==a?-1:d.ch+a;if(-1!=b&&-1!=e&&e!=d.ch)return!1;c.operation(function(){c.replaceRange("",
k(f,r-(l&&v.slice(r-l.length,r)==l?l.length:0)),k(f,r+u.length));var a=z+t.length;l&&y.slice(a,a+l.length)==l&&(a+=l.length);c.replaceRange("",k(g,z),k(g,a));if(C)for(a=g+1;a<=f;++a){var b=c.getLine(a),d=b.indexOf(C);if(-1!=d&&!q.test(b.slice(0,d))){var e=d+C.length;l&&b.slice(e,e+l.length)==l&&(e+=l.length);c.replaceRange("",k(a,d),k(a,e))}}});return!0})});


================================================
FILE: app/src/main/assets/code_mirror/addon/comment/continuecomment.js
================================================
'use strict';(function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){function q(b){if(b.getOption("disableInput"))return e.Pass;for(var d=b.listSelections(),a,l=[],m=0;m<d.length;m++){var f=d[m].head,g=b.getTokenAt(f);if("comment"!=g.type)return e.Pass;var c=e.innerMode(b.getMode(),g.state).mode;if(!a)a=c;else if(a!=c)return e.Pass;c=null;if(a.blockCommentStart&&
a.blockCommentContinue){var k=g.string.indexOf(a.blockCommentEnd),n=b.getRange(e.Pos(f.line,0),e.Pos(f.line,g.end)),h;if(!(-1!=k&&k==g.string.length-a.blockCommentEnd.length&&f.ch>=k))if(0==g.string.indexOf(a.blockCommentStart)){if(c=n.slice(0,g.start),!/^\s*$/.test(c))for(c="",k=0;k<g.start;++k)c+=" "}else-1!=(h=n.indexOf(a.blockCommentContinue))&&h+a.blockCommentContinue.length>g.start&&/^\s*$/.test(n.slice(0,h))&&(c=n.slice(0,h));null!=c&&(c+=a.blockCommentContinue)}null==c&&a.lineComment&&r(b)&&
(f=b.getLine(f.line),h=f.indexOf(a.lineComment),-1<h&&(c=f.slice(0,h),c=/\S/.test(c)?null:c+(a.lineComment+f.slice(h+a.lineComment.length).match(/^\s*/)[0])));if(null==c)return e.Pass;l[m]="\n"+c}b.operation(function(){for(var a=d.length-1;0<=a;a--)b.replaceRange(l[a],d[a].from(),d[a].to(),"+insert")})}function r(b){return(b=b.getOption("continueComments"))&&"object"==typeof b?!1!==b.continueLineComment:!0}for(var p=["clike","css","javascript"],l=0;l<p.length;++l)e.extendMode(p[l],{blockCommentContinue:" * "});
e.defineOption("continueComments",null,function(b,d,a){a&&a!=e.Init&&b.removeKeyMap("continueComment");d&&(a="Enter","string"==typeof d?a=d:"object"==typeof d&&d.key&&(a=d.key),d={name:"continueComment"},d[a]=q,b.addKeyMap(d))})});


================================================
FILE: app/src/main/assets/code_mirror/addon/dialog/dialog.css
================================================
.CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.CodeMirror-dialog input{border:none;outline:0;background:0 0;width:20em;color:inherit;font-family:monospace}.CodeMirror-dialog button{font-size:70%}

================================================
FILE: app/src/main/assets/code_mirror/addon/dialog/dialog.js
================================================
'use strict';(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],c):c(CodeMirror)})(function(c){function l(a,c,b){a=a.getWrapperElement().appendChild(document.createElement("div"));a.className=b?"CodeMirror-dialog CodeMirror-dialog-bottom":"CodeMirror-dialog CodeMirror-dialog-top";"string"==typeof c?a.innerHTML=c:a.appendChild(c);return a}function m(a,c){a.state.currentNotificationClose&&
a.state.currentNotificationClose();a.state.currentNotificationClose=c}c.defineExtension("openDialog",function(a,g,b){function e(a){if("string"==typeof a)d.value=a;else if(!h&&(h=!0,f.parentNode.removeChild(f),k.focus(),b.onClose))b.onClose(f)}b||(b={});m(this,null);var f=l(this,a,b.bottom),h=!1,k=this,d=f.getElementsByTagName("input")[0];if(d){d.focus();b.value&&(d.value=b.value,!1!==b.selectValueOnOpen&&d.select());if(b.onInput)c.on(d,"input",function(a){b.onInput(a,d.value,e)});if(b.onKeyUp)c.on(d,
"keyup",function(a){b.onKeyUp(a,d.value,e)});c.on(d,"keydown",function(a){if(!(b&&b.onKeyDown&&b.onKeyDown(a,d.value,e))){if(27==a.keyCode||!1!==b.closeOnEnter&&13==a.keyCode)d.blur(),c.e_stop(a),e();13==a.keyCode&&g(d.value,a)}});if(!1!==b.closeOnBlur)c.on(d,"blur",e)}else if(a=f.getElementsByTagName("button")[0]){c.on(a,"click",function(){e();k.focus()});if(!1!==b.closeOnBlur)c.on(a,"blur",e);a.focus()}return e});c.defineExtension("openConfirm",function(a,g,b){function e(){h||(h=!0,f.parentNode.removeChild(f),
k.focus())}m(this,null);var f=l(this,a,b&&b.bottom);a=f.getElementsByTagName("button");var h=!1,k=this,d=1;a[0].focus();for(b=0;b<a.length;++b){var n=a[b];(function(a){c.on(n,"click",function(b){c.e_preventDefault(b);e();a&&a(k)})})(g[b]);c.on(n,"blur",function(){--d;setTimeout(function(){0>=d&&e()},200)});c.on(n,"focus",function(){++d})}});c.defineExtension("openNotification",function(a,g){function b(){f||(f=!0,clearTimeout(h),e.parentNode.removeChild(e))}m(this,b);var e=l(this,a,g&&g.bottom),f=
!1,h;a=g&&"undefined"!==typeof g.duration?g.duration:5E3;c.on(e,"click",function(a){c.e_preventDefault(a);b()});a&&(h=setTimeout(b,a));return b})});


================================================
FILE: app/src/main/assets/code_mirror/addon/display/autorefresh.js
================================================
'use strict';(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],c):c(CodeMirror)})(function(c){function f(b,a){function d(){b.display.wrapper.offsetHeight?(e(b,a),b.display.lastWrapHeight!=b.display.wrapper.clientHeight&&b.refresh()):a.timeout=setTimeout(d,a.delay)}a.timeout=setTimeout(d,a.delay);a.hurry=function(){clearTimeout(a.timeout);a.timeout=setTimeout(d,50)};c.on(window,"mouseup",
a.hurry);c.on(window,"keyup",a.hurry)}function e(b,a){clearTimeout(a.timeout);c.off(window,"mouseup",a.hurry);c.off(window,"keyup",a.hurry)}c.defineOption("autoRefresh",!1,function(b,a){b.state.autoRefresh&&(e(b,b.state.autoRefresh),b.state.autoRefresh=null);a&&0==b.display.wrapper.offsetHeight&&f(b,b.state.autoRefresh={delay:a.delay||250})})});


================================================
FILE: app/src/main/assets/code_mirror/addon/display/fullscreen.css
================================================
.CodeMirror-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;height:auto;z-index:9}

================================================
FILE: app/src/main/assets/code_mirror/addon/display/fullscreen.js
================================================
'use strict';(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],c):c(CodeMirror)})(function(c){c.defineOption("fullScreen",!1,function(d,a,b){b==c.Init&&(b=!1);!b!=!a&&(a?(a=d.getWrapperElement(),d.state.fullScreenRestore={scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset,width:a.style.width,height:a.style.height},a.style.width="",a.style.height="auto",a.className+=" CodeMirror-fullscreen",
document.documentElement.style.overflow="hidden"):(a=d.getWrapperElement(),a.className=a.className.replace(/\s*CodeMirror-fullscreen\b/,""),document.documentElement.style.overflow="",b=d.state.fullScreenRestore,a.style.width=b.width,a.style.height=b.height,window.scrollTo(b.scrollLeft,b.scrollTop)),d.refresh())})});


================================================
FILE: app/src/main/assets/code_mirror/addon/display/panel.js
================================================
'use strict';(function(g){"object"==typeof exports&&"object"==typeof module?g(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],g):g(CodeMirror)})(function(g){function f(a,b,c,d){this.cm=a;this.node=b;this.options=c;this.height=d;this.cleared=!1}function h(a){var b=a.getWrapperElement(),c=window.getComputedStyle?window.getComputedStyle(b):b.currentStyle,d=parseInt(c.height),e=a.state.panels={setHeight:b.style.height,heightLeft:d,panels:0,wrapper:document.createElement("div")};
b.parentNode.insertBefore(e.wrapper,b);c=a.hasFocus();e.wrapper.appendChild(b);c&&a.focus();a._setSize=a.setSize;null!=d&&(a.setSize=function(b,c){if(null==c)return this._setSize(b,c);e.setHeight=c;if("number"!=typeof c){var f=/^(\d+\.?\d*)px$/.exec(c);f?c=Number(f[1]):(e.wrapper.style.height=c,c=e.wrapper.offsetHeight,e.wrapper.style.height="")}a._setSize(b,e.heightLeft+=c-d);d=c})}g.defineExtension("addPanel",function(a,b){b=b||{};this.state.panels||h(this);var c=this.state.panels,d=c.wrapper,e=
this.getWrapperElement();b.after instanceof f&&!b.after.cleared?d.insertBefore(a,b.before.node.nextSibling):b.before instanceof f&&!b.before.cleared?d.insertBefore(a,b.before.node):b.replace instanceof f&&!b.replace.cleared?(d.insertBefore(a,b.replace.node),b.replace.clear()):"bottom"==b.position?d.appendChild(a):"before-bottom"==b.position?d.insertBefore(a,e.nextSibling):"after-top"==b.position?d.insertBefore(a,e):d.insertBefore(a,d.firstChild);d=b&&b.height||a.offsetHeight;this._setSize(null,c.heightLeft-=
d);c.panels++;return new f(this,a,b,d)});f.prototype.clear=function(){if(!this.cleared){this.cleared=!0;var a=this.cm.state.panels;this.cm._setSize(null,a.heightLeft+=this.height);a.wrapper.removeChild(this.node);if(0==--a.panels){var a=this.cm,b=a.state.panels;a.state.panels=null;var c=a.getWrapperElement();b.wrapper.parentNode.replaceChild(c,b.wrapper);c.style.height=b.setHeight;a.setSize=a._setSize;a.setSize()}}};f.prototype.changed=function(a){a=null==a?this.node.offsetHeight:a;this.cm._setSize(null,
this.cm.state.panels.height+=a-this.height);this.height=a}});


================================================
FILE: app/src/main/assets/code_mirror/addon/display/placeholder.js
================================================
'use strict';(function(d){"object"==typeof exports&&"object"==typeof module?d(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],d):d(CodeMirror)})(function(d){function f(a){a.state.placeholder&&(a.state.placeholder.parentNode.removeChild(a.state.placeholder),a.state.placeholder=null)}function h(a){f(a);var c=a.state.placeholder=document.createElement("pre");c.style.cssText="height: 0; overflow: visible";c.className="CodeMirror-placeholder";var b=
a.getOption("placeholder");"string"==typeof b&&(b=document.createTextNode(b));c.appendChild(b);a.display.lineSpace.insertBefore(c,a.display.lineSpace.firstChild)}function g(a){k(a)&&h(a)}function e(a){var c=a.getWrapperElement(),b=k(a);c.className=c.className.replace(" CodeMirror-empty","")+(b?" CodeMirror-empty":"");b?h(a):f(a)}function k(a){return 1===a.lineCount()&&""===a.getLine(0)}d.defineOption("placeholder","",function(a,c,b){b=b&&b!=d.Init;c&&!b?(a.on("blur",g),a.on("change",e),a.on("swapDoc",
e),e(a)):!c&&b&&(a.off("blur",g),a.off("change",e),a.off("swapDoc",e),f(a),b=a.getWrapperElement(),b.className=b.className.replace(" CodeMirror-empty",""));c&&!a.hasFocus()&&g(a)})});


================================================
FILE: app/src/main/assets/code_mirror/addon/display/rulers.js
================================================
'use strict';(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],c):c(CodeMirror)})(function(c){function e(a){a.state.rulerDiv.textContent="";var h=a.getOption("rulers"),e=a.defaultCharWidth(),k=a.charCoords(c.Pos(a.firstLine(),0),"div").left;a.state.rulerDiv.style.minHeight=a.display.scroller.offsetHeight+30+"px";for(var f=0;f<h.length;f++){var d=document.createElement("div");d.className=
"CodeMirror-ruler";var g,b=h[f];"number"==typeof b?g=b:(g=b.column,b.className&&(d.className+=" "+b.className),b.color&&(d.style.borderColor=b.color),b.lineStyle&&(d.style.borderLeftStyle=b.lineStyle),b.width&&(d.style.borderLeftWidth=b.width));d.style.left=k+g*e+"px";a.state.rulerDiv.appendChild(d)}}c.defineOption("rulers",!1,function(a,c){a.state.rulerDiv&&(a.display.lineSpace.removeChild(a.state.rulerDiv),a.state.rulerDiv=null,a.off("refresh",e));c&&c.length&&(a.state.rulerDiv=a.display.lineSpace.insertBefore(document.createElement("div"),
a.display.cursorDiv),a.state.rulerDiv.className="CodeMirror-rulers",e(a),a.on("refresh",e))})});


================================================
FILE: app/src/main/assets/code_mirror/addon/edit/closebrackets.js
================================================
'use strict';(function(f){"object"==typeof exports&&"object"==typeof module?f(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],f):f(CodeMirror)})(function(f){function r(b,a){return"pairs"==a&&"string"==typeof b?b:"object"==typeof b&&null!=b[a]?b[a]:w[a]}function z(b){return function(a){return A(a,b)}}function u(b){var a=b.state.closeBrackets;return a?b.getModeAt(b.getCursor()).closeBrackets||a:null}function A(b,a){var c=u(b);if(!c||b.getOption("disableInput"))return f.Pass;
var e=r(c,"pairs"),d=e.indexOf(a);if(-1==d)return f.Pass;for(var c=r(c,"triples"),v=e.charAt(d+1)==a,x=b.listSelections(),m=0==d%2,l,p=0;p<x.length;p++){var h=x[p],g=h.head,t=b.getRange(g,k(g.line,g.ch+1));if(m&&!h.empty())h="surround";else if(!v&&m||t!=a)if(v&&1<g.ch&&0<=c.indexOf(a)&&b.getRange(k(g.line,g.ch-2),g)==a+a&&(2>=g.ch||b.getRange(k(g.line,g.ch-3),k(g.line,g.ch-2))!=a))h="addFour";else if(v)if(!f.isWordChar(t)&&B(b,g,a))h="both";else return f.Pass;else if(m&&(b.getLine(g.line).length==
g.ch||C(t,e)||/\s/.test(t)))h="both";else return f.Pass;else h=0<=c.indexOf(a)&&b.getRange(g,k(g.line,g.ch+3))==a+a+a?"skipThree":"skip";if(!l)l=h;else if(l!=h)return f.Pass}var n=d%2?e.charAt(d-1):a,q=d%2?a:e.charAt(d+1);b.operation(function(){if("skip"==l)b.execCommand("goCharRight");else if("skipThree"==l)for(var a=0;3>a;a++)b.execCommand("goCharRight");else if("surround"==l){for(var c=b.getSelections(),a=0;a<c.length;a++)c[a]=n+c[a]+q;b.replaceSelections(c,"around");c=b.listSelections().slice();
for(a=0;a<c.length;a++){var e=c,g=a,d;d=c[a];var h=0<f.cmpPos(d.anchor,d.head);d={anchor:new k(d.anchor.line,d.anchor.ch+(h?-1:1)),head:new k(d.head.line,d.head.ch+(h?1:-1))};e[g]=d}b.setSelections(c)}else"both"==l?(b.replaceSelection(n+q,null),b.triggerElectric(n+q),b.execCommand("goCharLeft")):"addFour"==l&&(b.replaceSelection(n+n+n+n,"before"),b.execCommand("goCharRight"))})}function C(b,a){b=a.lastIndexOf(b);return-1<b&&1==b%2}function y(b,a){b=b.getRange(k(a.line,a.ch-1),k(a.line,a.ch+1));return 2==
b.length?b:null}function B(b,a,c){var e=b.getLine(a.line),d=b.getTokenAt(a);if(/\bstring2?\b/.test(d.type))return!1;c=new f.StringStream(e.slice(0,a.ch)+c+e.slice(a.ch),4);for(c.pos=c.start=d.start;;){e=b.getMode().token(c,d.state);if(c.pos>=a.ch+1)return/\bstring2?\b/.test(e);c.start=c.pos}}var w={pairs:"()[]{}''\"\"",triples:"",explode:"[]{}"},k=f.Pos;f.defineOption("autoCloseBrackets",!1,function(b,a,c){c&&c!=f.Init&&(b.removeKeyMap(p),b.state.closeBrackets=null);a&&(b.state.closeBrackets=a,b.addKeyMap(p))});
for(var q=w.pairs+"`",p={Backspace:function(b){var a=u(b);if(!a||b.getOption("disableInput"))return f.Pass;for(var c=r(a,"pairs"),a=b.listSelections(),e=0;e<a.length;e++){if(!a[e].empty())return f.Pass;var d=y(b,a[e].head);if(!d||0!=c.indexOf(d)%2)return f.Pass}for(e=a.length-1;0<=e;e--)c=a[e].head,b.replaceRange("",k(c.line,c.ch-1),k(c.line,c.ch+1),"+delete")},Enter:function(b){var a=u(b),a=a&&r(a,"explode");if(!a||b.getOption("disableInput"))return f.Pass;for(var c=b.listSelections(),e=0;e<c.length;e++){if(!c[e].empty())return f.Pass;
var d=y(b,c[e].head);if(!d||0!=a.indexOf(d)%2)return f.Pass}b.operation(function(){b.replaceSelection("\n\n",null);b.execCommand("goCharLeft");c=b.listSelections();for(var a=0;a<c.length;a++){var d=c[a].head.line;b.indentLine(d,null,!0);b.indentLine(d+1,null,!0)}})}},m=0;m<q.length;m++)p["'"+q.charAt(m)+"'"]=z(q.charAt(m))});


================================================
FILE: app/src/main/assets/code_mirror/addon/edit/closetag.js
================================================
'use strict';(function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror"),require("../fold/xml-fold")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../fold/xml-fold"],e):e(CodeMirror)})(function(e){function r(b){if(b.getOption("disableInput"))return e.Pass;for(var h=b.listSelections(),a=[],d=0;d<h.length;d++){if(!h[d].empty())return e.Pass;var f=h[d].head,c=b.getTokenAt(f),k=e.innerMode(b.getMode(),c.state),m=k.state;if("xml"!=k.mode.name||
!m.tagName)return e.Pass;var g=b.getOption("autoCloseTags"),l="html"==k.mode.configuration,k="object"==typeof g&&g.dontCloseTags||l&&t,l="object"==typeof g&&g.indentTags||l&&u,g=m.tagName;c.end>f.ch&&(g=g.slice(0,g.length-c.end+f.ch));var n=g.toLowerCase();if(!g||"string"==c.type&&(c.end!=f.ch||!/[\"\']/.test(c.string.charAt(c.string.length-1))||1==c.string.length)||"tag"==c.type&&"closeTag"==m.type||c.string.indexOf("/")==c.string.length-1||k&&-1<p(k,n)||q(b,g,f,m,!0))return e.Pass;c=l&&-1<p(l,n);
a[d]={indent:c,text:">"+(c?"\n\n":"")+"</"+g+">",newPos:c?e.Pos(f.line+1,0):e.Pos(f.line,f.ch+1)}}for(d=h.length-1;0<=d;d--)f=a[d],b.replaceRange(f.text,h[d].head,h[d].anchor,"+insert"),c=b.listSelections().slice(0),c[d]={head:f.newPos,anchor:f.newPos},b.setSelections(c),f.indent&&(b.indentLine(f.newPos.line,null,!0),b.indentLine(f.newPos.line+1,null,!0))}function n(b,h){for(var a=b.listSelections(),d=[],f=h?"/":"</",c=0;c<a.length;c++){if(!a[c].empty())return e.Pass;var k=a[c].head,m=b.getTokenAt(k),
g=e.innerMode(b.getMode(),m.state),l=g.state;if(h&&("string"==m.type||"<"!=m.string.charAt(0)||m.start!=k.ch-1))return e.Pass;if("xml"!=g.mode.name)if("htmlmixed"==b.getMode().name&&"javascript"==g.mode.name)g=f+"script";else if("htmlmixed"==b.getMode().name&&"css"==g.mode.name)g=f+"style";else return e.Pass;else{if(!l.context||!l.context.tagName||q(b,l.context.tagName,k,l))return e.Pass;g=f+l.context.tagName}">"!=b.getLine(k.line).charAt(m.end)&&(g+=">");d[c]=g}b.replaceSelections(d);a=b.listSelections();
for(c=0;c<a.length;c++)(c==a.length-1||a[c].head.line<a[c+1].head.line)&&b.indentLine(a[c].head.line)}function p(b,e){if(b.indexOf)return b.indexOf(e);for(var a=0,d=b.length;a<d;++a)if(b[a]==e)return a;return-1}function q(b,h,a,d,f){if(!e.scanForClosingTag)return!1;var c=Math.min(b.lastLine()+1,a.line+500);a=e.scanForClosingTag(b,a,null,c);if(!a||a.tag!=h)return!1;d=d.context;for(f=f?1:0;d&&d.tagName==h;d=d.prev)++f;a=a.to;for(d=1;d<f;d++){a=e.scanForClosingTag(b,a,null,c);if(!a||a.tag!=h)return!1;
a=a.to}return!0}e.defineOption("autoCloseTags",!1,function(b,h,a){a!=e.Init&&a&&b.removeKeyMap("autoCloseTags");if(h){a={name:"autoCloseTags"};if("object"!=typeof h||h.whenClosing)a["'/'"]=function(a){a=a.getOption("disableInput")?e.Pass:n(a,!0);return a};if("object"!=typeof h||h.whenOpening)a["'>'"]=function(a){return r(a)};b.addKeyMap(a)}});var t="area base br col command embed hr img input keygen link meta param source track wbr".split(" "),u="applet blockquote body button div dl fieldset form frameset h1 h2 h3 h4 h5 h6 head html iframe layer legend object ol p select table ul".split(" ");
e.commands.closeTag=function(b){return n(b)}});


================================================
FILE: app/src/main/assets/code_mirror/addon/edit/continuelist.js
================================================
'use strict';(function(d){"object"==typeof exports&&"object"==typeof module?d(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],d):d(CodeMirror)})(function(d){var l=/^(\s*)(>[> ]*|[*+-]\s|(\d+)([.)]))(\s*)/,m=/^(\s*)(>[> ]*|[*+-]|(\d+)[.)])(\s*)$/,n=/[*+-]\s/;d.commands.newlineAndIndentContinueMarkdownList=function(b){if(b.getOption("disableInput"))return d.Pass;for(var f=b.listSelections(),g=[],e=0;e<f.length;e++){var c=f[e].head,a=b.getStateAfter(c.line),
h=!1!==a.list,p=0!==a.quote,k=b.getLine(c.line),a=l.exec(k);if(!f[e].empty()||!h&&!p||!a){b.execCommand("newlineAndIndent");return}m.test(k)?(b.replaceRange("",{line:c.line,ch:0},{line:c.line,ch:c.ch+1}),g[e]="\n"):(c=a[1],h=a[5],a=n.test(a[2])||0<=a[2].indexOf(">")?a[2]:parseInt(a[3],10)+1+a[4],g[e]="\n"+c+a+h)}b.replaceSelections(g)}});


================================================
FILE: app/src/main/assets/code_mirror/addon/edit/matchbrackets.js
================================================
'use strict';(function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){function r(a,c,b,e){var d=a.getLineHandle(c.line),l=c.ch-1,d=0<=l&&q[d.text.charAt(l)]||q[d.text.charAt(++l)];if(!d)return null;var h=">"==d.charAt(1)?1:-1;if(b&&0<h!=(l==c.ch))return null;b=a.getTokenTypeAt(m(c.line,l+1));a=t(a,m(c.line,l+(0<h?1:0)),h,b||null,e);return null==a?null:{from:m(c.line,
l),to:a&&a.pos,match:a&&a.ch==d.charAt(0),forward:0<h}}function t(a,c,b,e,d){var l=d&&d.maxScanLineLength||1E4,h=d&&d.maxScanLines||1E3,g=[];d=d&&d.bracketRegex?d.bracketRegex:/[(){}[\]]/;for(var h=0<b?Math.min(c.line+h,a.lastLine()+1):Math.max(a.firstLine()-1,c.line-h),k=c.line;k!=h;k+=b){var n=a.getLine(k);if(n){var f=0<b?0:n.length-1,w=0<b?n.length:-1;if(!(n.length>l))for(k==c.line&&(f=c.ch-(0>b?1:0));f!=w;f+=b){var p=n.charAt(f);if(d.test(p)&&(void 0===e||a.getTokenTypeAt(m(k,f+1))==e))if(">"==
q[p].charAt(1)==0<b)g.push(p);else if(g.length)g.pop();else return{pos:m(k,f),ch:p}}}}return k-b==(0<b?a.lastLine():a.firstLine())?!1:null}function u(a,c,b){for(var e=a.state.matchBrackets.maxHighlightLineLength||1E3,d=[],f=a.listSelections(),h=0;h<f.length;h++){var g=f[h].empty()&&r(a,f[h].head,!1,b);if(g&&a.getLine(g.from.line).length<=e){var k=g.match?"CodeMirror-matchingbracket":"CodeMirror-nonmatchingbracket";d.push(a.markText(g.from,m(g.from.line,g.from.ch+1),{className:k}));g.to&&a.getLine(g.to.line).length<=
e&&d.push(a.markText(g.to,m(g.to.line,g.to.ch+1),{className:k}))}}if(d.length)if(x&&a.state.focused&&a.focus(),b=function(){a.operation(function(){for(var a=0;a<d.length;a++)d[a].clear()})},c)setTimeout(b,800);else return b}function v(a){a.operation(function(){f&&(f(),f=null);f=u(a,!1,a.state.matchBrackets)})}var x=/MSIE \d/.test(navigator.userAgent)&&(null==document.documentMode||8>document.documentMode),m=e.Pos,q={"(":")>",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<"},f=null;e.defineOption("matchBrackets",
!1,function(a,c,b){b&&b!=e.Init&&(a.off("cursorActivity",v),f&&(f(),f=null));c&&(a.state.matchBrackets="object"==typeof c?c:{},a.on("cursorActivity",v))});e.defineExtension("matchBrackets",function(){u(this,!0)});e.defineExtension("findMatchingBracket",function(a,c,b){return r(this,a,c,b)});e.defineExtension("scanForBracket",function(a,c,b,e){return t(this,a,c,b,e)})});


================================================
FILE: app/src/main/assets/code_mirror/addon/edit/matchtags.js
================================================
'use strict';(function(d){"object"==typeof exports&&"object"==typeof module?d(require("../../lib/codemirror"),require("../fold/xml-fold")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../fold/xml-fold"],d):d(CodeMirror)})(function(d){function f(a){a.state.tagHit&&a.state.tagHit.clear();a.state.tagOther&&a.state.tagOther.clear();a.state.tagHit=a.state.tagOther=null}function e(a){a.state.failedTagMatch=!1;a.operation(function(){f(a);if(!a.somethingSelected()){var b=a.getCursor(),
c=a.getViewport();c.from=Math.min(c.from,b.line);c.to=Math.max(b.line+1,c.to);if(b=d.findMatchingTag(a,b,c))a.state.matchBothTags&&(c="open"==b.at?b.open:b.close)&&(a.state.tagHit=a.markText(c.from,c.to,{className:"CodeMirror-matchingtag"})),(b="close"==b.at?b.open:b.close)?a.state.tagOther=a.markText(b.from,b.to,{className:"CodeMirror-matchingtag"}):a.state.failedTagMatch=!0}})}function g(a){a.state.failedTagMatch&&e(a)}d.defineOption("matchTags",!1,function(a,b,c){c&&c!=d.Init&&(a.off("cursorActivity",
e),a.off("viewportChange",g),f(a));b&&(a.state.matchBothTags="object"==typeof b&&b.bothTags,a.on("cursorActivity",e),a.on("viewportChange",g),e(a))});d.commands.toMatchingTag=function(a){var b=d.findMatchingTag(a,a.getCursor());b&&(b="close"==b.at?b.open:b.close)&&a.extendSelection(b.to,b.from)}});


================================================
FILE: app/src/main/assets/code_mirror/addon/edit/trailingspace.js
================================================
'use strict';(function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],a):a(CodeMirror)})(function(a){a.defineOption("showTrailingSpace",!1,function(d,e,b){b==a.Init&&(b=!1);b&&!e?d.removeOverlay("trailingspace"):!b&&e&&d.addOverlay({token:function(a){for(var b=a.string.length,c=b;c&&/\s/.test(a.string.charAt(c-1));--c);if(c>a.pos)return a.pos=c,null;a.pos=b;return"trailingspace"},name:"trailingspace"})})});


================================================
FILE: app/src/main/assets/code_mirror/addon/fold/brace-fold.js
================================================
'use strict';(function(d){"object"==typeof exports&&"object"==typeof module?d(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],d):d(CodeMirror)})(function(d){d.registerHelper("fold","brace",function(e,a){function b(h){for(var c=a.ch,b=0;;)if(c=0>=c?-1:f.lastIndexOf(h,c-1),-1==c){if(1==b)break;b=1;c=f.length}else{if(1==b&&c<a.ch)break;k=e.getTokenTypeAt(d.Pos(g,c+1));if(!/^(comment|string)/.test(k))return c+1;--c}}var g=a.line,f=e.getLine(g),k,
h="{",t="}",l=b("{");null==l&&(h="[",t="]",l=b("["));if(null!=l){var u=1,v=e.lastLine(),p,r,m=g;a:for(;m<=v;++m)for(var n=e.getLine(m),c=m==g?l:0;;){var q=n.indexOf(h,c),c=n.indexOf(t,c);0>q&&(q=n.length);0>c&&(c=n.length);c=Math.min(q,c);if(c==n.length)break;if(e.getTokenTypeAt(d.Pos(m,c+1))==k)if(c==q)++u;else if(!--u){p=m;r=c;break a}++c}if(null!=p&&(g!=p||r!=l))return{from:d.Pos(g,l),to:d.Pos(p,r)}}});d.registerHelper("fold","import",function(e,a){function b(h){if(h<e.firstLine()||h>e.lastLine())return null;
var a=e.getTokenAt(d.Pos(h,1));/\S/.test(a.string)||(a=e.getTokenAt(d.Pos(h,a.end+1)));if("keyword"!=a.type||"import"!=a.string)return null;var b=h;for(h=Math.min(e.lastLine(),h+10);b<=h;++b){var f=e.getLine(b).indexOf(";");if(-1!=f)return{startCh:a.end,end:d.Pos(b,f)}}}a=a.line;var g=b(a),f;if(!g||b(a-1)||(f=b(a-2))&&f.end.line==a-1)return null;for(f=g.end;;){var k=b(f.line+1);if(null==k)break;f=k.end}return{from:e.clipPos(d.Pos(a,g.startCh+1)),to:f}});d.registerHelper("fold","include",function(e,
a){function b(a){if(a<e.firstLine()||a>e.lastLine())return null;var b=e.getTokenAt(d.Pos(a,1));/\S/.test(b.string)||(b=e.getTokenAt(d.Pos(a,b.end+1)));if("meta"==b.type&&"#include"==b.string.slice(0,8))return b.start+8}a=a.line;var g=b(a);if(null==g||null!=b(a-1))return null;for(var f=a;null!=b(f+1);)++f;return{from:d.Pos(a,g+1),to:e.clipPos(d.Pos(f))}})});


================================================
FILE: app/src/main/assets/code_mirror/addon/fold/comment-fold.js
================================================
'use strict';(function(b){"object"==typeof exports&&"object"==typeof module?b(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],b):b(CodeMirror)})(function(b){b.registerGlobalHelper("fold","comment",function(b){return b.blockCommentStart&&b.blockCommentEnd},function(g,d){var e=g.getModeAt(d),m=e.blockCommentStart,e=e.blockCommentEnd;if(m&&e){for(var f=d.line,h=g.getLine(f),a=d.ch,k=0;;)if(a=0>=a?-1:h.lastIndexOf(m,a-1),-1==a){if(1==k)return;k=1;
a=h.length}else{if(1==k&&a<d.ch)return;if(/comment/.test(g.getTokenTypeAt(b.Pos(f,a+1)))&&(0==a||h.slice(a-e.length,a)==e||!/comment/.test(g.getTokenTypeAt(b.Pos(f,a))))){d=a+m.length;break}--a}var h=1,k=g.lastLine(),n,q,a=f;a:for(;a<=k;++a)for(var l=g.getLine(a),c=a==f?d:0;;){var p=l.indexOf(m,c),c=l.indexOf(e,c);0>p&&(p=l.length);0>c&&(c=l.length);c=Math.min(p,c);if(c==l.length)break;if(c==p)++h;else if(!--h){n=a;q=c;break a}++c}if(null!=n&&(f!=n||q!=d))return{from:b.Pos(f,d),to:b.Pos(n,q)}}})});


================================================
FILE: app/src/main/assets/code_mirror/addon/fold/foldcode.js
================================================
'use strict';(function(b){"object"==typeof exports&&"object"==typeof module?b(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],b):b(CodeMirror)})(function(b){function k(a,c,d,g){function f(d){var b=k(a,c);if(!b||b.to.line-b.from.line<l)return null;for(var f=a.findMarksAt(b.from),e=0;e<f.length;++e)if(f[e].__isFold&&"fold"!==g){if(!d)return null;b.cleared=!0;f[e].clear()}return b}if(d&&d.call){var k=d;d=null}else k=h(a,d,"rangeFinder");"number"==
typeof c&&(c=b.Pos(c,0));var l=h(a,d,"minFoldSize"),e=f(!0);if(h(a,d,"scanUp"))for(;!e&&c.line>a.firstLine();)c=b.Pos(c.line-1,0),e=f(!1);if(e&&!e.cleared&&"unfold"!==g){var m=p(a,d);b.on(m,"mousedown",function(a){n.clear();b.e_preventDefault(a)});var n=a.markText(e.from,e.to,{replacedWith:m,clearOnEnter:h(a,d,"clearOnEnter"),__isFold:!0});n.on("clear",function(c,d){b.signal(a,"unfold",a,c,d)});b.signal(a,"fold",a,e.from,e.to)}}function p(a,c){a=h(a,c,"widget");"string"==typeof a&&(c=document.createTextNode(a),
a=document.createElement("span"),a.appendChild(c),a.className="CodeMirror-foldmarker");return a}function h(a,c,b){return c&&void 0!==c[b]?c[b]:(a=a.options.foldOptions)&&void 0!==a[b]?a[b]:l[b]}b.newFoldFunction=function(a,c){return function(b,g){k(b,g,{rangeFinder:a,widget:c})}};b.defineExtension("foldCode",function(a,b,d){k(this,a,b,d)});b.defineExtension("isFolded",function(a){a=this.findMarksAt(a);for(var b=0;b<a.length;++b)if(a[b].__isFold)return!0});b.commands.toggleFold=function(a){a.foldCode(a.getCursor())};
b.commands.fold=function(a){a.foldCode(a.getCursor(),null,"fold")};b.commands.unfold=function(a){a.foldCode(a.getCursor(),null,"unfold")};b.commands.foldAll=function(a){a.operation(function(){for(var c=a.firstLine(),d=a.lastLine();c<=d;c++)a.foldCode(b.Pos(c,0),null,"fold")})};b.commands.unfoldAll=function(a){a.operation(function(){for(var c=a.firstLine(),d=a.lastLine();c<=d;c++)a.foldCode(b.Pos(c,0),null,"unfold")})};b.registerHelper("fold","combine",function(){var a=Array.prototype.slice.call(arguments,
0);return function(b,d){for(var c=0;c<a.length;++c){var f=a[c](b,d);if(f)return f}}});b.registerHelper("fold","auto",function(a,b){for(var c=a.getHelpers(b,"fold"),g=0;g<c.length;g++){var f=c[g](a,b);if(f)return f}});var l={rangeFinder:b.fold.auto,widget:"\u2194",minFoldSize:0,scanUp:!1,clearOnEnter:!0};b.defineOption("foldOptions",null);b.defineExtension("foldOption",function(a,b){return h(this,a,b)})});


================================================
FILE: app/src/main/assets/code_mirror/addon/fold/foldgutter.css
================================================
.CodeMirror-foldmarker{color:#00f;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.CodeMirror-foldgutter{width:.7em}.CodeMirror-foldgutter-folded,.CodeMirror-foldgutter-open{cursor:pointer}.CodeMirror-foldgutter-open:after{content:"\25BE"}.CodeMirror-foldgutter-folded:after{content:"\25B8"}

================================================
FILE: app/src/main/assets/code_mirror/addon/fold/foldgutter.js
================================================
'use strict';var $jscomp={scope:{},findInternal:function(a,f,d){a instanceof String&&(a=String(a));for(var g=a.length,e=0;e<g;e++){var k=a[e];if(f.call(d,k,e,a))return{i:e,v:k}}return{i:-1,v:void 0}}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(a,f,d){if(d.get||d.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[f]=d.value)};
$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global?global:a};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(a,f,d,g){if(f){d=$jscomp.global;a=a.split(".");for(g=0;g<a.length-1;g++){var e=a[g];e in d||(d[e]={});d=d[e]}a=a[a.length-1];g=d[a];f=f(g);f!=g&&null!=f&&$jscomp.defineProperty(d,a,{configurable:!0,writable:!0,value:f})}};
$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,d){return $jscomp.findInternal(this,a,d).v}},"es6-impl","es3");
(function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror"),require("./foldcode")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","./foldcode"],a):a(CodeMirror)})(function(a){function f(b){this.options=b;this.from=this.to=0}function d(b,c){b=b.findMarks(m(c,0),m(c+1,0));for(var a=0;a<b.length;++a)if(b[a].__isFold&&b[a].find().from.line==c)return b[a]}function g(b){if("string"==typeof b){var c=document.createElement("div");c.className=b+" CodeMirror-guttermarker-subtle";
return c}return b.cloneNode(!0)}function e(b,c,a){var l=b.state.foldGutter.options,e=c,f=b.foldOption(l,"minFoldSize"),k=b.foldOption(l,"rangeFinder");b.eachLine(c,a,function(c){var a=null;if(d(b,e))a=g(l.indicatorFolded);else{var h=m(e,0);(h=k&&k(b,h))&&h.to.line-h.from.line>=f&&(a=g(l.indicatorOpen))}b.setGutterMarker(c,l.gutter,a);++e})}function k(b){var c=b.getViewport(),a=b.state.foldGutter;a&&(b.operation(function(){e(b,c.from,c.to)}),a.from=c.from,a.to=c.to)}function q(b,c,a){var h=b.state.foldGutter;
h&&(h=h.options,a==h.gutter&&((a=d(b,c))?a.clear():b.foldCode(m(c,0),h.rangeFinder)))}function n(b){var c=b.state.foldGutter;if(c){var a=c.options;c.from=c.to=0;clearTimeout(c.changeUpdate);c.changeUpdate=setTimeout(function(){k(b)},a.foldOnChangeTimeSpan||600)}}function r(b){var a=b.state.foldGutter;if(a){var d=a.options;clearTimeout(a.changeUpdate);a.changeUpdate=setTimeout(function(){var c=b.getViewport();a.from==a.to||20<c.from-a.to||20<a.from-c.to?k(b):b.operation(function(){c.from<a.from&&(e(b,
c.from,a.from),a.from=c.from);c.to>a.to&&(e(b,a.to,c.to),a.to=c.to)})},d.updateViewportTimeSpan||400)}}function p(a,c){var b=a.state.foldGutter;b&&(c=c.line,c>=b.from&&c<b.to&&e(a,c,c+1))}a.defineOption("foldGutter",!1,function(b,c,d){d&&d!=a.Init&&(b.clearGutter(b.state.foldGutter.options.gutter),b.state.foldGutter=null,b.off("gutterClick",q),b.off("change",n),b.off("viewportChange",r),b.off("fold",p),b.off("unfold",p),b.off("swapDoc",n));c&&(d=b.state,!0===c&&(c={}),null==c.gutter&&(c.gutter="CodeMirror-foldgutter"),
null==c.indicatorOpen&&(c.indicatorOpen="CodeMirror-foldgutter-open"),null==c.indicatorFolded&&(c.indicatorFolded="CodeMirror-foldgutter-folded"),d.foldGutter=new f(c),k(b),b.on("gutterClick",q),b.on("change",n),b.on("viewportChange",r),b.on("fold",p),b.on("unfold",p),b.on("swapDoc",n))});var m=a.Pos});


================================================
FILE: app/src/main/assets/code_mirror/addon/fold/indent-fold.js
================================================
'use strict';(function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],a):a(CodeMirror)})(function(a){a.registerHelper("fold","indent",function(b,e){var g=b.getOption("tabSize"),f=b.getLine(e.line);if(/\S/.test(f)){for(var k=a.countColumn(f,null,g),c=null,d=e.line+1,l=b.lastLine();d<=l;++d){var h=b.getLine(d);if(a.countColumn(h,null,g)>k)c=d;else if(/\S/.test(h))break}if(c)return{from:a.Pos(e.line,
f.length),to:a.Pos(c,b.getLine(c).length)}}})});


================================================
FILE: app/src/main/assets/code_mirror/addon/fold/markdown-fold.js
================================================
'use strict';(function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],a):a(CodeMirror)})(function(a){a.registerHelper("fold","markdown",function(c,d){function g(b){return(b=c.getTokenTypeAt(a.Pos(b,0)))&&/\bheader\b/.test(b)}function h(b,a,c){return(a=a&&a.match(/^#+/))&&g(b)?a[0].length:(a=c&&c.match(/^[=\-]+\s*$/))&&g(b+1)?"="==c[0]?1:2:100}var k=c.getLine(d.line),e=c.getLine(d.line+1),
l=h(d.line,k,e);if(100!==l){for(var m=c.lastLine(),b=d.line,f=c.getLine(b+2);b<m&&!(h(b+1,e,f)<=l);)++b,e=f,f=c.getLine(b+2);return{from:a.Pos(d.line,k.length),to:a.Pos(b,c.getLine(b).length)}}})});


================================================
FILE: app/src/main/assets/code_mirror/addon/fold/xml-fold.js
================================================
'use strict';(function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){function l(a,b,d,c){this.line=b;this.ch=d;this.cm=a;this.text=a.getLine(b);this.min=c?Math.max(c.from,a.firstLine()):a.firstLine();this.max=c?Math.min(c.to-1,a.lastLine()):a.lastLine()}function m(a,b){return(a=a.cm.getTokenTypeAt(h(a.line,b)))&&/\btag\b/.test(a)}function t(a){if(!(a.line>=
a.max))return a.ch=0,a.text=a.cm.getLine(++a.line),!0}function u(a){if(!(a.line<=a.min))return a.text=a.cm.getLine(--a.line),a.ch=a.text.length,!0}function q(a){for(;;){var b=a.text.indexOf(">",a.ch);if(-1==b)if(t(a))continue;else break;if(m(a,b+1)){var d=a.text.lastIndexOf("/",b),d=-1<d&&!/\S/.test(a.text.slice(d+1,b));a.ch=b+1;return d?"selfClose":"regular"}a.ch=b+1}}function r(a){for(;;){var b=a.ch?a.text.lastIndexOf("<",a.ch-1):-1;if(-1==b)if(u(a))continue;else break;if(m(a,b+1)){n.lastIndex=
b;a.ch=b;var d=n.exec(a.text);if(d&&d.index==b)return d}else a.ch=b}}function v(a){for(;;){n.lastIndex=a.ch;var b=n.exec(a.text);if(!b)if(t(a))continue;else break;if(m(a,b.index+1))return a.ch=b.index+b[0].length,b;a.ch=b.index+1}}function p(a,b){for(var d=[];;){var c=v(a),g,f=a.line,k=a.ch-(c?c[0].length:0);if(!c||!(g=q(a)))break;if("selfClose"!=g)if(c[1]){for(var e=d.length-1;0<=e;--e)if(d[e]==c[2]){d.length=e;break}if(0>e&&(!b||b==c[2]))return{tag:c[2],from:h(f,k),to:h(a.line,a.ch)}}else d.push(c[2])}}
function w(a,b){for(var d=[];;){var c;a:for(c=a;;){var g=c.ch?c.text.lastIndexOf(">",c.ch-1):-1;if(-1==g)if(u(c))continue;else{c=void 0;break a}if(m(c,g+1)){var f=c.text.lastIndexOf("/",g),f=-1<f&&!/\S/.test(c.text.slice(f+1,g));c.ch=g+1;c=f?"selfClose":"regular";break a}else c.ch=g}if(!c)break;if("selfClose"==c)r(a);else{c=a.line;g=a.ch;f=r(a);if(!f)break;if(f[1])d.push(f[2]);else{for(var e=d.length-1;0<=e;--e)if(d[e]==f[2]){d.length=e;break}if(0>e&&(!b||b==f[2]))return{tag:f[2],from:h(a.line,a.ch),
to:h(c,g)}}}}}var h=e.Pos,n=/<(\/?)([A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD-:.0-9\u00B7\u0300-\u036F\u203F-\u2040]*)/g;e.registerHelper("fold","xml",function(a,b){for(a=new l(a,b.line,0);;){var d=v(a),c;if(!d||a.line!=b.line||!(c=q(a)))break;
if(!d[1]&&"selfClose"!=c)return b=h(a.line,a.ch),(a=p(a,d[2]))&&{from:b,to:a.from}}});e.findMatchingTag=function(a,b,d){var c=new l(a,b.line,b.ch,d);if(-1!=c.text.indexOf(">")||-1!=c.text.indexOf("<")){var e=q(c),f=e&&h(c.line,c.ch),k=e&&r(c);if(e&&k&&!(0<(c.line-b.line||c.ch-b.ch))){b={from:h(c.line,c.ch),to:f,tag:k[2]};if("selfClose"==e)return{open:b,close:null,at:"open"};if(k[1])return{open:w(c,k[2]),close:b,at:"close"};c=new l(a,f.line,f.ch,d);return{open:b,close:p(c,k[2]),at:"open"}}}};e.findEnclosingTag=
function(a,b,d){for(var c=new l(a,b.line,b.ch,d);;){var e=w(c);if(!e)break;var f=new l(a,b.line,b.ch,d);if(f=p(f,e.tag))return{open:e,close:f}}};e.scanForClosingTag=function(a,b,d,c){a=new l(a,b.line,b.ch,c?{from:0,to:c}:null);return p(a,d)}});


================================================
FILE: app/src/main/assets/code_mirror/addon/hint/anyword-hint.js
================================================
'use strict';(function(b){"object"==typeof exports&&"object"==typeof module?b(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],b):b(CodeMirror)})(function(b){var p=/[\w$]+/;b.registerHelper("hint","anyword",function(g,a){for(var l=a&&a.word||p,q=a&&a.range||500,c=g.getCursor(),d=g.getLine(c.line),m=c.ch,e=m;e&&l.test(d.charAt(e-1));)--e;d=e!=m&&d.slice(e,m);a=a&&a.list||[];for(var n={},l=new RegExp(l.source,"g"),h=-1;1>=h;h+=2)for(var k=c.line,
r=Math.min(Math.max(k+h*q,g.firstLine()),g.lastLine())+h;k!=r;k+=h)for(var t=g.getLine(k),f;f=l.exec(t);)k==c.line&&f[0]===d||d&&0!=f[0].lastIndexOf(d,0)||Object.prototype.hasOwnProperty.call(n,f[0])||(n[f[0]]=!0,a.push(f[0]));return{list:a,from:b.Pos(c.line,e),to:b.Pos(c.line,m)}})});


================================================
FILE: app/src/main/assets/code_mirror/addon/hint/css-hint.js
================================================
'use strict';(function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror"),require("../../mode/css/css")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../../mode/css/css"],a):a(CodeMirror)})(function(a){var m={link:1,visited:1,active:1,hover:1,focus:1,"first-letter":1,"first-line":1,"first-child":1,before:1,after:1,lang:1};a.registerHelper("hint","css",function(d){function f(b){for(var a in b)h&&0!=a.lastIndexOf(h,0)||k.push(a)}var e=d.getCursor(),
c=d.getTokenAt(e),b=a.innerMode(d.getMode(),c.state);if("css"==b.mode.name){if("keyword"==c.type&&0=="!important".indexOf(c.string))return{list:["!important"],from:a.Pos(e.line,c.start),to:a.Pos(e.line,c.end)};d=c.start;var l=e.ch,h=c.string.slice(0,l-d);/[^\w$_-]/.test(h)&&(h="",d=l=e.ch);var g=a.resolveMode("text/css"),k=[],b=b.state.state;if("pseudo"==b||"variable-3"==c.type)f(m);else if("block"==b||"maybeprop"==b)f(g.propertyKeywords);else if("prop"==b||"parens"==b||"at"==b||"params"==b)f(g.valueKeywords),
f(g.colorKeywords);else if("media"==b||"media_parens"==b)f(g.mediaTypes),f(g.mediaFeatures);if(k.length)return{list:k,from:a.Pos(e.line,d),to:a.Pos(e.line,l)}}})});


================================================
FILE: app/src/main/assets/code_mirror/addon/hint/html-hint.js
================================================
'use strict';(function(b){"object"==typeof exports&&"object"==typeof module?b(require("../../lib/codemirror"),require("./xml-hint")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","./xml-hint"],b):b(CodeMirror)})(function(b){function n(a){for(var b in g)g.hasOwnProperty(b)&&(a.attrs[b]=g[b])}var d="ab aa af ak sq am ar an hy as av ae ay az bm ba eu be bn bh bi bs br bg my ca ch ce ny zh cv kw co cr hr cs da dv nl dz en eo et ee fo fj fi fr ff gl ka de el gn gu ht ha he hz hi ho hu ia id ie ga ig ik io is it iu ja jv kl kn kr ks kk km ki rw ky kv kg ko ku kj la lb lg li ln lo lt lu lv gv mk mg ms ml mt mi mr mh mn na nv nb nd ne ng nn no ii nr oc oj cu om or os pa pi fa pl ps pt qu rm rn ro ru sa sc sd se sm sg sr gd sn si sk sl so st es su sw ss sv ta te tg th ti bo tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa cy wo fy xh yi yo za zu".split(" "),
c=["_blank","_self","_top","_parent"],h=["ascii","utf-8","utf-16","latin1","latin1"],k=["get","post","put","delete"],l=["application/x-www-form-urlencoded","multipart/form-data","text/plain"],e="all;screen;print;embossed;braille;handheld;print;projection;screen;tty;tv;speech;3d-glasses;resolution [>][<][=] [X];device-aspect-ratio: X/Y;orientation:portrait;orientation:landscape;device-height: [X];device-width: [X]".split(";"),a={attrs:{}},f={a:{attrs:{href:null,ping:null,type:null,media:e,target:c,
hreflang:d}},abbr:a,acronym:a,address:a,applet:a,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:e,hreflang:d,type:null,shape:["default","rect","circle","poly"]}},article:a,aside:a,audio:{attrs:{src:null,mediagroup:null,crossorigin:["anonymous","use-credentials"],preload:["none","metadata","auto"],autoplay:["","autoplay"],loop:["","loop"],controls:["","controls"]}},b:a,base:{attrs:{href:null,target:c}},basefont:a,bdi:a,bdo:a,big:a,blockquote:{attrs:{cite:null}},body:a,br:a,
button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:["","autofocus"],disabled:["","autofocus"],formenctype:l,formmethod:k,formnovalidate:["","novalidate"],formtarget:c,type:["submit","reset","button"]}},canvas:{attrs:{width:null,height:null}},caption:a,center:a,cite:a,code:a,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:["command","checkbox","radio"],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:["","disabled"],checked:["","checked"]}},
data:{attrs:{value:null}},datagrid:{attrs:{disabled:["","disabled"],multiple:["","multiple"]}},datalist:{attrs:{data:null}},dd:a,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:["","open"]}},dfn:a,dir:a,div:a,dl:a,dt:a,em:a,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:["","disabled"],form:null,name:null}},figcaption:a,figure:a,font:a,footer:a,form:{attrs:{action:null,name:null,"accept-charset":h,autocomplete:["on","off"],
enctype:l,method:k,novalidate:["","novalidate"],target:c}},frame:a,frameset:a,h1:a,h2:a,h3:a,h4:a,h5:a,h6:a,head:{attrs:{},children:"title base link style meta script noscript command".split(" ")},header:a,hgroup:a,hr:a,html:{attrs:{manifest:null},children:["head","body"]},i:a,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:["allow-top-navigation","allow-same-origin","allow-forms","allow-scripts"],seamless:["","seamless"]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,
width:null,height:null,crossorigin:["anonymous","use-credentials"]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:["audio/*","video/*","image/*"],autocomplete:["on","off"],autofocus:["","autofocus"],checked:["","checked"],disabled:["","disabled"],formenctype:l,formmethod:k,formnovalidate:["","novalidate"],formtarget:c,multiple:["",
"multiple"],readonly:["","readonly"],required:["","required"],type:"hidden text search tel url email password datetime date month week time datetime-local number range color checkbox radio file submit image reset button".split(" ")}},ins:{attrs:{cite:null,datetime:null}},kbd:a,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:["","autofocus"],disabled:["","disabled"],keytype:["RSA"]}},label:{attrs:{"for":null,form:null}},legend:a,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,
hreflang:d,media:e,sizes:["all","16x16","16x16 32x32","16x16 32x32 64x64"]}},map:{attrs:{name:null}},mark:a,menu:{attrs:{label:null,type:["list","context","toolbar"]}},meta:{attrs:{content:null,charset:h,name:"viewport application-name author description generator keywords".split(" "),"http-equiv":["content-language","content-type","default-style","refresh"]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:a,noframes:a,noscript:a,object:{attrs:{data:null,type:null,
name:null,usemap:null,form:null,width:null,height:null,typemustmatch:["","typemustmatch"]}},ol:{attrs:{reversed:["","reversed"],start:null,type:["1","a","A","i","I"]}},optgroup:{attrs:{disabled:["","disabled"],label:null}},option:{attrs:{disabled:["","disabled"],label:null,selected:["","selected"],value:null}},output:{attrs:{"for":null,form:null,name:null}},p:a,param:{attrs:{name:null,value:null}},pre:a,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:a,rt:a,ruby:a,s:a,samp:a,script:{attrs:{type:["text/javascript"],
src:null,async:["","async"],defer:["","defer"],charset:h}},section:a,select:{attrs:{form:null,name:null,size:null,autofocus:["","autofocus"],disabled:["","disabled"],multiple:["","multiple"]}},small:a,source:{attrs:{src:null,type:null,media:null}},span:a,strike:a,strong:a,style:{attrs:{type:["text/css"],media:e,scoped:null}},sub:a,summary:a,sup:a,table:a,tbody:a,td:{attrs:{colspan:null,rowspan:null,headers:null}},textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,
cols:null,autofocus:["","autofocus"],disabled:["","disabled"],readonly:["","readonly"],required:["","required"],wrap:["soft","hard"]}},tfoot:a,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:["row","col","rowgroup","colgroup"]}},thead:a,time:{attrs:{datetime:null}},title:a,tr:a,track:{attrs:{src:null,label:null,"default":null,kind:["subtitles","captions","descriptions","chapters","metadata"],srclang:d}},tt:a,u:a,ul:a,"var":a,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:["anonymous",
"use-credentials"],preload:["auto","metadata","none"],autoplay:["","autoplay"],mediagroup:["movie"],muted:["","muted"],controls:["","controls"]}},wbr:a},g={accesskey:"abcdefghijklmnopqrstuvwxyz0123456789".split(""),"class":null,contenteditable:["true","false"],contextmenu:null,dir:["ltr","rtl","auto"],draggable:["true","false","auto"],dropzone:["copy","move","link","string:","file:"],hidden:["hidden"],id:null,inert:["inert"],itemid:null,itemprop:null,itemref:null,itemscope:["itemscope"],itemtype:null,
lang:["en","es"],spellcheck:["true","false"],style:null,tabindex:"123456789".split(""),title:null,translate:["yes","no"],onclick:null,rel:"stylesheet alternate author bookmark help license next nofollow noreferrer prefetch prev search tag".split(" ")};n(a);for(var m in f)f.hasOwnProperty(m)&&f[m]!=a&&n(f[m]);b.htmlSchema=f;b.registerHelper("hint","html",function(a,c){var d={schemaInfo:f};if(c)for(var e in c)d[e]=c[e];return b.hint.xml(a,d)})});


================================================
FILE: app/src/main/assets/code_mirror/addon/hint/javascript-hint.js
================================================
'use strict';(function(h){"object"==typeof exports&&"object"==typeof module?h(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],h):h(CodeMirror)})(function(h){function m(a,b){for(var k=0,e=a.length;k<e;++k)b(a[k])}function q(a,b,k,e){var c=a.getCursor(),d=k(a,c);if(!/\b(?:string|comment)\b/.test(d.type)){d.state=h.innerMode(a.getMode(),d.state).state;/^[\w$_]*$/.test(d.string)?d.end>c.ch&&(d.end=c.ch,d.string=d.string.slice(0,c.ch-d.start)):d={start:c.ch,
end:c.ch,string:"",state:d.state,type:"."==d.string?"property":null};for(var f=d;"property"==f.type;){f=k(a,n(c.line,f.start));if("."!=f.string)return;f=k(a,n(c.line,f.start));if(!p)var p=[];p.push(f)}return{list:r(d,p,b,e),from:n(c.line,d.start),to:n(c.line,d.end)}}}function t(a,b){a=a.getTokenAt(b);b.ch==a.start+1&&"."==a.string.charAt(0)?(a.end=a.start,a.string=".",a.type="property"):/^\.[\w$_]*$/.test(a.string)&&(a.type="property",a.start++,a.string=a.string.replace(/\./,""));return a}function r(a,
b,k,e){function c(a){var b;if(b=0==a.lastIndexOf(h,0)){a:if(Array.prototype.indexOf)b=-1!=f.indexOf(a);else{for(b=f.length;b--;)if(f[b]===a){b=!0;break a}b=!1}b=!b}b&&f.push(a)}function d(a){"string"==typeof a?m(u,c):a instanceof Array?m(v,c):a instanceof Function&&m(w,c);if(Object.getOwnPropertyNames&&Object.getPrototypeOf)for(;a;a=Object.getPrototypeOf(a))Object.getOwnPropertyNames(a).forEach(c);else for(var b in a)c(b)}var f=[],h=a.string,l=e&&e.globalScope||window;if(b&&b.length){a=b.po
Download .txt
gitextract_6u3neemq/

├── .gitattributes
├── .gitignore
├── .travis.yml
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE.md
├── LICENSE
├── README.md
├── app/
│   ├── build.gradle
│   ├── quality.gradle
│   └── src/
│       ├── androidTest/
│       │   ├── AndroidManifest.xml
│       │   └── java/
│       │       └── com/
│       │           └── github/
│       │               └── pockethub/
│       │                   └── android/
│       │                       └── tests/
│       │                           ├── NewsEventTextTest.java
│       │                           ├── ViewVisibiltyIdlingResource.kt
│       │                           ├── commit/
│       │                           │   ├── CommitUriMatcherTest.java
│       │                           │   ├── CommitUtilsTest.java
│       │                           │   ├── CreateCommentActivityTest.java
│       │                           │   ├── DiffStylerTest.java
│       │                           │   └── FullCommitTest.java
│       │                           ├── gist/
│       │                           │   ├── CreateCommentActivityTest.java
│       │                           │   ├── CreateGistActivityTest.java
│       │                           │   ├── GistFilesViewActivityTest.java
│       │                           │   ├── GistStoreTest.java
│       │                           │   └── GistUriMatcherTest.java
│       │                           ├── issue/
│       │                           │   ├── CreateCommentActivityTest.java
│       │                           │   ├── EditIssueActivityTest.java
│       │                           │   ├── EditIssuesFilterActivityTest.java
│       │                           │   ├── IssueFilterTest.java
│       │                           │   ├── IssueStoreTest.java
│       │                           │   └── IssueUriMatcherTest.java
│       │                           ├── ref/
│       │                           │   └── RefUtilsTest.java
│       │                           ├── repo/
│       │                           │   ├── RecentRepositoriesTest.java
│       │                           │   ├── RepositoryEventMatcherTest.java
│       │                           │   ├── RepositoryUriMatcherTest.java
│       │                           │   └── SearchActivityTest.java
│       │                           ├── user/
│       │                           │   ├── UserComparatorTest.java
│       │                           │   └── UserUriMatcherTest.java
│       │                           └── util/
│       │                               └── HtmlUtilsTest.java
│       ├── debug/
│       │   └── res/
│       │       └── values/
│       │           └── strings.xml
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── assets/
│       │   │   ├── code_mirror/
│       │   │   │   ├── LICENSE
│       │   │   │   ├── VERSION
│       │   │   │   ├── addon/
│       │   │   │   │   ├── comment/
│       │   │   │   │   │   ├── comment.js
│       │   │   │   │   │   └── continuecomment.js
│       │   │   │   │   ├── dialog/
│       │   │   │   │   │   ├── dialog.css
│       │   │   │   │   │   └── dialog.js
│       │   │   │   │   ├── display/
│       │   │   │   │   │   ├── autorefresh.js
│       │   │   │   │   │   ├── fullscreen.css
│       │   │   │   │   │   ├── fullscreen.js
│       │   │   │   │   │   ├── panel.js
│       │   │   │   │   │   ├── placeholder.js
│       │   │   │   │   │   └── rulers.js
│       │   │   │   │   ├── edit/
│       │   │   │   │   │   ├── closebrackets.js
│       │   │   │   │   │   ├── closetag.js
│       │   │   │   │   │   ├── continuelist.js
│       │   │   │   │   │   ├── matchbrackets.js
│       │   │   │   │   │   ├── matchtags.js
│       │   │   │   │   │   └── trailingspace.js
│       │   │   │   │   ├── fold/
│       │   │   │   │   │   ├── brace-fold.js
│       │   │   │   │   │   ├── comment-fold.js
│       │   │   │   │   │   ├── foldcode.js
│       │   │   │   │   │   ├── foldgutter.css
│       │   │   │   │   │   ├── foldgutter.js
│       │   │   │   │   │   ├── indent-fold.js
│       │   │   │   │   │   ├── markdown-fold.js
│       │   │   │   │   │   └── xml-fold.js
│       │   │   │   │   ├── hint/
│       │   │   │   │   │   ├── anyword-hint.js
│       │   │   │   │   │   ├── css-hint.js
│       │   │   │   │   │   ├── html-hint.js
│       │   │   │   │   │   ├── javascript-hint.js
│       │   │   │   │   │   ├── show-hint.css
│       │   │   │   │   │   ├── show-hint.js
│       │   │   │   │   │   ├── sql-hint.js
│       │   │   │   │   │   └── xml-hint.js
│       │   │   │   │   ├── lint/
│       │   │   │   │   │   ├── coffeescript-lint.js
│       │   │   │   │   │   ├── css-lint.js
│       │   │   │   │   │   ├── html-lint.js
│       │   │   │   │   │   ├── javascript-lint.js
│       │   │   │   │   │   ├── json-lint.js
│       │   │   │   │   │   ├── lint.css
│       │   │   │   │   │   ├── lint.js
│       │   │   │   │   │   └── yaml-lint.js
│       │   │   │   │   ├── merge/
│       │   │   │   │   │   ├── merge.css
│       │   │   │   │   │   └── merge.js
│       │   │   │   │   ├── mode/
│       │   │   │   │   │   ├── loadmode.js
│       │   │   │   │   │   ├── multiplex.js
│       │   │   │   │   │   ├── multiplex_test.js
│       │   │   │   │   │   ├── overlay.js
│       │   │   │   │   │   └── simple.js
│       │   │   │   │   ├── runmode/
│       │   │   │   │   │   ├── colorize.js
│       │   │   │   │   │   ├── runmode-standalone.js
│       │   │   │   │   │   ├── runmode.js
│       │   │   │   │   │   └── runmode.node.js
│       │   │   │   │   ├── scroll/
│       │   │   │   │   │   ├── annotatescrollbar.js
│       │   │   │   │   │   ├── scrollpastend.js
│       │   │   │   │   │   ├── simplescrollbars.css
│       │   │   │   │   │   └── simplescrollbars.js
│       │   │   │   │   ├── search/
│       │   │   │   │   │   ├── jump-to-line.js
│       │   │   │   │   │   ├── match-highlighter.js
│       │   │   │   │   │   ├── matchesonscrollbar.css
│       │   │   │   │   │   ├── matchesonscrollbar.js
│       │   │   │   │   │   ├── search.js
│       │   │   │   │   │   └── searchcursor.js
│       │   │   │   │   ├── selection/
│       │   │   │   │   │   ├── active-line.js
│       │   │   │   │   │   ├── mark-selection.js
│       │   │   │   │   │   └── selection-pointer.js
│       │   │   │   │   ├── tern/
│       │   │   │   │   │   ├── tern.css
│       │   │   │   │   │   ├── tern.js
│       │   │   │   │   │   └── worker.js
│       │   │   │   │   └── wrap/
│       │   │   │   │       └── hardwrap.js
│       │   │   │   ├── lib/
│       │   │   │   │   ├── codemirror.css
│       │   │   │   │   └── codemirror.js
│       │   │   │   ├── mode/
│       │   │   │   │   ├── apl/
│       │   │   │   │   │   └── apl.js
│       │   │   │   │   ├── asciiarmor/
│       │   │   │   │   │   └── asciiarmor.js
│       │   │   │   │   ├── asn.1/
│       │   │   │   │   │   └── asn.1.js
│       │   │   │   │   ├── asterisk/
│       │   │   │   │   │   └── asterisk.js
│       │   │   │   │   ├── brainfuck/
│       │   │   │   │   │   └── brainfuck.js
│       │   │   │   │   ├── clike/
│       │   │   │   │   │   └── clike.js
│       │   │   │   │   ├── clojure/
│       │   │   │   │   │   └── clojure.js
│       │   │   │   │   ├── cmake/
│       │   │   │   │   │   └── cmake.js
│       │   │   │   │   ├── cobol/
│       │   │   │   │   │   └── cobol.js
│       │   │   │   │   ├── coffeescript/
│       │   │   │   │   │   └── coffeescript.js
│       │   │   │   │   ├── commonlisp/
│       │   │   │   │   │   └── commonlisp.js
│       │   │   │   │   ├── crystal/
│       │   │   │   │   │   └── crystal.js
│       │   │   │   │   ├── css/
│       │   │   │   │   │   └── css.js
│       │   │   │   │   ├── cypher/
│       │   │   │   │   │   └── cypher.js
│       │   │   │   │   ├── d/
│       │   │   │   │   │   └── d.js
│       │   │   │   │   ├── dart/
│       │   │   │   │   │   └── dart.js
│       │   │   │   │   ├── diff/
│       │   │   │   │   │   └── diff.js
│       │   │   │   │   ├── django/
│       │   │   │   │   │   └── django.js
│       │   │   │   │   ├── dockerfile/
│       │   │   │   │   │   └── dockerfile.js
│       │   │   │   │   ├── dtd/
│       │   │   │   │   │   └── dtd.js
│       │   │   │   │   ├── dylan/
│       │   │   │   │   │   └── dylan.js
│       │   │   │   │   ├── ebnf/
│       │   │   │   │   │   └── ebnf.js
│       │   │   │   │   ├── ecl/
│       │   │   │   │   │   └── ecl.js
│       │   │   │   │   ├── eiffel/
│       │   │   │   │   │   └── eiffel.js
│       │   │   │   │   ├── elm/
│       │   │   │   │   │   └── elm.js
│       │   │   │   │   ├── erlang/
│       │   │   │   │   │   └── erlang.js
│       │   │   │   │   ├── factor/
│       │   │   │   │   │   └── factor.js
│       │   │   │   │   ├── fcl/
│       │   │   │   │   │   └── fcl.js
│       │   │   │   │   ├── forth/
│       │   │   │   │   │   └── forth.js
│       │   │   │   │   ├── fortran/
│       │   │   │   │   │   └── fortran.js
│       │   │   │   │   ├── gas/
│       │   │   │   │   │   └── gas.js
│       │   │   │   │   ├── gfm/
│       │   │   │   │   │   └── gfm.js
│       │   │   │   │   ├── gherkin/
│       │   │   │   │   │   └── gherkin.js
│       │   │   │   │   ├── go/
│       │   │   │   │   │   └── go.js
│       │   │   │   │   ├── groovy/
│       │   │   │   │   │   └── groovy.js
│       │   │   │   │   ├── haml/
│       │   │   │   │   │   └── haml.js
│       │   │   │   │   ├── handlebars/
│       │   │   │   │   │   └── handlebars.js
│       │   │   │   │   ├── haskell/
│       │   │   │   │   │   └── haskell.js
│       │   │   │   │   ├── haskell-literate/
│       │   │   │   │   │   └── haskell-literate.js
│       │   │   │   │   ├── haxe/
│       │   │   │   │   │   └── haxe.js
│       │   │   │   │   ├── htmlembedded/
│       │   │   │   │   │   └── htmlembedded.js
│       │   │   │   │   ├── htmlmixed/
│       │   │   │   │   │   └── htmlmixed.js
│       │   │   │   │   ├── http/
│       │   │   │   │   │   └── http.js
│       │   │   │   │   ├── idl/
│       │   │   │   │   │   └── idl.js
│       │   │   │   │   ├── javascript/
│       │   │   │   │   │   └── javascript.js
│       │   │   │   │   ├── jinja2/
│       │   │   │   │   │   └── jinja2.js
│       │   │   │   │   ├── jsx/
│       │   │   │   │   │   └── jsx.js
│       │   │   │   │   ├── julia/
│       │   │   │   │   │   └── julia.js
│       │   │   │   │   ├── livescript/
│       │   │   │   │   │   └── livescript.js
│       │   │   │   │   ├── lua/
│       │   │   │   │   │   └── lua.js
│       │   │   │   │   ├── markdown/
│       │   │   │   │   │   └── markdown.js
│       │   │   │   │   ├── mathematica/
│       │   │   │   │   │   └── mathematica.js
│       │   │   │   │   ├── mbox/
│       │   │   │   │   │   └── mbox.js
│       │   │   │   │   ├── meta.js
│       │   │   │   │   ├── mirc/
│       │   │   │   │   │   └── mirc.js
│       │   │   │   │   ├── mllike/
│       │   │   │   │   │   └── mllike.js
│       │   │   │   │   ├── modelica/
│       │   │   │   │   │   └── modelica.js
│       │   │   │   │   ├── mscgen/
│       │   │   │   │   │   └── mscgen.js
│       │   │   │   │   ├── mumps/
│       │   │   │   │   │   └── mumps.js
│       │   │   │   │   ├── nginx/
│       │   │   │   │   │   └── nginx.js
│       │   │   │   │   ├── nsis/
│       │   │   │   │   │   └── nsis.js
│       │   │   │   │   ├── ntriples/
│       │   │   │   │   │   └── ntriples.js
│       │   │   │   │   ├── octave/
│       │   │   │   │   │   └── octave.js
│       │   │   │   │   ├── oz/
│       │   │   │   │   │   └── oz.js
│       │   │   │   │   ├── pascal/
│       │   │   │   │   │   └── pascal.js
│       │   │   │   │   ├── pegjs/
│       │   │   │   │   │   └── pegjs.js
│       │   │   │   │   ├── perl/
│       │   │   │   │   │   └── perl.js
│       │   │   │   │   ├── php/
│       │   │   │   │   │   └── php.js
│       │   │   │   │   ├── pig/
│       │   │   │   │   │   └── pig.js
│       │   │   │   │   ├── powershell/
│       │   │   │   │   │   └── powershell.js
│       │   │   │   │   ├── properties/
│       │   │   │   │   │   └── properties.js
│       │   │   │   │   ├── protobuf/
│       │   │   │   │   │   └── protobuf.js
│       │   │   │   │   ├── pug/
│       │   │   │   │   │   └── pug.js
│       │   │   │   │   ├── puppet/
│       │   │   │   │   │   └── puppet.js
│       │   │   │   │   ├── python/
│       │   │   │   │   │   └── python.js
│       │   │   │   │   ├── q/
│       │   │   │   │   │   └── q.js
│       │   │   │   │   ├── r/
│       │   │   │   │   │   └── r.js
│       │   │   │   │   ├── rpm/
│       │   │   │   │   │   └── rpm.js
│       │   │   │   │   ├── rst/
│       │   │   │   │   │   └── rst.js
│       │   │   │   │   ├── ruby/
│       │   │   │   │   │   └── ruby.js
│       │   │   │   │   ├── rust/
│       │   │   │   │   │   └── rust.js
│       │   │   │   │   ├── sas/
│       │   │   │   │   │   └── sas.js
│       │   │   │   │   ├── sass/
│       │   │   │   │   │   └── sass.js
│       │   │   │   │   ├── scheme/
│       │   │   │   │   │   └── scheme.js
│       │   │   │   │   ├── shell/
│       │   │   │   │   │   └── shell.js
│       │   │   │   │   ├── sieve/
│       │   │   │   │   │   └── sieve.js
│       │   │   │   │   ├── slim/
│       │   │   │   │   │   └── slim.js
│       │   │   │   │   ├── smalltalk/
│       │   │   │   │   │   └── smalltalk.js
│       │   │   │   │   ├── smarty/
│       │   │   │   │   │   └── smarty.js
│       │   │   │   │   ├── solr/
│       │   │   │   │   │   └── solr.js
│       │   │   │   │   ├── soy/
│       │   │   │   │   │   └── soy.js
│       │   │   │   │   ├── sparql/
│       │   │   │   │   │   └── sparql.js
│       │   │   │   │   ├── spreadsheet/
│       │   │   │   │   │   └── spreadsheet.js
│       │   │   │   │   ├── sql/
│       │   │   │   │   │   └── sql.js
│       │   │   │   │   ├── stex/
│       │   │   │   │   │   └── stex.js
│       │   │   │   │   ├── stylus/
│       │   │   │   │   │   └── stylus.js
│       │   │   │   │   ├── swift/
│       │   │   │   │   │   └── swift.js
│       │   │   │   │   ├── tcl/
│       │   │   │   │   │   └── tcl.js
│       │   │   │   │   ├── textile/
│       │   │   │   │   │   └── textile.js
│       │   │   │   │   ├── tiddlywiki/
│       │   │   │   │   │   ├── tiddlywiki.css
│       │   │   │   │   │   └── tiddlywiki.js
│       │   │   │   │   ├── tiki/
│       │   │   │   │   │   ├── tiki.css
│       │   │   │   │   │   └── tiki.js
│       │   │   │   │   ├── toml/
│       │   │   │   │   │   └── toml.js
│       │   │   │   │   ├── tornado/
│       │   │   │   │   │   └── tornado.js
│       │   │   │   │   ├── troff/
│       │   │   │   │   │   └── troff.js
│       │   │   │   │   ├── ttcn/
│       │   │   │   │   │   └── ttcn.js
│       │   │   │   │   ├── ttcn-cfg/
│       │   │   │   │   │   └── ttcn-cfg.js
│       │   │   │   │   ├── turtle/
│       │   │   │   │   │   └── turtle.js
│       │   │   │   │   ├── twig/
│       │   │   │   │   │   └── twig.js
│       │   │   │   │   ├── vb/
│       │   │   │   │   │   └── vb.js
│       │   │   │   │   ├── vbscript/
│       │   │   │   │   │   └── vbscript.js
│       │   │   │   │   ├── velocity/
│       │   │   │   │   │   └── velocity.js
│       │   │   │   │   ├── verilog/
│       │   │   │   │   │   └── verilog.js
│       │   │   │   │   ├── vhdl/
│       │   │   │   │   │   └── vhdl.js
│       │   │   │   │   ├── vue/
│       │   │   │   │   │   └── vue.js
│       │   │   │   │   ├── webidl/
│       │   │   │   │   │   └── webidl.js
│       │   │   │   │   ├── xml/
│       │   │   │   │   │   └── xml.js
│       │   │   │   │   ├── xquery/
│       │   │   │   │   │   └── xquery.js
│       │   │   │   │   ├── yacas/
│       │   │   │   │   │   └── yacas.js
│       │   │   │   │   ├── yaml/
│       │   │   │   │   │   └── yaml.js
│       │   │   │   │   ├── yaml-frontmatter/
│       │   │   │   │   │   └── yaml-frontmatter.js
│       │   │   │   │   └── z80/
│       │   │   │   │       └── z80.js
│       │   │   │   └── theme/
│       │   │   │       ├── 3024-day.css
│       │   │   │       ├── 3024-night.css
│       │   │   │       ├── abcdef.css
│       │   │   │       ├── ambiance-mobile.css
│       │   │   │       ├── ambiance.css
│       │   │   │       ├── base16-dark.css
│       │   │   │       ├── base16-light.css
│       │   │   │       ├── bespin.css
│       │   │   │       ├── blackboard.css
│       │   │   │       ├── cobalt.css
│       │   │   │       ├── colorforth.css
│       │   │   │       ├── dracula.css
│       │   │   │       ├── eclipse.css
│       │   │   │       ├── elegant.css
│       │   │   │       ├── erlang-dark.css
│       │   │   │       ├── hopscotch.css
│       │   │   │       ├── icecoder.css
│       │   │   │       ├── isotope.css
│       │   │   │       ├── lesser-dark.css
│       │   │   │       ├── liquibyte.css
│       │   │   │       ├── material.css
│       │   │   │       ├── mbo.css
│       │   │   │       ├── mdn-like.css
│       │   │   │       ├── midnight.css
│       │   │   │       ├── monokai.css
│       │   │   │       ├── neat.css
│       │   │   │       ├── neo.css
│       │   │   │       ├── night.css
│       │   │   │       ├── panda-syntax.css
│       │   │   │       ├── paraiso-dark.css
│       │   │   │       ├── paraiso-light.css
│       │   │   │       ├── pastel-on-dark.css
│       │   │   │       ├── railscasts.css
│       │   │   │       ├── rubyblue.css
│       │   │   │       ├── seti.css
│       │   │   │       ├── solarized.css
│       │   │   │       ├── the-matrix.css
│       │   │   │       ├── tomorrow-night-bright.css
│       │   │   │       ├── tomorrow-night-eighties.css
│       │   │   │       ├── ttcn.css
│       │   │   │       ├── twilight.css
│       │   │   │       ├── vibrant-ink.css
│       │   │   │       ├── xq-dark.css
│       │   │   │       ├── xq-light.css
│       │   │   │       ├── yeti.css
│       │   │   │       └── zenburn.css
│       │   │   ├── github.css
│       │   │   ├── intercept.js
│       │   │   ├── polyfills.js
│       │   │   ├── source-editor.css
│       │   │   ├── source-editor.html
│       │   │   └── source-editor.js
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── github/
│       │   │           └── pockethub/
│       │   │               └── android/
│       │   │                   ├── ApplicationComponent.java
│       │   │                   ├── ApplicationModule.kt
│       │   │                   ├── GitHubModule.java
│       │   │                   ├── Intents.java
│       │   │                   ├── PocketHub.java
│       │   │                   ├── PocketHubModule.java
│       │   │                   ├── RequestCodes.java
│       │   │                   ├── RequestReader.java
│       │   │                   ├── RequestWriter.java
│       │   │                   ├── ResultCodes.java
│       │   │                   ├── accounts/
│       │   │                   │   ├── AccountAuthenticator.java
│       │   │                   │   ├── AccountAuthenticatorService.java
│       │   │                   │   ├── AccountUtils.java
│       │   │                   │   ├── AccountsHelper.java
│       │   │                   │   ├── LoginActivity.java
│       │   │                   │   └── LoginWebViewActivity.java
│       │   │                   ├── core/
│       │   │                   │   ├── GitHubRequest.kt
│       │   │                   │   ├── ItemStore.java
│       │   │                   │   ├── OnLoadListener.java
│       │   │                   │   ├── code/
│       │   │                   │   │   ├── FullTree.java
│       │   │                   │   │   └── RefreshTreeTask.java
│       │   │                   │   ├── commit/
│       │   │                   │   │   ├── CommitMatch.kt
│       │   │                   │   │   ├── CommitStore.java
│       │   │                   │   │   ├── CommitUriMatcher.java
│       │   │                   │   │   ├── CommitUtils.kt
│       │   │                   │   │   ├── FullCommit.java
│       │   │                   │   │   ├── FullCommitFile.java
│       │   │                   │   │   └── RefreshCommitTask.java
│       │   │                   │   ├── gist/
│       │   │                   │   │   ├── FullGist.kt
│       │   │                   │   │   ├── GistEventMatcher.java
│       │   │                   │   │   ├── GistStore.java
│       │   │                   │   │   ├── GistUriMatcher.java
│       │   │                   │   │   └── RefreshGistTask.java
│       │   │                   │   ├── issue/
│       │   │                   │   │   ├── FullIssue.kt
│       │   │                   │   │   ├── IssueEventMatcher.java
│       │   │                   │   │   ├── IssueFilter.java
│       │   │                   │   │   ├── IssueStore.java
│       │   │                   │   │   ├── IssueUriMatcher.java
│       │   │                   │   │   ├── IssueUtils.java
│       │   │                   │   │   └── RefreshIssueTask.java
│       │   │                   │   ├── ref/
│       │   │                   │   │   └── RefUtils.java
│       │   │                   │   ├── repo/
│       │   │                   │   │   ├── RepositoryEventMatcher.java
│       │   │                   │   │   ├── RepositoryUriMatcher.java
│       │   │                   │   │   └── RepositoryUtils.kt
│       │   │                   │   └── user/
│       │   │                   │       ├── UserComparator.java
│       │   │                   │       ├── UserEventMatcher.java
│       │   │                   │       └── UserUriMatcher.java
│       │   │                   ├── dagger/
│       │   │                   │   ├── ActivityBuilder.java
│       │   │                   │   ├── ActivityScope.java
│       │   │                   │   ├── CommitCompareViewFragmentProvider.java
│       │   │                   │   ├── CommitViewFragmentProvider.java
│       │   │                   │   ├── CreateCommentFragmentProvider.java
│       │   │                   │   ├── DialogFragmentBuilder.java
│       │   │                   │   ├── FiltersViewFragmentProvider.java
│       │   │                   │   ├── GistFilesViewFragmentProvider.java
│       │   │                   │   ├── GistsPagerFragmentProvider.java
│       │   │                   │   ├── GistsViewFragmentProvider.java
│       │   │                   │   ├── HomePagerFragmentProvider.java
│       │   │                   │   ├── IssueBrowseFragmentProvider.java
│       │   │                   │   ├── IssueDashboardPagerFragmentProvider.java
│       │   │                   │   ├── IssueSearchFragmentProvider.java
│       │   │                   │   ├── IssuesViewFragmentProvider.java
│       │   │                   │   ├── MainFragmentProvider.java
│       │   │                   │   ├── NotificationFragmentProvider.java
│       │   │                   │   ├── RepositoryContributorsFragmentProvider.java
│       │   │                   │   ├── RepositoryViewFragmentProvider.java
│       │   │                   │   ├── SearchActivityFragmentProvider.java
│       │   │                   │   ├── ServiceBuilder.java
│       │   │                   │   └── UserViewFragmentProvider.java
│       │   │                   ├── markwon/
│       │   │                   │   ├── AlignHandler.java
│       │   │                   │   ├── AsyncDrawableSchedulerPlugin.java
│       │   │                   │   ├── FontResolver.java
│       │   │                   │   ├── GifAwareGlideStore.java
│       │   │                   │   ├── MarkwonUtils.java
│       │   │                   │   ├── SpanLinkPlugin.java
│       │   │                   │   ├── SvgDecoder.java
│       │   │                   │   ├── SvgDrawableTranscoder.java
│       │   │                   │   └── SvgModule.java
│       │   │                   ├── persistence/
│       │   │                   │   ├── AccountDataManager.java
│       │   │                   │   ├── DatabaseCache.kt
│       │   │                   │   ├── OrganizationRepositories.kt
│       │   │                   │   ├── OrganizationRepositoriesFactory.java
│       │   │                   │   ├── Organizations.kt
│       │   │                   │   └── PersistableResource.java
│       │   │                   ├── rx/
│       │   │                   │   ├── AutoDisposeUtils.java
│       │   │                   │   └── RxProgress.java
│       │   │                   ├── sync/
│       │   │                   │   ├── ContentProviderAdapter.java
│       │   │                   │   ├── SyncAdapter.java
│       │   │                   │   ├── SyncAdapterService.java
│       │   │                   │   └── SyncCampaign.java
│       │   │                   ├── ui/
│       │   │                   │   ├── ConfirmDialogFragment.java
│       │   │                   │   ├── DialogResultListener.java
│       │   │                   │   ├── FragmentProvider.java
│       │   │                   │   ├── MainActivity.kt
│       │   │                   │   ├── NewsFragment.kt
│       │   │                   │   ├── SingleChoiceDialogFragment.java
│       │   │                   │   ├── TextWatcherAdapter.java
│       │   │                   │   ├── ViewPager.java
│       │   │                   │   ├── WebView.java
│       │   │                   │   ├── base/
│       │   │                   │   │   ├── AccountAuthenticatorAppCompatActivity.java
│       │   │                   │   │   ├── BaseActivity.kt
│       │   │                   │   │   ├── BaseFragment.kt
│       │   │                   │   │   ├── DialogFragmentHelper.java
│       │   │                   │   │   ├── FragmentPagerAdapter.java
│       │   │                   │   │   └── FragmentStatePagerAdapter.java
│       │   │                   │   ├── code/
│       │   │                   │   │   └── RepositoryCodeFragment.kt
│       │   │                   │   ├── comment/
│       │   │                   │   │   ├── CommentPreviewPagerAdapter.java
│       │   │                   │   │   ├── CreateCommentActivity.kt
│       │   │                   │   │   ├── DeleteCommentListener.java
│       │   │                   │   │   ├── EditCommentListener.java
│       │   │                   │   │   ├── RawCommentFragment.kt
│       │   │                   │   │   └── RenderedCommentFragment.kt
│       │   │                   │   ├── commit/
│       │   │                   │   │   ├── CommitCompareListFragment.kt
│       │   │                   │   │   ├── CommitCompareViewActivity.java
│       │   │                   │   │   ├── CommitDiffListFragment.kt
│       │   │                   │   │   ├── CommitFileComparator.java
│       │   │                   │   │   ├── CommitFileViewActivity.kt
│       │   │                   │   │   ├── CommitListFragment.kt
│       │   │                   │   │   ├── CommitPagerAdapter.java
│       │   │                   │   │   ├── CommitViewActivity.kt
│       │   │                   │   │   ├── CreateCommentActivity.java
│       │   │                   │   │   └── DiffStyler.java
│       │   │                   │   ├── gist/
│       │   │                   │   │   ├── CreateCommentActivity.java
│       │   │                   │   │   ├── CreateGistActivity.kt
│       │   │                   │   │   ├── EditCommentActivity.java
│       │   │                   │   │   ├── GistFileFragment.kt
│       │   │                   │   │   ├── GistFilesPagerAdapter.java
│       │   │                   │   │   ├── GistFilesViewActivity.kt
│       │   │                   │   │   ├── GistFragment.kt
│       │   │                   │   │   ├── GistQueriesPagerAdapter.java
│       │   │                   │   │   ├── GistsFragment.kt
│       │   │                   │   │   ├── GistsPagerAdapter.java
│       │   │                   │   │   ├── GistsPagerFragment.kt
│       │   │                   │   │   ├── GistsViewActivity.kt
│       │   │                   │   │   ├── MyGistsFragment.java
│       │   │                   │   │   ├── PublicGistsFragment.java
│       │   │                   │   │   └── StarredGistsFragment.java
│       │   │                   │   ├── helpers/
│       │   │                   │   │   ├── ItemListHandler.kt
│       │   │                   │   │   ├── ListFetcher.kt
│       │   │                   │   │   ├── PagedListFetcher.kt
│       │   │                   │   │   ├── PagedScrollListener.kt
│       │   │                   │   │   ├── PagerHandler.kt
│       │   │                   │   │   └── ResourceLoadingIndicator.kt
│       │   │                   │   ├── issue/
│       │   │                   │   │   ├── AssigneeDialog.java
│       │   │                   │   │   ├── AssigneeDialogFragment.java
│       │   │                   │   │   ├── CreateCommentActivity.java
│       │   │                   │   │   ├── DashboardIssueFragment.kt
│       │   │                   │   │   ├── EditAssigneeTask.java
│       │   │                   │   │   ├── EditCommentActivity.java
│       │   │                   │   │   ├── EditIssueActivity.kt
│       │   │                   │   │   ├── EditIssuesFilterActivity.kt
│       │   │                   │   │   ├── EditLabelsTask.java
│       │   │                   │   │   ├── EditMilestoneTask.java
│       │   │                   │   │   ├── EditStateTask.java
│       │   │                   │   │   ├── FilterListFragment.kt
│       │   │                   │   │   ├── FiltersViewActivity.java
│       │   │                   │   │   ├── IssueBrowseActivity.java
│       │   │                   │   │   ├── IssueDashboardPagerAdapter.java
│       │   │                   │   │   ├── IssueDashboardPagerFragment.kt
│       │   │                   │   │   ├── IssueFragment.kt
│       │   │                   │   │   ├── IssueSearchActivity.java
│       │   │                   │   │   ├── IssueSearchSuggestionsProvider.java
│       │   │                   │   │   ├── IssuesFragment.kt
│       │   │                   │   │   ├── IssuesPagerAdapter.java
│       │   │                   │   │   ├── IssuesViewActivity.kt
│       │   │                   │   │   ├── LabelDrawableSpan.kt
│       │   │                   │   │   ├── LabelsDialog.java
│       │   │                   │   │   ├── LabelsDialogFragment.java
│       │   │                   │   │   ├── MilestoneDialog.java
│       │   │                   │   │   ├── MilestoneDialogFragment.kt
│       │   │                   │   │   └── SearchIssueListFragment.kt
│       │   │                   │   ├── item/
│       │   │                   │   │   ├── ContributorItem.kt
│       │   │                   │   │   ├── GitHubCommentItem.kt
│       │   │                   │   │   ├── LoadingItem.kt
│       │   │                   │   │   ├── TextItem.kt
│       │   │                   │   │   ├── UserItem.kt
│       │   │                   │   │   ├── code/
│       │   │                   │   │   │   ├── BlobItem.kt
│       │   │                   │   │   │   ├── FolderItem.kt
│       │   │                   │   │   │   └── PathHeaderItem.kt
│       │   │                   │   │   ├── commit/
│       │   │                   │   │   │   ├── CommitCommentItem.kt
│       │   │                   │   │   │   ├── CommitFileHeaderItem.kt
│       │   │                   │   │   │   ├── CommitFileLineItem.kt
│       │   │                   │   │   │   ├── CommitHeaderItem.kt
│       │   │                   │   │   │   ├── CommitItem.kt
│       │   │                   │   │   │   └── CommitParentItem.kt
│       │   │                   │   │   ├── dialog/
│       │   │                   │   │   │   ├── AssigneeDialogItem.kt
│       │   │                   │   │   │   ├── LabelDialogItem.kt
│       │   │                   │   │   │   ├── MilestoneDialogItem.kt
│       │   │                   │   │   │   └── RefDialogItem.kt
│       │   │                   │   │   ├── gist/
│       │   │                   │   │   │   ├── GistFileItem.kt
│       │   │                   │   │   │   ├── GistHeaderItem.kt
│       │   │                   │   │   │   └── GistItem.kt
│       │   │                   │   │   ├── issue/
│       │   │                   │   │   │   ├── IssueDashboardItem.kt
│       │   │                   │   │   │   ├── IssueEventItem.kt
│       │   │                   │   │   │   ├── IssueFilterHeaderItem.kt
│       │   │                   │   │   │   ├── IssueFilterItem.kt
│       │   │                   │   │   │   ├── IssueHeaderItem.kt
│       │   │                   │   │   │   └── IssueItem.kt
│       │   │                   │   │   ├── news/
│       │   │                   │   │   │   ├── CommitCommentEventItem.kt
│       │   │                   │   │   │   ├── CreateEventItem.kt
│       │   │                   │   │   │   ├── DeleteEventItem.kt
│       │   │                   │   │   │   ├── FollowEventItem.kt
│       │   │                   │   │   │   ├── ForkEventItem.kt
│       │   │                   │   │   │   ├── GistEventItem.kt
│       │   │                   │   │   │   ├── GollumEventItem.kt
│       │   │                   │   │   │   ├── IssueCommentEventItem.kt
│       │   │                   │   │   │   ├── IssuesEventItem.kt
│       │   │                   │   │   │   ├── MemberEventItem.kt
│       │   │                   │   │   │   ├── NewsItem.kt
│       │   │                   │   │   │   ├── PublicEventItem.kt
│       │   │                   │   │   │   ├── PullRequestEventItem.kt
│       │   │                   │   │   │   ├── PullRequestReviewCommentEventItem.kt
│       │   │                   │   │   │   ├── PushEventItem.kt
│       │   │                   │   │   │   ├── ReleaseEventItem.kt
│       │   │                   │   │   │   ├── TeamAddEventItem.kt
│       │   │                   │   │   │   └── WatchEventItem.kt
│       │   │                   │   │   ├── notification/
│       │   │                   │   │   │   ├── NotificationHeaderItem.kt
│       │   │                   │   │   │   └── NotificationItem.kt
│       │   │                   │   │   └── repository/
│       │   │                   │   │       ├── RepositoryHeaderItem.kt
│       │   │                   │   │       └── RepositoryItem.kt
│       │   │                   │   ├── notification/
│       │   │                   │   │   ├── NotificationActivity.kt
│       │   │                   │   │   ├── NotificationListFragment.kt
│       │   │                   │   │   ├── NotificationPagerAdapter.java
│       │   │                   │   │   └── NotificationReadListener.java
│       │   │                   │   ├── ref/
│       │   │                   │   │   ├── BranchFileViewActivity.kt
│       │   │                   │   │   ├── RefDialog.java
│       │   │                   │   │   └── RefDialogFragment.java
│       │   │                   │   ├── repo/
│       │   │                   │   │   ├── RecentRepositories.java
│       │   │                   │   │   ├── RepositoryContributorsActivity.java
│       │   │                   │   │   ├── RepositoryContributorsFragment.kt
│       │   │                   │   │   ├── RepositoryListFragment.kt
│       │   │                   │   │   ├── RepositoryNewsFragment.java
│       │   │                   │   │   ├── RepositoryPagerAdapter.java
│       │   │                   │   │   ├── RepositoryReadmeFragment.kt
│       │   │                   │   │   ├── RepositoryViewActivity.kt
│       │   │                   │   │   └── UserRepositoryListFragment.kt
│       │   │                   │   ├── search/
│       │   │                   │   │   ├── RepositorySearchSuggestionsProvider.java
│       │   │                   │   │   ├── SearchActivity.kt
│       │   │                   │   │   ├── SearchPagerAdapter.java
│       │   │                   │   │   ├── SearchRepositoryListFragment.kt
│       │   │                   │   │   └── SearchUserListFragment.kt
│       │   │                   │   ├── user/
│       │   │                   │   │   ├── FollowersFragment.kt
│       │   │                   │   │   ├── FollowingFragment.kt
│       │   │                   │   │   ├── HomePagerAdapter.kt
│       │   │                   │   │   ├── HomePagerFragment.kt
│       │   │                   │   │   ├── MembersFragment.kt
│       │   │                   │   │   ├── MyFollowersFragment.java
│       │   │                   │   │   ├── MyFollowingFragment.java
│       │   │                   │   │   ├── OrganizationNewsFragment.java
│       │   │                   │   │   ├── OrganizationSelectionListener.java
│       │   │                   │   │   ├── OrganizationSelectionProvider.java
│       │   │                   │   │   ├── PagedUserFragment.kt
│       │   │                   │   │   ├── UriLauncherActivity.java
│       │   │                   │   │   ├── UserCreatedNewsFragment.java
│       │   │                   │   │   ├── UserFollowersFragment.java
│       │   │                   │   │   ├── UserFollowingFragment.java
│       │   │                   │   │   ├── UserNewsFragment.java
│       │   │                   │   │   ├── UserPagerAdapter.java
│       │   │                   │   │   ├── UserReceivedNewsFragment.java
│       │   │                   │   │   └── UserViewActivity.kt
│       │   │                   │   └── view/
│       │   │                   │       ├── LinkTextView.kt
│       │   │                   │       └── OcticonTextView.java
│       │   │                   └── util/
│       │   │                       ├── AvatarLoader.kt
│       │   │                       ├── ConvertUtils.java
│       │   │                       ├── GravatarUtils.java
│       │   │                       ├── HtmlUtils.java
│       │   │                       ├── HttpImageGetter.java
│       │   │                       ├── ImageBinPoster.kt
│       │   │                       ├── ImageUtils.java
│       │   │                       ├── InfoUtils.java
│       │   │                       ├── MarkdownLoader.java
│       │   │                       ├── MarkdownUtils.java
│       │   │                       ├── PermissionsUtils.java
│       │   │                       ├── PreferenceUtils.java
│       │   │                       ├── RxPageUtil.java
│       │   │                       ├── ServiceUtils.java
│       │   │                       ├── ShareUtils.java
│       │   │                       ├── SourceEditor.java
│       │   │                       ├── TimeUtils.java
│       │   │                       ├── ToastUtils.java
│       │   │                       └── android/
│       │   │                           └── text/
│       │   │                               └── SpannableStringBuilder.kt
│       │   ├── res/
│       │   │   ├── color/
│       │   │   │   └── color_navigation_view_icon.xml
│       │   │   ├── drawable/
│       │   │   │   ├── actionbar_spinner.xml
│       │   │   │   ├── diff_add_background.xml
│       │   │   │   ├── diff_marker_background.xml
│       │   │   │   ├── diff_remove_background.xml
│       │   │   │   ├── edit_text_background.xml
│       │   │   │   ├── edit_text_cursor.xml
│       │   │   │   ├── footer_selector.xml
│       │   │   │   ├── ic_add_a_photo.xml
│       │   │   │   ├── ic_notifications_black.xml
│       │   │   │   ├── ic_search_white_24dp.xml
│       │   │   │   ├── inset_background.xml
│       │   │   │   ├── label_background.xml
│       │   │   │   ├── list_divider_5dp.xml
│       │   │   │   ├── list_item_background.xml
│       │   │   │   ├── milestone_background.xml
│       │   │   │   ├── milestone_closed_background.xml
│       │   │   │   ├── section_background.xml
│       │   │   │   ├── section_selected_background.xml
│       │   │   │   └── section_selector.xml
│       │   │   ├── layout/
│       │   │   │   ├── activity_commit_file_view.xml
│       │   │   │   ├── activity_gist_create.xml
│       │   │   │   ├── activity_issue_edit.xml
│       │   │   │   ├── activity_issue_search.xml
│       │   │   │   ├── activity_issues_filter_edit.xml
│       │   │   │   ├── activity_main.xml
│       │   │   │   ├── activity_pager.xml
│       │   │   │   ├── activity_pager_with_title.xml
│       │   │   │   ├── activity_repo_contributors.xml
│       │   │   │   ├── activity_repo_issue_list.xml
│       │   │   │   ├── adapter_fenced_code_block.xml
│       │   │   │   ├── blob_item.xml
│       │   │   │   ├── collaborator_item.xml
│       │   │   │   ├── comment.xml
│       │   │   │   ├── comment_event.xml
│       │   │   │   ├── comment_event_item.xml
│       │   │   │   ├── comment_item.xml
│       │   │   │   ├── commit_comment_item.xml
│       │   │   │   ├── commit_compare.xml
│       │   │   │   ├── commit_compare_file_details_header.xml
│       │   │   │   ├── commit_details_header.xml
│       │   │   │   ├── commit_diff_file_header.xml
│       │   │   │   ├── commit_diff_line.xml
│       │   │   │   ├── commit_file_details_header.xml
│       │   │   │   ├── commit_header.xml
│       │   │   │   ├── commit_item.xml
│       │   │   │   ├── commit_parent_item.xml
│       │   │   │   ├── contributor_item.xml
│       │   │   │   ├── dashboard_issue_item.xml
│       │   │   │   ├── diff_comment_item.xml
│       │   │   │   ├── diff_line_dialog.xml
│       │   │   │   ├── drawer_header.xml
│       │   │   │   ├── folder_item.xml
│       │   │   │   ├── fragment_comment_create.xml
│       │   │   │   ├── fragment_comment_list.xml
│       │   │   │   ├── fragment_comment_preview.xml
│       │   │   │   ├── fragment_commit_diff_list.xml
│       │   │   │   ├── fragment_commit_list.xml
│       │   │   │   ├── fragment_gist_file_view.xml
│       │   │   │   ├── fragment_item_list.xml
│       │   │   │   ├── fragment_repo_code.xml
│       │   │   │   ├── gist_file_item.xml
│       │   │   │   ├── gist_header.xml
│       │   │   │   ├── gist_item.xml
│       │   │   │   ├── issue_details.xml
│       │   │   │   ├── issue_header.xml
│       │   │   │   ├── issue_number.xml
│       │   │   │   ├── issues_filter_details.xml
│       │   │   │   ├── issues_filter_header.xml
│       │   │   │   ├── issues_filter_item.xml
│       │   │   │   ├── issues_filter_list.xml
│       │   │   │   ├── label_item.xml
│       │   │   │   ├── loading_item.xml
│       │   │   │   ├── login.xml
│       │   │   │   ├── markwon_adapter.xml
│       │   │   │   ├── markwon_adapter_test.xml
│       │   │   │   ├── markwon_table_block.xml
│       │   │   │   ├── markwon_table_cell.xml
│       │   │   │   ├── milestone.xml
│       │   │   │   ├── milestone_item.xml
│       │   │   │   ├── news_item.xml
│       │   │   │   ├── notification_item.xml
│       │   │   │   ├── notification_item_header.xml
│       │   │   │   ├── pager_with_tabs.xml
│       │   │   │   ├── path_item.xml
│       │   │   │   ├── ref_footer.xml
│       │   │   │   ├── ref_item.xml
│       │   │   │   ├── repo_details.xml
│       │   │   │   ├── repo_dialog.xml
│       │   │   │   ├── repo_header_item.xml
│       │   │   │   ├── repo_issue_item.xml
│       │   │   │   ├── tabbed_progress_pager.xml
│       │   │   │   ├── user_item.xml
│       │   │   │   └── user_repo_item.xml
│       │   │   ├── menu/
│       │   │   │   ├── activity_comment.xml
│       │   │   │   ├── activity_create_gist.xml
│       │   │   │   ├── activity_file_view.xml
│       │   │   │   ├── activity_issue_edit.xml
│       │   │   │   ├── activity_issue_filter.xml
│       │   │   │   ├── activity_login.xml
│       │   │   │   ├── activity_main.xml
│       │   │   │   ├── activity_repository.xml
│       │   │   │   ├── activity_search.xml
│       │   │   │   ├── activity_user_follow.xml
│       │   │   │   ├── fragment_code_view.xml
│       │   │   │   ├── fragment_commit_view.xml
│       │   │   │   ├── fragment_gist_view.xml
│       │   │   │   ├── fragment_gists.xml
│       │   │   │   ├── fragment_issue_view.xml
│       │   │   │   ├── fragment_issues.xml
│       │   │   │   ├── fragment_refresh.xml
│       │   │   │   └── navigation.xml
│       │   │   ├── values/
│       │   │   │   ├── colors.xml
│       │   │   │   ├── dimens.xml
│       │   │   │   ├── strings.xml
│       │   │   │   ├── styles.xml
│       │   │   │   ├── theme.xml
│       │   │   │   └── typeface.xml
│       │   │   ├── values-bg/
│       │   │   │   └── strings.xml
│       │   │   ├── values-cs/
│       │   │   │   └── strings.xml
│       │   │   ├── values-de/
│       │   │   │   └── strings.xml
│       │   │   ├── values-el/
│       │   │   │   └── strings.xml
│       │   │   ├── values-es/
│       │   │   │   └── strings.xml
│       │   │   ├── values-fr/
│       │   │   │   └── strings.xml
│       │   │   ├── values-hu/
│       │   │   │   └── strings.xml
│       │   │   ├── values-is/
│       │   │   │   └── strings.xml
│       │   │   ├── values-it/
│       │   │   │   └── strings.xml
│       │   │   ├── values-iw/
│       │   │   │   └── strings.xml
│       │   │   ├── values-ja/
│       │   │   │   └── strings.xml
│       │   │   ├── values-ko/
│       │   │   │   └── strings.xml
│       │   │   ├── values-no/
│       │   │   │   └── strings.xml
│       │   │   ├── values-pl/
│       │   │   │   └── strings.xml
│       │   │   ├── values-pt/
│       │   │   │   └── strings.xml
│       │   │   ├── values-ro/
│       │   │   │   └── strings.xml
│       │   │   ├── values-ru/
│       │   │   │   └── strings.xml
│       │   │   ├── values-sk/
│       │   │   │   └── strings.xml
│       │   │   ├── values-sv/
│       │   │   │   └── strings.xml
│       │   │   ├── values-tr/
│       │   │   │   └── strings.xml
│       │   │   ├── values-uk/
│       │   │   │   └── strings.xml
│       │   │   ├── values-v21/
│       │   │   │   └── dimens.xml
│       │   │   ├── values-v23/
│       │   │   │   └── styles.xml
│       │   │   ├── values-zh-rCN/
│       │   │   │   └── strings.xml
│       │   │   ├── values-zh-rTW/
│       │   │   │   └── strings.xml
│       │   │   └── xml/
│       │   │       ├── authenticator.xml
│       │   │       ├── searchable_issues.xml
│       │   │       ├── searchable_repos_users.xml
│       │   │       └── sync_adapter.xml
│       │   └── sqldelight/
│       │       └── com.github.pockethub.android/
│       │           ├── 10.sqm
│       │           ├── 11.sqm
│       │           ├── 12.sqm
│       │           ├── 9.sqm
│       │           ├── issue_filter.sq
│       │           ├── organizations.sq
│       │           └── repositories.sq
│       └── test/
│           └── java/
│               └── com/
│                   └── github/
│                       └── pockethub/
│                           └── android/
│                               ├── AccountManagerShadow.java
│                               ├── ui/
│                               │   └── MainActivityTest.java
│                               └── util/
│                                   └── ConvertUtilsTest.java
├── build.gradle
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── proguard.cfg
├── script/
│   └── style/
│       └── checkstyle.xml
└── settings.gradle
Download .txt
Showing preview only (211K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2210 symbols across 333 files)

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/NewsEventTextTest.java
  class NewsEventTextTest (line 45) | @RunWith(AndroidJUnit4.class)
    method setUp (line 59) | @Before
    method createEvent (line 71) | private GitHubEvent createEvent(GitHubEventType type, GitHubPayload pa...
    method verify (line 82) | private void verify(String expected) {
    method updateView (line 88) | private void updateView(GitHubEvent event) {
    method testCommitCommentEvent (line 103) | @Test
    method testCreateRepositoryEvent (line 116) | @Test
    method testCreateBranchEvent (line 132) | @Test
    method testDelete (line 149) | @Test
    method testFollow (line 166) | @Test
    method testGist (line 186) | @Test
    method testWiki (line 207) | @Test
    method testIssueComment (line 219) | @Test
    method testIssue (line 239) | @Test
    method testAddMember (line 260) | @Test
    method testOpenSourced (line 280) | @Test
    method testWatch (line 292) | @Test
    method testPullRequest (line 304) | @Test
    method testPush (line 321) | @Test
    method testTeamAdd (line 338) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/commit/CommitUriMatcherTest.java
  class CommitUriMatcherTest (line 34) | @RunWith(AndroidJUnit4.class)
    method testEmptyUri (line 41) | @Test
    method testNonHexId (line 49) | public void testNonHexId() {
    method testHttpUri (line 57) | @Test
    method testHttpsUri (line 72) | @Test
    method testCommentUri (line 87) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/commit/CommitUtilsTest.java
  class CommitUtilsTest (line 36) | @SmallTest
    method testAbbreviate (line 42) | @Test
    method testGetName (line 67) | @Test
    method testIsValidCommit (line 81) | @Test
    method testGetAuthor (line 93) | @Test
    method testGetCommitter (line 126) | @Test
    method testGetAuthorDate (line 168) | @Test
    method testGetCommitterDate (line 203) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/commit/CreateCommentActivityTest.java
  class CreateCommentActivityTest (line 39) | public class CreateCommentActivityTest {
    method setUp (line 45) | @Before
    method testEmptyCommentIsProhibited (line 62) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/commit/DiffStylerTest.java
  class DiffStylerTest (line 37) | @SmallTest
    method compareStyled (line 40) | private void compareStyled(String patch) throws IOException {
    method testEmptyFiles (line 66) | @Test
    method testEmptyPatch (line 78) | @Test
    method testOnlyNewline (line 97) | @Test
    method testEmptyPatchLineWithOtherValidLines (line 107) | @Test
    method testTrailingEmptyLine (line 117) | @Test
    method testOnlyNewlines (line 127) | @Test
    method testNoTrailingNewlineAfterSecondLine (line 137) | @Test
    method testNoTrailingNewline (line 147) | @Test
    method testFormattedPatch (line 157) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/commit/FullCommitTest.java
  class FullCommitTest (line 36) | @SmallTest
    method testSingleLineCommentSingleFile (line 42) | @Test
    method testSingleCommentSingleFile (line 68) | @Test
    method testSingleCommentNoFiles (line 89) | @Test
    method testNoCommentsSingleFile (line 104) | @Test
    method testBothTypesOfComments (line 122) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/gist/CreateCommentActivityTest.java
  class CreateCommentActivityTest (line 39) | public class CreateCommentActivityTest  {
    method setUp (line 45) | @Before
    method testEmptyCommentIsProhibited (line 64) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/gist/CreateGistActivityTest.java
  class CreateGistActivityTest (line 37) | public class CreateGistActivityTest {
    method testCreateWithInitialText (line 46) | @Test
    method testCreateWithNoInitialText (line 62) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/gist/GistFilesViewActivityTest.java
  class GistFilesViewActivityTest (line 40) | public class GistFilesViewActivityTest {
    method setUp (line 50) | @Before
    method testChangingPages (line 84) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/gist/GistStoreTest.java
  class GistStoreTest (line 30) | @SmallTest
    method testReuseIssue (line 36) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/gist/GistUriMatcherTest.java
  class GistUriMatcherTest (line 31) | @SmallTest
    method testEmptyUri (line 37) | @Test
    method testNonGistId (line 45) | @Test
    method testPublicGist (line 58) | @Test
    method testPrivateGist (line 69) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/issue/CreateCommentActivityTest.java
  class CreateCommentActivityTest (line 38) | public class CreateCommentActivityTest {
    method setUp (line 44) | @Before
    method testEmptyCommentIsProhibited (line 64) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/issue/EditIssueActivityTest.java
  class EditIssueActivityTest (line 42) | public class EditIssueActivityTest {
    method setUp (line 48) | @Before
    method testSaveMenuEnabled (line 60) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/issue/EditIssuesFilterActivityTest.java
  class EditIssuesFilterActivityTest (line 31) | public class EditIssuesFilterActivityTest {
    method setUp (line 37) | @Before

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/issue/IssueFilterTest.java
  class IssueFilterTest (line 34) | @SmallTest
    method testEqualFilter (line 40) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/issue/IssueStoreTest.java
  class IssueStoreTest (line 32) | @SmallTest
    method testReuseIssue (line 38) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/issue/IssueUriMatcherTest.java
  class IssueUriMatcherTest (line 31) | @SmallTest
    method testEmptyUri (line 37) | @Test
    method testNonNumericIssueNumber (line 45) | @Test
    method testHttpUri (line 54) | @Test
    method testPullUri (line 69) | @Test
    method testHttpsUri (line 84) | @Test
    method testCommentUri (line 99) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/ref/RefUtilsTest.java
  class RefUtilsTest (line 32) | @SmallTest
    method testIsBranch (line 38) | @Test
    method testIsTag (line 52) | @Test
    method testIsValid (line 66) | @Test
    method testGetName (line 81) | @Test
    method testGetPath (line 100) | @Test
    method createGitReference (line 116) | private GitReference createGitReference(String ref){

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/repo/RecentRepositoriesTest.java
  class RecentRepositoriesTest (line 31) | @SmallTest
    method testBadInput (line 37) | @Test
    method testMaxReached (line 51) | @Test
    method testIO (line 76) | @Test
    method testScopedStorage (line 94) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/repo/RepositoryEventMatcherTest.java
  class RepositoryEventMatcherTest (line 33) | @SmallTest
    method testIncompleteRepositoryFork (line 39) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/repo/RepositoryUriMatcherTest.java
  class RepositoryUriMatcherTest (line 30) | public class RepositoryUriMatcherTest {
    method testEmptyUri (line 35) | @Test
    method testUriWithNoOnwer (line 43) | @Test
    method testUriWithNoName (line 56) | @Test
    method testHttpUriWithOwnerAndName (line 67) | @Test
    method testHttpsUriWithOwnerAndName (line 80) | @Test
    method testInvalidOwner (line 93) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/repo/SearchActivityTest.java
  class SearchActivityTest (line 30) | public class SearchActivityTest {
    method setUp (line 36) | @Before

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/user/UserComparatorTest.java
  class UserComparatorTest (line 30) | @SmallTest
    method testLoginMatch (line 36) | @Test
    method testNoLoginMatch (line 58) | @Test
    method createUser (line 69) | private User createUser(String login){

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/user/UserUriMatcherTest.java
  class UserUriMatcherTest (line 30) | public class UserUriMatcherTest {
    method testEmptyUri (line 35) | @Test
    method testUriWithNoName (line 43) | @Test
    method testHttpUriWithName (line 54) | @Test
    method testHttpsUriWithName (line 65) | @Test
    method testUriWithTrailingSlash (line 76) | @Test
    method testUriWithTrailingSlashes (line 87) | @Test

FILE: app/src/androidTest/java/com/github/pockethub/android/tests/util/HtmlUtilsTest.java
  class HtmlUtilsTest (line 27) | public class HtmlUtilsTest {
    method format (line 29) | private String format(String html) {
    method testToggleRemoved (line 39) | @Test
    method testTogglesRemoved (line 48) | @Test
    method testEmailQuoted (line 57) | @Test
    method testEmailFragment (line 67) | @Test
    method testEmailFragments (line 76) | @Test
    method testTrailingEmailFragment (line 85) | @Test
    method testLeadingBreak (line 94) | @Test
    method testTrailingBreak (line 103) | @Test
    method testWrappedBreaks (line 112) | @Test
    method testWrappedParagraphs (line 121) | @Test
    method testParagraphReplacedWithBreak (line 130) | @Test
    method testEmReplacedWithI (line 139) | @Test
    method testStrongReplacedWithB (line 148) | @Test
    method testLeadingWhitespace (line 157) | @Test
    method testTrailingWhitespace (line 166) | @Test
    method testWrappedWhitetspace (line 175) | @Test
    method testPreWithNoWhitespace (line 184) | @Test
    method testPreWithSpaces (line 193) | @Test
    method testPreWithTabs (line 202) | @Test
    method testPreWithNewline (line 211) | @Test
    method testPreWithAllWhitepsace (line 220) | @Test
    method testMultiplePresEscaped (line 230) | @Test
    method testFormatPreCodeOnly (line 241) | @Test

FILE: app/src/main/assets/code_mirror/addon/comment/comment.js
  function w (line 1) | function w(a){a=a.search(q);return-1==a?0:a}
  function D (line 1) | function D(a,d,b){return/\bstring\b/.test(a.getTokenTypeAt(k(d.line,0)))...

FILE: app/src/main/assets/code_mirror/addon/comment/continuecomment.js
  function q (line 1) | function q(b){if(b.getOption("disableInput"))return e.Pass;for(var d=b.l...
  function r (line 3) | function r(b){return(b=b.getOption("continueComments"))&&"object"==typeo...

FILE: app/src/main/assets/code_mirror/addon/dialog/dialog.js
  function l (line 1) | function l(a,c,b){a=a.getWrapperElement().appendChild(document.createEle...
  function m (line 1) | function m(a,c){a.state.currentNotificationClose&&
  function e (line 2) | function e(a){if("string"==typeof a)d.value=a;else if(!h&&(h=!0,f.parent...
  function e (line 3) | function e(){h||(h=!0,f.parentNode.removeChild(f),
  function b (line 4) | function b(){f||(f=!0,clearTimeout(h),e.parentNode.removeChild(e))}

FILE: app/src/main/assets/code_mirror/addon/display/autorefresh.js
  function f (line 1) | function f(b,a){function d(){b.display.wrapper.offsetHeight?(e(b,a),b.di...
  function e (line 2) | function e(b,a){clearTimeout(a.timeout);c.off(window,"mouseup",a.hurry);...

FILE: app/src/main/assets/code_mirror/addon/display/panel.js
  function f (line 1) | function f(a,b,c,d){this.cm=a;this.node=b;this.options=c;this.height=d;t...
  function h (line 1) | function h(a){var b=a.getWrapperElement(),c=window.getComputedStyle?wind...

FILE: app/src/main/assets/code_mirror/addon/display/placeholder.js
  function f (line 1) | function f(a){a.state.placeholder&&(a.state.placeholder.parentNode.remov...
  function h (line 1) | function h(a){f(a);var c=a.state.placeholder=document.createElement("pre...
  function g (line 2) | function g(a){k(a)&&h(a)}
  function e (line 2) | function e(a){var c=a.getWrapperElement(),b=k(a);c.className=c.className...
  function k (line 2) | function k(a){return 1===a.lineCount()&&""===a.getLine(0)}

FILE: app/src/main/assets/code_mirror/addon/display/rulers.js
  function e (line 1) | function e(a){a.state.rulerDiv.textContent="";var h=a.getOption("rulers"...

FILE: app/src/main/assets/code_mirror/addon/edit/closebrackets.js
  function r (line 1) | function r(b,a){return"pairs"==a&&"string"==typeof b?b:"object"==typeof ...
  function z (line 1) | function z(b){return function(a){return A(a,b)}}
  function u (line 1) | function u(b){var a=b.state.closeBrackets;return a?b.getModeAt(b.getCurs...
  function A (line 1) | function A(b,a){var c=u(b);if(!c||b.getOption("disableInput"))return f.P...
  function C (line 4) | function C(b,a){b=a.lastIndexOf(b);return-1<b&&1==b%2}
  function y (line 4) | function y(b,a){b=b.getRange(k(a.line,a.ch-1),k(a.line,a.ch+1));return 2==
  function B (line 5) | function B(b,a,c){var e=b.getLine(a.line),d=b.getTokenAt(a);if(/\bstring...

FILE: app/src/main/assets/code_mirror/addon/edit/closetag.js
  function r (line 1) | function r(b){if(b.getOption("disableInput"))return e.Pass;for(var h=b.l...
  function n (line 3) | function n(b,h){for(var a=b.listSelections(),d=[],f=h?"/":"</",c=0;c<a.l...
  function p (line 5) | function p(b,e){if(b.indexOf)return b.indexOf(e);for(var a=0,d=b.length;...
  function q (line 5) | function q(b,h,a,d,f){if(!e.scanForClosingTag)return!1;var c=Math.min(b....

FILE: app/src/main/assets/code_mirror/addon/edit/matchbrackets.js
  function r (line 1) | function r(a,c,b,e){var d=a.getLineHandle(c.line),l=c.ch-1,d=0<=l&&q[d.t...
  function t (line 2) | function t(a,c,b,e,d){var l=d&&d.maxScanLineLength||1E4,h=d&&d.maxScanLi...
  function u (line 3) | function u(a,c,b){for(var e=a.state.matchBrackets.maxHighlightLineLength...
  function v (line 4) | function v(a){a.operation(function(){f&&(f(),f=null);f=u(a,!1,a.state.ma...

FILE: app/src/main/assets/code_mirror/addon/edit/matchtags.js
  function f (line 1) | function f(a){a.state.tagHit&&a.state.tagHit.clear();a.state.tagOther&&a...
  function e (line 1) | function e(a){a.state.failedTagMatch=!1;a.operation(function(){f(a);if(!...
  function g (line 2) | function g(a){a.state.failedTagMatch&&e(a)}

FILE: app/src/main/assets/code_mirror/addon/fold/brace-fold.js
  function b (line 1) | function b(h){for(var c=a.ch,b=0;;)if(c=0>=c?-1:f.lastIndexOf(h,c-1),-1=...
  function b (line 2) | function b(h){if(h<e.firstLine()||h>e.lastLine())return null;
  function b (line 4) | function b(a){if(a<e.firstLine()||a>e.lastLine())return null;var b=e.get...

FILE: app/src/main/assets/code_mirror/addon/fold/foldcode.js
  function k (line 1) | function k(a,c,d,g){function f(d){var b=k(a,c);if(!b||b.to.line-b.from.l...
  function p (line 2) | function p(a,c){a=h(a,c,"widget");"string"==typeof a&&(c=document.create...
  function h (line 3) | function h(a,c,b){return c&&void 0!==c[b]?c[b]:(a=a.options.foldOptions)...

FILE: app/src/main/assets/code_mirror/addon/fold/foldgutter.js
  function f (line 4) | function f(b){this.options=b;this.from=this.to=0}
  function d (line 4) | function d(b,c){b=b.findMarks(m(c,0),m(c+1,0));for(var a=0;a<b.length;++...
  function g (line 4) | function g(b){if("string"==typeof b){var c=document.createElement("div")...
  function e (line 5) | function e(b,c,a){var l=b.state.foldGutter.options,e=c,f=b.foldOption(l,...
  function k (line 5) | function k(b){var c=b.getViewport(),a=b.state.foldGutter;a&&(b.operation...
  function q (line 5) | function q(b,c,a){var h=b.state.foldGutter;
  function n (line 6) | function n(b){var c=b.state.foldGutter;if(c){var a=c.options;c.from=c.to...
  function r (line 6) | function r(b){var a=b.state.foldGutter;if(a){var d=a.options;clearTimeou...
  function p (line 7) | function p(a,c){var b=a.state.foldGutter;b&&(c=c.line,c>=b.from&&c<b.to&...

FILE: app/src/main/assets/code_mirror/addon/fold/markdown-fold.js
  function g (line 1) | function g(b){return(b=c.getTokenTypeAt(a.Pos(b,0)))&&/\bheader\b/.test(b)}
  function h (line 1) | function h(b,a,c){return(a=a&&a.match(/^#+/))&&g(b)?a[0].length:(a=c&&c....

FILE: app/src/main/assets/code_mirror/addon/fold/xml-fold.js
  function l (line 1) | function l(a,b,d,c){this.line=b;this.ch=d;this.cm=a;this.text=a.getLine(...
  function m (line 1) | function m(a,b){return(a=a.cm.getTokenTypeAt(h(a.line,b)))&&/\btag\b/.te...
  function t (line 1) | function t(a){if(!(a.line>=
  function u (line 2) | function u(a){if(!(a.line<=a.min))return a.text=a.cm.getLine(--a.line),a...
  function q (line 2) | function q(a){for(;;){var b=a.text.indexOf(">",a.ch);if(-1==b)if(t(a))co...
  function r (line 2) | function r(a){for(;;){var b=a.ch?a.text.lastIndexOf("<",a.ch-1):-1;if(-1...
  function v (line 3) | function v(a){for(;;){n.lastIndex=a.ch;var b=n.exec(a.text);if(!b)if(t(a...
  function p (line 3) | function p(a,b){for(var d=[];;){var c=v(a),g,f=a.line,k=a.ch-(c?c[0].len...
  function w (line 4) | function w(a,b){for(var d=[];;){var c;a:for(c=a;;){var g=c.ch?c.text.las...

FILE: app/src/main/assets/code_mirror/addon/hint/css-hint.js
  function f (line 1) | function f(b){for(var a in b)h&&0!=a.lastIndexOf(h,0)||k.push(a)}

FILE: app/src/main/assets/code_mirror/addon/hint/html-hint.js
  function n (line 1) | function n(a){for(var b in g)g.hasOwnProperty(b)&&(a.attrs[b]=g[b])}

FILE: app/src/main/assets/code_mirror/addon/hint/javascript-hint.js
  function m (line 1) | function m(a,b){for(var k=0,e=a.length;k<e;++k)b(a[k])}
  function q (line 1) | function q(a,b,k,e){var c=a.getCursor(),d=k(a,c);if(!/\b(?:string|commen...
  function t (line 2) | function t(a,b){a=a.getTokenAt(b);b.ch==a.start+1&&"."==a.string.charAt(...
  function r (line 2) | function r(a,

FILE: app/src/main/assets/code_mirror/addon/hint/show-hint.js
  function n (line 1) | function n(a,b){this.cm=a;this.options=b;this.widget=null;this.tick=this...
  function y (line 2) | function y(a,b){function c(a,d){var c;c="string"!=typeof d?function(a){r...
  function w (line 3) | function w(a,b){for(;b&&b!=a;){if("LI"===b.nodeName.toUpperCase()&&b.par...
  function q (line 3) | function q(a,b){this.completion=a;this.data=b;this.picked=!1;var c=this,...
  function z (line 8) | function z(a,b){if(!a.somethingSelected())return b;a=[];for(var c=0;c<b....
  function t (line 8) | function t(a,b,c,e){a.async?a(b,e,c):(a=a(b,c))&&a.then?a.then(e):e(a)}
  function d (line 16) | function d(c){if(c==f.length)return b(null);t(f[c],a,e,function(a){a&&0<...

FILE: app/src/main/assets/code_mirror/addon/hint/sql-hint.js
  function r (line 1) | function r(a){return"[object Array]"==Object.prototype.toString.call(a)}
  function D (line 1) | function D(a){a=a.doc.modeOption;"sql"===a&&(a="text/x-sql");return g.re...
  function q (line 1) | function q(a){return"string"==typeof a?a:a.text}
  function v (line 1) | function v(a,b){r(b)&&(b=
  function E (line 2) | function E(a){var b={};if(r(a))for(var c=a.length-1;0<=c;c--){var d=a[c]...
  function w (line 2) | function w(a){var b={},c;for(c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);ret...
  function x (line 2) | function x(a,b){var c=a.length;b=q(b).substr(0,c);return a.toUpperCase()...
  function p (line 2) | function p(a,b,c,d){if(r(c))for(var e=0;e<c.length;e++)x(b,c[e])&&a.push...
  function F (line 3) | function F(a){"."==a.charAt(0)&&(a=a.substr(1));return a.replace(/`/g,"")}
  function t (line 3) | function t(a){for(var b=q(a).split("."),c=0;c<b.length;c++)b[c]="`"+b[c]...
  function G (line 3) | function G(a,b,c,d){for(var e=!1,f=[],y=b.start,k=!0;k;)k="."==b.string....
  function H (line 4) | function H(a,b){if(a){var c=/[,;]/g;a=a.split(" ");for(var d=0;d<a.lengt...
  function A (line 5) | function A(a,b){var c=b.doc,d=c.getValue(),e=a.toUpperCase(),f="",g="";a...

FILE: app/src/main/assets/code_mirror/addon/lint/javascript-lint.js
  function p (line 1) | function p(b){m(b,q,"warning",!0);m(b,r,"error");var c;a:{c=b.descriptio...
  function m (line 1) | function m(b,c,g,a){var h,d,f;h=b.description;for(var e=0;e<c.length;e++...
  function t (line 2) | function t(b,c){for(var g=0;g<b.length;g++){var a=b[g];if(a){var h;h=[];...

FILE: app/src/main/assets/code_mirror/addon/lint/lint.js
  function w (line 1) | function w(a,c){function b(a){if(!d.parentNode)return e.off(document,"mo...
  function x (line 2) | function x(a){a.parentNode&&(null==a.style.opacity&&a.parentNode&&a.pare...
  function q (line 2) | function q(a,c,b){function d(){e.off(b,"mouseout",d);g&&(x(g),g=null)}va...
  function y (line 3) | function y(a,c,b){this.marked=[];this.options=c;this.timeout=null;this.h...
  function t (line 4) | function t(a){var c=a.state.lint;c.hasGutter&&a.clearGutter("CodeMirror-...
  function z (line 4) | function z(a,c,b,d){var g=document.createElement("div"),f=g;g.className=...
  function r (line 4) | function r(a){var c=a.severity;c||(c="error");var b=document.createEleme...
  function A (line 5) | function A(a,c,b){function d(){f=-1;a.off("change",d)}var g=a.state.lint...
  function m (line 5) | function m(a){var c=a.state.lint.options,b=c.options||c,d=c.getAnnotatio...
  function u (line 5) | function u(a,c){t(a);for(var b=
  function v (line 7) | function v(a){var c=a.state.lint;c&&(clearTimeout(c.timeout),c.timeout=s...

FILE: app/src/main/assets/code_mirror/addon/merge/merge.js
  function A (line 1) | function A(a,b){this.mv=a;this.type=b;this.classes="left"==b?{chunk:"Cod...
  function z (line 2) | function z(a){a.diffOutOfDate&&(a.diff=L(a.orig.getValue(),a.edit.getVal...
  function aa (line 2) | function aa(a){function b(b){B=!0;h=!1;"full"==b&&(a.svg&&C(a.svg),a.cop...
  function ba (line 4) | function ba(a){a.edit.on("scroll",function(){I(a,DIFF_INSERT)&&x(a)});a....
  function I (line 4) | function I(a,b){var c,f;if(a.diffOutOfDate)return!1;if(!a.lockScroll)ret...
  function P (line 6) | function P(a,b){var c=b.after;null==c&&(c=a.lastLine()+1);return{top:a.h...
  function Q (line 7) | function Q(a,b,c){(a.lockScroll=b)&&0!=c&&I(a,DIFF_INSERT)&&x(a);a.lockB...
  function G (line 7) | function G(a,b,c){for(var f=0;f<b.length;++f){var d=b[f];d instanceof n....
  function N (line 7) | function N(a,b,c,f,d){var e=a.getViewport();a.operation(function(){c.fro...
  function J (line 8) | function J(a,b,c,f,d,e,k){function g(b,c){for(var g=Math.max(d,b),h=Math...
  function x (line 9) | function x(a){if(a.showDifferences){if(a.svg){C(a.svg);var b=a.gap.offse...
  function E (line 13) | function E(a,b){for(var c=0,f=0,d=0;d<b.length;d++){var e=b[d];if(e.edit...
  function ca (line 13) | function ca(a,b){for(var c=[],f=0;f<a.chunks.length;f++){var d=a.chunks[...
  function H (line 14) | function H(a,b){if(a.dealigned||b){if(!a.orig.curOp)return a.orig.operat...
  function da (line 14) | function da(a,b,c){for(var f=0,d=[],e=0;e<a.length;e++)if(null!=
  function ea (line 15) | function ea(a,b,c){var f=!0;b>a.lastLine()&&(b--,f=!1);var d=document.cr...
  function U (line 15) | function U(a,b,c,f){if(!a.diffOutOfDate){a=f.editTo>b.lastLine()?q(f.edi...
  function V (line 16) | function V(a){var b=a.lockButton=w("div",null,"CodeMirror-merge-scrolllo...
  function W (line 17) | function W(a){return"string"==typeof a?a:a.getValue()}
  function L (line 17) | function L(a,b){a=X.diff_main(a,b);X.diff_cleanupSemantic(a);for(b=0;b<a...
  function M (line 18) | function M(a){for(var b=[],c=0,f=0,d=q(0,0),e=q(0,0),k=0;k<a.length;++k)...
  function S (line 18) | function S(a,b){if(b==a.length-1)return!0;var c=a[b+1][1];
  function R (line 19) | function R(a,b){if(0==b)return!0;var c=a[b-1][1];if(10!=c.charCodeAt(c.l...
  function fa (line 19) | function fa(a,b,c){function f(){e.clear();a.removeLineClass(b,"wrap","Co...
  function ga (line 20) | function ga(a,b){function c(){for(var a=0;a<f.length;a++)f[a].clear()}fo...
  function Y (line 20) | function Y(a,b,c,f){for(var d=0;d<a.chunks.length;d++)for(var e=a.chunks...
  function w (line 21) | function w(a,b,c,f){a=document.createElement(a);c&&(a.className=c);f&&(a...
  function C (line 21) | function C(a){for(var b=a.childNodes.length;0<b;--b)a.removeChild(a.firs...
  function T (line 21) | function T(a){for(var b=1;b<arguments.length;b+=2)a.setAttribute(argumen...
  function K (line 21) | function K(a,b){b||(b={});for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]...
  function D (line 22) | function D(a,b,c,f){a=c?q(a.line,a.ch):a;for(c=0;;){var d=b.indexOf("\n"...
  function Z (line 22) | function Z(a,b){var c=null,f=a.state.diffViews,d=a.getCursor().line;if(f...

FILE: app/src/main/assets/code_mirror/addon/mode/loadmode.js
  function l (line 1) | function l(a,b){var c=b;return function(){0==--c&&a()}}
  function h (line 1) | function h(a,c){var e=b.modes[a].dependencies;if(!e)return c();a=[];for(...

FILE: app/src/main/assets/code_mirror/addon/mode/multiplex.js
  function m (line 1) | function m(a,c,b,d){return"string"==typeof c?(b=a.indexOf(c,b),d&&-1<b?b...

FILE: app/src/main/assets/code_mirror/addon/mode/simple.js
  function r (line 1) | function r(e,c){if(!e.hasOwnProperty(c))throw Error("Undefined state "+c...
  function q (line 1) | function q(e,c){if(!e)return/(?:)/;var d="";e instanceof RegExp?(e.ignor...
  function u (line 1) | function u(e,c){(e.next||e.push)&&r(c,
  function v (line 2) | function v(e,c){return function(d,a){if(a.pending){var b=a.pending.shift...
  function t (line 5) | function t(e,c){if(e===c)return!0;if(!e||"object"!=typeof e||!c||"object...
  function w (line 5) | function w(e,c){return function(d,a,b){if(d.local&&d.local.mode.indent)r...

FILE: app/src/main/assets/code_mirror/addon/runmode/colorize.js
  function f (line 1) | function f(b,a){if(3==b.nodeType)return a.push(b.nodeValue);for(var c=b....

FILE: app/src/main/assets/code_mirror/addon/runmode/runmode-standalone.js
  function k (line 2) | function k(a){this.pos=this.start=0;this.string=a;this.lineStart=0}

FILE: app/src/main/assets/code_mirror/addon/runmode/runmode.node.js
  function splitLines (line 1) | function splitLines(a){return a.split(/\r\n?|\n/)}
  function StringStream (line 1) | function StringStream(a,b){this.pos=this.start=0;this.string=a;this.tabS...
  function copyObj (line 6) | function copyObj(a,b,d){b||(b={});for(var c in a)!a.hasOwnProperty(c)||!...

FILE: app/src/main/assets/code_mirror/addon/scroll/annotatescrollbar.js
  function e (line 1) | function e(a,f){function c(a){clearTimeout(d.doRedraw);d.doRedraw=setTim...
  function f (line 3) | function f(a,b){m!=a.line&&(m=a.line,l=c.getLineHandle(m));return e&&l.h...

FILE: app/src/main/assets/code_mirror/addon/scroll/scrollpastend.js
  function e (line 1) | function e(a,b){c.changeEnd(b).line==a.lastLine()&&d(a)}
  function d (line 1) | function d(a){var b="";if(1<a.lineCount())var b=a.display.scroller.clien...

FILE: app/src/main/assets/code_mirror/addon/scroll/simplescrollbars.js
  function g (line 1) | function g(a,b,h){function e(a){var b=c.wheelEventPixels(a)["horizontal"...
  function f (line 3) | function f(a,b,c){this.addClass=a;this.horiz=new g(a,"horizontal",c);b(t...

FILE: app/src/main/assets/code_mirror/addon/search/jump-to-line.js
  function g (line 1) | function g(a,d,b,c,e){a.openDialog?a.openDialog(d,e,{value:c,selectValue...
  function f (line 1) | function f(a,d){var b=Number(d);return/^[-+]/.test(d)?a.getCursor().line...

FILE: app/src/main/assets/code_mirror/addon/search/match-highlighter.js
  function q (line 1) | function q(a){this.options={};for(var b in g)this.options[b]=(a&&a.hasOw...
  function h (line 1) | function h(a){var b=a.state.matchHighlighter;(b.active||a.hasFocus())&&k(a,
  function l (line 2) | function l(a){var b=a.state.matchHighlighter;b.active||(b.active=!0,k(a,...
  function k (line 2) | function k(a,b){clearTimeout(b.timeout);b.timeout=setTimeout(function(){...
  function n (line 2) | function n(a,b,d,c){var e=a.state.matchHighlighter;a.addOverlay(e.overla...
  function p (line 2) | function p(a){var b=a.state.matchHighlighter;b.overlay&&
  function m (line 3) | function m(a){a.operation(function(){var b=a.state.matchHighlighter;p(a)...
  function r (line 4) | function r(a,b,d){return{token:function(c){var e;if(e=c.match(a))(e=

FILE: app/src/main/assets/code_mirror/addon/search/matchesonscrollbar.js
  function g (line 1) | function g(a,c,b,e){this.cm=a;this.options=e;var f={listenForChanges:!1}...
  function h (line 2) | function h(a,c,b){return a<=c?a:Math.max(c,a+b)}

FILE: app/src/main/assets/code_mirror/addon/search/search.js
  function h (line 4) | function h(a,c){"string"==typeof a?a=new RegExp(a.replace(/[\-\[\]\/\{\}...
  function e (line 5) | function e(){this.overlay=this.posFrom=this.posTo=this.lastQuery=this.qu...
  function k (line 5) | function k(a){return a.state.search||(a.state.search=new e)}
  function g (line 5) | function g(a){return"string"==typeof a&&a==a.toLowerCase()}
  function l (line 5) | function l(a,c,b){return a.getSearchCursor(c,b,g(c))}
  function y (line 5) | function y(a,c,b,f,d){a.openDialog(c,f,{value:b,selectValueOnOpen:!0,clo...
  function r (line 5) | function r(a,
  function z (line 6) | function z(a,c,b,f){if(a.openConfirm)a.openConfirm(c,f);else if(confirm(...
  function u (line 6) | function u(a){return a.replace(/\\(.)/g,function(a,b){return"n"==b?"\n":...
  function v (line 6) | function v(a){var b=a.match(/^\/(.*)\/([a-z]*)$/);if(b)try{a=new RegExp(...
  function p (line 6) | function p(a,b,e){b.queryText=e;b.query=v(e);a.removeOverlay(b.overlay,
  function m (line 7) | function m(a,c,e,f){var d=k(a);if(d.query)return q(a,c);var g=a.getSelec...
  function q (line 9) | function q(a,c,e){a.operation(function(){var f=
  function n (line 10) | function n(a){a.operation(function(){var b=k(a);if(b.lastQuery=b.query)b...
  function w (line 10) | function w(a,b,e){a.operation(function(){for(var c=l(a,
  function x (line 11) | function x(a,b){if(!a.getOption("readOnly")){var c=a.getSelection()||k(a...

FILE: app/src/main/assets/code_mirror/addon/search/searchcursor.js
  function e (line 4) | function e(b,a,h,q){this.atOccurrence=!1;this.doc=b;null==q&&"string"==t...
  function k (line 7) | function k(a,d,h){if(a.length==d.length)return h;for(d=Math.min(h,
  function b (line 8) | function b(a){a=g(a,0);h.pos={from:a,to:a};return h.atOccurrence=!1}

FILE: app/src/main/assets/code_mirror/addon/selection/active-line.js
  function f (line 1) | function f(a){for(var b=0;b<a.state.activeLines.length;b++)a.removeLineC...
  function k (line 2) | function k(a,b){if(a.length!=b.length)return!1;for(var c=0;c<a.length;c+...
  function g (line 2) | function g(a,b){for(var c=[],d=0;d<b.length;d++){var e=b[d];e.empty()&&(...
  function h (line 3) | function h(a,b){g(a,b.ranges)}

FILE: app/src/main/assets/code_mirror/addon/selection/mark-selection.js
  function d (line 4) | function d(b){b.operation(function(){r(b)})}
  function c (line 4) | function c(b){b.state.markedSelection.length&&b.operation(function(){g(b...
  function e (line 4) | function e(b,a,f,c){if(0!=l(a,f))for(var n=b.state.markedSelection,e=b.s...
  function g (line 5) | function g(b){b=b.state.markedSelection;for(var a=0;a<b.length;++a)b[a]....
  function h (line 5) | function h(a){g(a);for(var b=a.listSelections(),f=0;f<b.length;f++)e(a,b...
  function r (line 5) | function r(a){if(!a.somethingSelected())return g(a);if(1<a.listSelection...

FILE: app/src/main/assets/code_mirror/addon/selection/selection-pointer.js
  function e (line 1) | function e(b){b.state.selectionPointer.rects=null;f(b)}
  function f (line 1) | function f(b){b.state.selectionPointer.willUpdate||(b.state.selectionPoi...

FILE: app/src/main/assets/code_mirror/addon/tern/tern.js
  function B (line 1) | function B(a,c,b){var d=a.docs[c];d?b(x(a,d)):a.options.getFile?a.option...
  function u (line 1) | function u(a,c,b){for(var d in a.docs){var e=a.docs[d];if(e.doc==c)retur...
  function C (line 1) | function C(a,c){if("string"==typeof c)return a.docs[c];
  function L (line 2) | function L(a,c,b){var d=u(a,c),e=a.cachedArgHints;e&&e.doc==c&&0<=y(e.st...
  function E (line 2) | function E(a,
  function M (line 3) | function M(a,c,b){a.request(c,{type:"completions",types:!0,docs:!0,urls:...
  function N (line 4) | function N(a){a="?"==a?"unknown":"number"==a||"string"==a||"bool"==a?a:/...
  function F (line 5) | function F(a,c,b,d,e){a.request(c,d,function(b,d){if(b)return t(a,c,b);i...
  function O (line 5) | function O(a,c){z(a);if(!c.somethingSelected()){var b=c.getTokenAt(c.get...
  function H (line 7) | function H(a,c,b){z(a);for(var d=a.cachedArgHints,e=d.type,d=p("span",d....
  function P (line 8) | function P(a){function c(c){for(var b=0,e=d;;){var f=a.charAt(d);if(c.te...
  function Q (line 9) | function Q(a,c){function b(b){b={type:"definition",variable:b||null};var...
  function J (line 11) | function J(a,c,b,d,e){b.doc.setSelection(d,e);c!=b&&a.options.switchToDo...
  function R (line 11) | function R(a){var c=a.getCursor("end"),b=a.getTokenAt(c);return b.start<...
  function S (line 12) | function S(a,c){var b=c.getTokenAt(c.getCursor());if(!/\w/.test(b.string...
  function U (line 12) | function U(a,c){var b=u(a,c.doc).name;a.request(c,{type:"refs"},function...
  function T (line 13) | function T(a,c){for(var b=Object.create(null),d=0;d<c.length;++d){var e=...
  function I (line 13) | function I(a,c,b,d){var e=[],f;(f=!b.fullDocs)||delete b.fullDocs;"strin...
  function W (line 15) | function W(a,c,b){for(var d=a.doc,e=null,f=null,g=c.line-1,k=Math.max(0,...
  function p (line 16) | function p(a,c){var b=document.createElement(a);c&&(b.className=c);for(v...
  function K (line 16) | function K(a,c,b){a.openDialog?a.openDialog(c+": <input type=text>",b):b...
  function G (line 16) | function G(a,c,b){function d(){a.state.ternTooltip=null;f.parentNode&&(a...
  function A (line 17) | function A(a,c,b){b=p("div",k+"tooltip",b);b.style.left=a+"px";b.style.t...
  function w (line 17) | function w(a){var c=a&&a.parentNode;c&&
  function X (line 18) | function X(a){a.style.opacity="0";setTimeout(function(){w(a)},1100)}
  function t (line 18) | function t(a,c,b){a.options.showError?a.options.showError(c,b):G(c,Strin...
  function z (line 18) | function z(a){a.activeArgHints&&(w(a.activeArgHints),a.activeArgHints=nu...
  function x (line 18) | function x(a,c){var b=c.doc.getValue();a.options.fileFilter&&(b=a.option...
  function Y (line 18) | function Y(a){function c(a,c){c&&(a.id=++d,e[d]=c);b.postMessage(a)}var ...

FILE: app/src/main/assets/code_mirror/addon/tern/worker.js
  function getFile (line 2) | function getFile(b,a){postMessage({type:"getFile",name:b,id:++nextId});p...
  function startServer (line 2) | function startServer(b,a,c){c&&importScripts.apply(null,c);server=new te...

FILE: app/src/main/assets/code_mirror/addon/wrap/hardwrap.js
  function p (line 1) | function p(c,a,b){for(var e=b.paragraphStart||c.getHelper(a,"paragraphSt...
  function v (line 2) | function v(c,a,b,e){for(var d=a;d<c.length&&" "==c.charAt(d);)d++;for(;0...
  function n (line 2) | function n(c,a,b,e){a=c.clipPos(a);b=c.clipPos(b);var d=e.column||80,f=e...

FILE: app/src/main/assets/code_mirror/lib/codemirror.js
  function l (line 4) | function l(a,b){if(!(this instanceof l))return new l(a,b);this.options=b...
  function aa (line 6) | function aa(a,b,c){this.input=c;this.scrollbarFiller=r("div",null,"CodeM...
  function I (line 10) | function I(a){a.doc.mode=l.getMode(a.options,a.doc.modeOption);S(a)}
  function S (line 10) | function S(a){a.doc.iter(function(a){a.stateAfter&&(a.stateAfter=null);a...
  function ba (line 11) | function ba(a){var b=Ca(a.display),c=a.options.lineWrapping,d=c&&Math.ma...
  function Qa (line 11) | function Qa(a){var b=a.doc,c=ba(a);b.iter(function(a){var b=c(a);b!=a.he...
  function Fd (line 11) | function Fd(a){a.display.wrapper.className=a.display.wrapper.className.r...
  function nb (line 12) | function nb(a){Ed(a);P(a);setTimeout(function(){Hc(a)},20)}
  function Ed (line 12) | function Ed(a){var b=a.display.gutters,c=a.options.gutters;wa(b);for(var...
  function Ic (line 12) | function Ic(a){a.display.sizer.style.marginLeft=a.display.gutters.offset...
  function Pb (line 12) | function Pb(a){if(0==
  function Jc (line 13) | function Jc(a){var b=a.display;a=a.doc;b.maxLine=w(a,a.first);b.maxLineL...
  function Dc (line 13) | function Dc(a){var b=N(a.gutters,"CodeMirror-linenumbers");-1==b&&a.line...
  function ob (line 14) | function ob(a){var b=a.display,c=b.gutters.offsetWidth,d=Math.round(a.do...
  function Lc (line 15) | function Lc(a,b,c){this.cm=c;var d=this.vert=r("div",[r("div",null,null,...
  function Mc (line 15) | function Mc(){}
  function Gd (line 15) | function Gd(a){a.display.scrollbars&&
  function Va (line 17) | function Va(a,b){b||(b=ob(a));var c=a.display.barWidth,d=a.display.barHe...
  function Md (line 17) | function Md(a,b){var c=a.display,d=c.scrollbars.update(b);c.sizer.style....
  function Nc (line 18) | function Nc(a,b,c){var d=c&&null!=c.top?Math.max(0,c.top):a.scroller.scr...
  function Hc (line 19) | function Hc(a){var b=a.display,c=b.view;if(b.alignWidgets||b.gutters.fir...
  function Kd (line 20) | function Kd(a){if(!a.options.lineNumbers)return!1;var b=a.doc,b=Pc(a.opt...
  function Pc (line 21) | function Pc(a,b){return String(a.lineNumberFormatter(b+a.firstLineNumber))}
  function Oc (line 21) | function Oc(a){return a.scroller.getBoundingClientRect().left-a.sizer.ge...
  function Rb (line 21) | function Rb(a,b,c){var d=a.display;this.viewport=b;this.visible=Nc(d,a.d...
  function Rc (line 22) | function Rc(a,b){var c=a.display,d=a.doc;if(b.editorIsHidden)return xa(a...
  function Pd (line 25) | function Pd(a,b){for(var c=b.viewport,d=!0;;d=!1){if(!d||!a.options.line...
  function Vc (line 26) | function Vc(a,b){b=new Rb(a,b);if(Rc(a,b)){Qb(a);Pd(a,b);var c=ob(a);sb(...
  function Uc (line 26) | function Uc(a,b){a.display.sizer.style.minHeight=b.docHeight+"px";a.disp...
  function Qb (line 27) | function Qb(a){a=a.display;for(var b=a.lineDiv.offsetTop,c=0;c<a.view.le...
  function Qd (line 27) | function Qd(a){if(a.widgets)for(var b=0;b<a.widgets.length;++b)a.widgets...
  function Qc (line 28) | function Qc(a){for(var b=a.display,c={},d={},e=b.gutters.clientLeft,f=b....
  function Df (line 28) | function Df(a,b,c){function d(b){var c=b.nextSibling;M&&ea&&a.display.cu...
  function Rd (line 29) | function Rd(a,b,c,d){for(var e=
  function tb (line 31) | function tb(a){a.node==a.text&&(a.node=r("div",null,null,"position: rela...
  function Sd (line 31) | function Sd(a,b){var c=a.display.externalMeasured;return c&&c.line==b.li...
  function Wc (line 31) | function Wc(a){var b=a.bgClass?a.bgClass+" "+(a.line.bgClass||""):a.line...
  function Td (line 32) | function Td(a,b,c,d){b.gutter&&(b.node.removeChild(b.gutter),b.gutter=nu...
  function Ef (line 35) | function Ef(a,b,c,d){var e=Sd(a,b);b.text=b.node=e.pre;e.bgClass&&(b.bgC...
  function Ud (line 35) | function Ud(a,b,c){Wd(a,b.line,b,c,!0);if(b.rest)for(var d=0;d<b.rest.le...
  function Wd (line 35) | function Wd(a,b,c,d,e){if(b.widgets){var f=tb(c),g=0;for(b=b.widgets;g<b...
  function Xc (line 36) | function Xc(a){return q(a.line,a.ch)}
  function Tb (line 37) | function Tb(a,b){return 0>t(a,b)?b:a}
  function Ub (line 37) | function Ub(a,b){return 0>t(a,b)?a:b}
  function Xd (line 37) | function Xd(a){a.state.focused||(a.display.input.focus(),Fc(a))}
  function Vb (line 37) | function Vb(a,b,c,d,e){var f=a.doc;a.display.shift=!1;d||(d=f.sel);var g...
  function Zd (line 38) | function Zd(a,b){var c=
  function Yd (line 39) | function Yd(a,b){if(a.options.electricChars&&a.options.smartIndent)for(v...
  function $d (line 40) | function $d(a){for(var b=[],c=[],d=0;d<a.doc.sel.ranges.length;d++){var ...
  function ae (line 40) | function ae(a,b){a.setAttribute("autocorrect","off");a.setAttribute("aut...
  function Yc (line 41) | function Yc(a){this.cm=a;this.prevInput="";this.pollingFast=!1;this.poll...
  function be (line 41) | function be(){var a=r("textarea",null,null,"position: absolute; bottom: ...
  function Zc (line 41) | function Zc(a){this.cm=
  function ce (line 42) | function ce(a,b){var c=$c(a,b.line);if(!c||c.hidden)return null;a=w(a.do...
  function Ya (line 42) | function Ya(a,b){b&&(a.bad=!0);return a}
  function Yb (line 42) | function Yb(a,b,c){var d;if(b==a.display.lineDiv){d=a.display.lineDiv.ch...
  function Ff (line 43) | function Ff(a,b,c){function d(b,c,d){for(var e=-1;e<(m?m.length:0);e++)f...
  function Gf (line 45) | function Gf(a,b,c,d,e){function f(a){return function(b){return b.id==a}}...
  function ra (line 46) | function ra(a,b){this.ranges=a;this.primIndex=b}
  function G (line 46) | function G(a,b){this.anchor=a;this.head=b}
  function ga (line 46) | function ga(a,b){b=a[b];a.sort(function(a,b){return t(a.from(),b.from())...
  function na (line 47) | function na(a,b){return new ra([new G(a,b||a)],0)}
  function z (line 47) | function z(a,b){if(b.line<a.first)return q(a.first,0);var c=a.first+a.si...
  function wb (line 47) | function wb(a,b){return b>=a.first&&b<a.first+a.size}
  function fe (line 47) | function fe(a,b){for(var c=[],d=0;d<b.length;d++)c[d]=
  function xb (line 48) | function xb(a,b,c,d){return a.cm&&a.cm.display.shift||a.extend?(a=b.anch...
  function Zb (line 48) | function Zb(a,b,c,d){E(a,new ra([xb(a,a.sel.primary(),b,c)],0),d)}
  function ge (line 48) | function ge(a,b,c){for(var d=[],e=0;e<a.sel.ranges.length;e++)d[e]=xb(a,...
  function bd (line 48) | function bd(a,b,c,d){var e=a.sel.ranges.slice(0);e[b]=c;E(a,ga(e,a.sel.p...
  function Hf (line 48) | function Hf(a,b,c){c={ranges:b.ranges,update:function(b){this.ranges=
  function he (line 49) | function he(a,b,c){var d=a.history.done,e=C(d);e&&e.ranges?(d[d.length-1...
  function E (line 49) | function E(a,b,c){$b(a,b,c);b=a.sel;var d=a.cm?a.cm.curOp.id:NaN,e=a.his...
  function $b (line 50) | function $b(a,b,c){if(ca(a,"beforeSelectionChange")||a.cm&&ca(a.cm,"befo...
  function je (line 51) | function je(a,b){b.equals(a.sel)||(a.sel=b,a.cm&&(a.cm.curOp.updateInput...
  function me (line 51) | function me(a){je(a,ke(a,a.sel,null,!1),oa)}
  function ke (line 51) | function ke(a,b,c,d){for(var e,f=0;f<b.ranges.length;f++){var g=b.ranges...
  function Za (line 52) | function Za(a,b,c,d,e){var f=w(a,b.line);if(f.markedSpans)for(var g=0;g<...
  function cd (line 53) | function cd(a,b,c,d,e){d=d||1;b=Za(a,b,c,d,e)||!e&&Za(a,b,c,d,!0)||Za(a,...
  function ne (line 53) | function ne(a,b,c,d){return 0>c&&0==b.ch?b.line>a.first?z(a,q(b.line-1))...
  function sb (line 54) | function sb(a){a.display.input.showSelection(a.display.input.prepareSele...
  function oe (line 54) | function oe(a,b){for(var c=a.doc,d={},e=d.cursors=document.createDocumen...
  function pe (line 55) | function pe(a,b,c){b=sa(a,b,"div",null,null,!a.options.singleCursorHeigh...
  function If (line 55) | function If(a,b,c){function d(a,
  function dd (line 58) | function dd(a){if(a.state.focused){var b=a.display;clearInterval(b.blink...
  function kb (line 59) | function kb(a,b){a.doc.mode.startState&&a.doc.frontier<a.display.viewTo&...
  function Kf (line 59) | function Kf(a){var b=a.doc;b.frontier<b.first&&(b.frontier=b.first);if(!...
  function Lf (line 61) | function Lf(a,b,c){for(var d,e,f=a.doc,g=c?-1:b-(a.doc.mode.innerMode?1E...
  function yb (line 61) | function yb(a,b,c){var d=a.doc,e=a.display;if(!d.mode.startState)return!...
  function Kc (line 62) | function Kc(a){return a.mover.offsetHeight-a.lineSpace.offsetHeight}
  function qe (line 62) | function qe(a){if(a.cachedPaddingH)return a.cachedPaddingH;var b=Y(a.mea...
  function ka (line 62) | function ka(a){return Ld-a.display.nativeBarWidth}
  function Ga (line 62) | function Ga(a){return a.display.scroller.clientWidth-
  function Tc (line 63) | function Tc(a){return a.display.scroller.clientHeight-ka(a)-a.display.ba...
  function de (line 63) | function de(a,b,c){if(a.line==b)return{map:a.measure.map,cache:a.measure...
  function $c (line 63) | function $c(a,b){if(b>=a.display.viewFrom&&b<a.display.viewTo)return a.d...
  function cc (line 64) | function cc(a,b){var c=F(b),d=$c(a,c);d&&!d.text?d=null:d&&d.changes&&(R...
  function dc (line 64) | function dc(a,b,c,d,e){b.before&&(c=-1);var f=c+(d||"");if(b.cache.hasOw...
  function ee (line 69) | function ee(a,b,c){for(var d,e,f,g,h=0;h<a.length;h+=3){var k=a[h],m=a[h...
  function ue (line 70) | function ue(a){if(a.measure&&(a.measure.cache={},a.measure.heights=null,...
  function ve (line 70) | function ve(a){a.display.externalMeasure=null;wa(a.display.lineMeasure);...
  function mb (line 70) | function mb(a){ve(a);a.display.cachedCharWidth=a.display.cachedTextHeigh...
  function gd (line 70) | function gd(a,b,c,d){if(b.widgets)for(var e=
  function we (line 72) | function we(a,b,c){if("div"==c)return b;var d=b.left;b=b.top;"page"==c?(...
  function bc (line 72) | function bc(a,b,c,d,e){d||(d=w(a.doc,b.line));var f=d;b=b.ch;d=dc(a,cc(a...
  function sa (line 73) | function sa(a,b,c,d,e,f){function g(b,g){b=dc(a,e,b,g?"right":"left",f);...
  function xe (line 73) | function xe(a,
  function ec (line 74) | function ec(a,b,c,d){a=q(a,b);a.xRel=d;c&&(a.outside=!0);return a}
  function jd (line 74) | function jd(a,b,c){var d=a.doc;c+=a.display.viewOffset;if(0>c)return ec(...
  function Nf (line 75) | function Nf(a,b,c,d,e){function f(d){d=sa(a,q(c,d),"line",b,m);h=!0;if(g...
  function Ca (line 76) | function Ca(a){if(null!=a.cachedTextHeight)return a.cachedTextHeight;if(...
  function lb (line 77) | function lb(a){if(null!=a.cachedCharWidth)return a.cachedCharWidth;var b...
  function Ra (line 77) | function Ra(a){a.curOp={cm:a,viewChanged:!1,startHeight:a.doc.height,for...
  function Ta (line 78) | function Ta(a){if(a=a.curOp.ownsGroup)try{var b=a.delayedCallbacks,c=0;d...
  function X (line 86) | function X(a,b){if(a.curOp)return b();Ra(a);try{return b()}finally{Ta(a)}}
  function H (line 86) | function H(a,b){return function(){if(a.curOp)return b.apply(a,arguments)...
  function O (line 87) | function O(a){return function(){if(this.curOp)return a.apply(this,argume...
  function Q (line 87) | function Q(a){return function(){var b=this.cm;if(!b||b.curOp)return a.ap...
  function se (line 87) | function se(a,b,c){for(var d=this.line=b,e;d=Ea(d,!1);)d=d.find(1,!0).li...
  function Sb (line 88) | function Sb(a,b,c){var d=[],e;for(e=b;e<c;)b=new se(a.doc,w(a.doc,e),e),...
  function P (line 88) | function P(a,b,c,d){null==b&&(b=a.doc.first);null==c&&(c=a.doc.first+a.d...
  function ta (line 89) | function ta(a,b,c){a.curOp.viewChanged=!0;var d=a.display,
  function xa (line 90) | function xa(a){a.display.viewFrom=a.display.viewTo=a.doc.first;a.display...
  function Ha (line 90) | function Ha(a,b){if(b>=a.display.viewTo)return null;b-=a.display.viewFro...
  function ic (line 90) | function ic(a,b,c,d){var e=Ha(a,
  function Nd (line 91) | function Nd(a){a=a.display.view;for(var b=0,c=0;c<a.length;c++){var d=a[...
  function Bf (line 91) | function Bf(a){function b(){d.activeTouch&&(e=setTimeout(function(){d.ac...
  function Sf (line 97) | function Sf(a){var b=a.display;if(b.lastWrapHeight!=b.wrapper.clientHeig...
  function ua (line 97) | function ua(a,b){for(b=b.target||b.srcElement;b!=a.wrapper;b=b.parentNod...
  function Ka (line 97) | function Ka(a,
  function Qf (line 98) | function Qf(a){var b=this.display;if(!(D(this,a)||b.activeTouch&&b.input...
  function Tf (line 99) | function Tf(a,b,c){B?setTimeout(Ec(Xd,a),
  function Wf (line 100) | function Wf(a,b,c,d){var e=a.display,f=+new Date,g=H(a,function(h){M&&(e...
  function Xf (line 101) | function Xf(a,b,c,d,e){function f(b){if(0!=t(r,b))if(r=b,"rect"==d){for(...
  function ld (line 105) | function ld(a,
  function Rf (line 106) | function Rf(a){var b=this;Ce(b);if(!D(b,a)&&!ua(b.display,a)){R(a);B&&(A...
  function Ce (line 108) | function Ce(a){a.display.dragCursor&&(a.display.lineSpace.removeChild(a....
  function qb (line 109) | function qb(a,b){2>Math.abs(a.doc.scrollTop-b)||(a.doc.scrollTop=b,va||V...
  function Ua (line 109) | function Ua(a,b,c){(c?b==a.doc.scrollLeft:2>Math.abs(a.doc.scrollLeft-b)...
  function ze (line 110) | function ze(a,b){var c=Ie(b),d=c.x,c=c.y,e=a.display,f=e.scroller,g=f.sc...
  function nc (line 112) | function nc(a,b,c){if("string"==typeof b&&(b=oc[b],!b))return!1;a.displa...
  function Zf (line 112) | function Zf(a,b,c){for(var d=0;d<a.state.keyMaps.length;d++){var e=Cb(b,...
  function pc (line 112) | function pc(a,b,c,d){var e=a.state.keySeq;
  function Ke (line 113) | function Ke(a,b){var c=bg(b,!0);return c?b.shiftKey&&!a.state.keySeq?pc(...
  function cg (line 114) | function cg(a,b,c){return pc(a,"'"+c+"'",b,function(b){return nc(a,b,!0)})}
  function Ee (line 114) | function Ee(a){this.curOp.focus=ma();if(!D(this,a)){B&&11>A&&27==a.keyCo...
  function dg (line 114) | function dg(a){function b(a){18!=a.keyCode&&a.altKey||
  function De (line 115) | function De(a){16==a.keyCode&&(this.doc.sel.shift=!1);D(this,a)}
  function Fe (line 115) | function Fe(a){if(!(ua(this.display,a)||D(this,a)||a.ctrlKey&&!a.altKey|...
  function Uf (line 116) | function Uf(a){a.state.delayingBlurEvent=!0;setTimeout(function(){a.stat...
  function Fc (line 116) | function Fc(a,b){a.state.delayingBlurEvent&&(a.state.delayingBlurEvent=!...
  function jb (line 117) | function jb(a,b){a.state.delayingBlurEvent||(a.state.focused&&(L(a,"blur...
  function ye (line 117) | function ye(a,b){var c;(c=ua(a.display,b))||(c=ca(a,"gutterContextMenu")...
  function Me (line 117) | function Me(a,b){if(0>t(a,b.from))return a;if(0>=t(a,b.to))return La(b);...
  function qd (line 118) | function qd(a,b){for(var c=[],d=0;d<a.sel.ranges.length;d++){var e=a.sel...
  function Ne (line 118) | function Ne(a,b,c){return a.line==b.line?q(c.line,a.ch-b.ch+c.ch):q(c.li...
  function Oe (line 118) | function Oe(a,b,c){b={canceled:!1,from:b.from,to:b.to,text:b.text,origin...
  function Wa (line 119) | function Wa(a,b,c){if(a.cm){if(!a.cm.curOp)return H(a.cm,Wa)(a,b,c);if(a...
  function Qe (line 120) | function Qe(a,b){if(1!=b.text.length||""!=b.text[0]||0!=t(b.from,b.to)){...
  function qc (line 120) | function qc(a,b,c){if(!a.cm||!a.cm.state.suppressEdits||c){for(var d=a.h...
  function Ue (line 122) | function Ue(a,b){if(0!=b&&(a.first+=b,a.sel=new ra(Wb(a.sel.ranges,funct...
  function Db (line 122) | function Db(a,b,c,d){if(a.cm&&!a.cm.curOp)return H(a.cm,Db)(a,b,c,d);if(...
  function fg (line 123) | function fg(a,b,c){var d=a.doc,e=a.display,f=b.from,g=b.to,h=!1,k=f.line...
  function bb (line 125) | function bb(a,b,c,d,e){d||(d=c);if(0>t(d,c)){var f=d;d=c;c=f}"string"==t...
  function hc (line 125) | function hc(a,b,c,d,e){var f=a.display,g=Ca(a.display);0>c&&(c=0);var h=...
  function rc (line 126) | function rc(a,b,c){null==b&&null==c||sc(a);null!=b&&(a.curOp.scrollLeft=...
  function Xa (line 127) | function Xa(a){sc(a);var b=a.getCursor(),c=b,d=b;a.options.lineWrapping|...
  function sc (line 127) | function sc(a){var b=a.curOp.scrollToPos;if(b){a.curOp.scrollToPos=null;...
  function ub (line 128) | function ub(a,b,c,d){var e=a.doc,f;null==c&&(c="add");"smart"==c&&(e.mod...
  function tc (line 129) | function tc(a,b,c,d){var e=b,f=b;"number"==typeof b?f=w(a,Math.max(a.fir...
  function cb (line 130) | function cb(a,b){for(var c=a.doc.sel.ranges,d=[],e=0;e<c.length;e++){for...
  function vd (line 130) | function vd(a,b,c,d,e){function f(b){var d=(e?kd:We)(m,h,c,!0);if(null==...
  function Xe (line 131) | function Xe(a,
  function x (line 132) | function x(a,b,c,d){l.defaults[a]=b;c&&(Sa[a]=d?function(a,b,d){d!=Jd&&c...
  function gg (line 132) | function gg(a){var b=a.split(/-(?!$)/);a=b[b.length-1];for(var c,d,e,f,g...
  function vc (line 133) | function vc(a){return"string"==typeof a?Aa[a]:a}
  function db (line 133) | function db(a,b,c,d,e){if(d&&d.shared)return hg(a,b,c,d,e);if(a.cm&&!a.c...
  function hg (line 136) | function hg(a,b,c,d,e){d=da(d);d.shared=!1;var f=[db(a,b,c,d,e)],g=f[0],...
  function Ze (line 137) | function Ze(a){return a.findMarks(q(a.first,0),a.clipPos(q(a.lastLine())...
  function ig (line 137) | function ig(a){for(var b=0;b<a.length;b++){var c=a[b],d=[c.primary.doc];...
  function wc (line 137) | function wc(a,b,c){this.marker=a;this.from=b;this.to=c}
  function Eb (line 137) | function Eb(a,b){if(a)for(var c=0;c<a.length;++c){var d=a[c];if(d.marker...
  function rd (line 137) | function rd(a,b){if(b.full)return null;
  function $e (line 140) | function $e(a){for(var b=0;b<a.length;++b){var c=a[b];null!=c.from&&c.fr...
  function Te (line 140) | function Te(a,b){var c;if(c=b["spans_"+a.id]){for(var d=0,e=[];d<b.text....
  function eg (line 141) | function eg(a,b,c){var d=null;a.iter(b.line,c.line+1,function(a){if(a.ma...
  function af (line 142) | function af(a){var b=a.markedSpans;if(b){for(var c=0;c<b.length;++c)b[c]...
  function bf (line 142) | function bf(a,b){if(b){for(var c=0;c<b.length;++c)b[c].marker.attachLine...
  function cf (line 142) | function cf(a,
  function Ea (line 143) | function Ea(a,b){a=ya&&a.markedSpans;var c;if(a)for(var d,e=0;e<a.length...
  function Ye (line 143) | function Ye(a,b,c,d,e){a=w(a,b);if(a=ya&&a.markedSpans)for(b=0;b<a.lengt...
  function pa (line 144) | function pa(a){for(var b;b=Ea(a,!0);)a=b.find(-1,!0).line;return a}
  function Sc (line 144) | function Sc(a,b){a=w(a,b);var c=pa(a);return a==c?b:F(c)}
  function Od (line 144) | function Od(a,b){if(b>a.lastLine())return b;
  function Da (line 145) | function Da(a,b){var c=ya&&b.markedSpans;if(c)for(var d,e=0;e<c.length;+...
  function xd (line 145) | function xd(a,b,c){if(null==c.to)return b=c.marker.find(1,!0),xd(a,b.lin...
  function Ab (line 146) | function Ab(a){if(null!=a.height)return a.height;var b=a.doc.cm;if(!b)re...
  function kg (line 147) | function kg(a,b,c,d){var e=new yc(a,c,d),f=a.cm;f&&e.noHScroll&&(f.displ...
  function df (line 147) | function df(a,b){if(a)for(;;){var c=a.match(/(?:^|\s+)line-(background-)...
  function ef (line 148) | function ef(a,b){if(a.blankLine)return a.blankLine(b);if(a.innerMode&&(a...
  function yd (line 148) | function yd(a,b,c,d){for(var e=0;10>e;e++){d&&(d[0]=l.innerMode(a,c).mod...
  function ff (line 148) | function ff(a,b,c,d){function e(a){return{start:p.start,
  function gf (line 149) | function gf(a,b,c,d,e,f,g){var h=c.flattenSpans;null==h&&(h=a.options.fl...
  function re (line 150) | function re(a,b,c,d){var e=[a.state.modeGen],f={};gf(a,b.text,a.doc.mode...
  function hf (line 151) | function hf(a,b,c){if(!b.styles||b.styles[0]!=a.state.modeGen){var d=yb(...
  function ed (line 152) | function ed(a,b,c,d){var e=a.doc.mode;a=new zc(b,a.options.tabSize);a.st...
  function jf (line 152) | function jf(a,b){if(!a||/^\s*$/.test(a))return null;b=b.addModeClass?lg:...
  function Vd (line 152) | function Vd(a,b){var c=r("span",null,null,M?"padding-right: .1px":null),...
  function ng (line 157) | function ng(a,b,c,d,e,f,g){if(b){var h;if(a.splitSpaces)if(h=a.trailingS...
  function og (line 160) | function og(a,b){return function(c,d,e,f,g,h,k){e=e?e+" cm-force-border"...
  function kf (line 160) | function kf(a,b,c,d){var e=!d&&c.widgetNode;e&&a.map.push(a.pos,a.pos+b,...
  function Ve (line 161) | function Ve(a,b){return 0==b.from.ch&&0==b.to.ch&&""==C(b.text)&&(!a.cm|...
  function td (line 161) | function td(a,b,c,d){function e(a,c,e){a.text=c;a.stateAfter&&(a.stateAf...
  function Gb (line 163) | function Gb(a){this.lines=a;this.parent=null;for(var b=0,c=0;b<a.length;...
  function Hb (line 163) | function Hb(a){this.children=a;for(var b=0,c=0,d=0;d<a.length;++d){var e...
  function Ma (line 164) | function Ma(a,b,c){function d(a,f,g){if(a.linked)for(var e=0;e<a.linked....
  function Id (line 164) | function Id(a,b){if(b.cm)throw Error("This document is already in use.")...
  function w (line 164) | function w(a,b){b-=a.first;if(0>b||b>=a.size)throw Error("There is no li...
  function Ia (line 165) | function Ia(a,b,c){var d=[],e=b.line;a.iter(b.line,c.line+1,function(a){...
  function Bd (line 165) | function Bd(a,b,c){var d=[];a.iter(b,c,function(a){d.push(a.text)});retu...
  function ja (line 165) | function ja(a,b){if(b-=a.height)for(;a;a=a.parent)a.height+=b}
  function F (line 165) | function F(a){if(null==a.parent)return null;var b=a.parent;a=N(b.lines,a...
  function Fa (line 166) | function Fa(a,b){var c=a.first;a:do{for(var d=0;d<a.children.length;++d)...
  function la (line 166) | function la(a){a=pa(a);for(var b=0,c=a.parent,d=0;d<c.lines.length;++d){...
  function fa (line 167) | function fa(a){var b=a.order;null==b&&(b=a.order=qg(a.text));return b}
  function Ac (line 167) | function Ac(a){this.done=[];this.undone=[];this.undoDepth=Infinity;this....
  function sd (line 167) | function sd(a,b){var c={from:Xc(b.from),to:La(b),text:Ia(a,b.from,b.to)}...
  function ie (line 167) | function ie(a){for(;a.length;)if(C(a).ranges)a.pop();
  function Re (line 168) | function Re(a,b,c,d){var e=a.history;e.undone.length=0;var f=+new Date,g...
  function ac (line 169) | function ac(a,b){var c=C(b);c&&c.ranges&&c.equals(a)||b.push(a)}
  function lf (line 169) | function lf(a,b,c,d){var e=b["spans_"+a.id],f=0;a.iter(Math.max(a.first,...
  function jg (line 170) | function jg(a){if(!a)return null;for(var b=0,c;b<a.length;++b)a[b].marke...
  function eb (line 170) | function eb(a,b,c){for(var d=0,e=[];d<a.length;++d){var f=a[d];if(f.rang...
  function mf (line 171) | function mf(a,b,c,d){c<a.line?a.line+=d:b<a.line&&(a.line=b,a.ch=0)}
  function nf (line 171) | function nf(a,b,c,d){for(var e=0;e<a.length;++e){var f=a[e],g=!0;if(f.ra...
  function Se (line 172) | function Se(a,b){var c=b.from.line,d=b.to.line;b=b.text.length-(d-c)-1;n...
  function od (line 172) | function od(a){return null!=a.defaultPrevented?a.defaultPrevented:0==a.r...
  function Ge (line 172) | function Ge(a){var b=a.which;null==b&&(a.button&1?b=1:a.button&2?b=3:a.b...
  function Bc (line 172) | function Bc(a,b,c){a=a._handlers&&a._handlers[b];return c?a&&0<a.length?...
  function V (line 172) | function V(a,b){function c(a){return function(){a.apply(null,
  function rg (line 173) | function rg(){var a=Ib;Ib=null;for(var b=0;b<a.length;++b)a[b]()}
  function D (line 173) | function D(a,b,c){"string"==typeof b&&(b={type:b,preventDefault:function...
  function le (line 173) | function le(a){var b=a._handlers&&a._handlers.cursorActivity;if(b){a=a.c...
  function ca (line 174) | function ca(a,b){return 0<Bc(a,b).length}
  function fb (line 174) | function fb(a){a.prototype.on=function(a,c){y(this,a,c)};a.prototype.off...
  function Ba (line 174) | function Ba(){this.id=null}
  function ud (line 174) | function ud(a){for(;Cc.length<=a;)Cc.push(C(Cc)+" ");return Cc[a]}
  function C (line 174) | function C(a){return a[a.length-1]}
  function N (line 174) | function N(a,b){for(var c=0;c<a.length;++c)if(a[c]==b)return c;return-1}
  function Wb (line 174) | function Wb(a,b){for(var c=[],d=0;d<a.length;d++)c[d]=b(a[d],d);return c}
  function sg (line 175) | function sg(a,b,c){for(var d=0,e=c(b);d<a.length&&c(a[d])<=e;)d++;a.spli...
  function Jb (line 175) | function Jb(){}
  function pf (line 175) | function pf(a,b){Object.create?a=Object.create(a):(Jb.prototype=a,a=new ...
  function da (line 175) | function da(a,b,c){b||(b={});for(var d in a)!a.hasOwnProperty(d)||!1===c...
  function Ec (line 175) | function Ec(a){var b=Array.prototype.slice.call(arguments,1);return func...
  function uc (line 175) | function uc(a,b){return b?-1<b.source.indexOf("\\w")&&qf(a)?!0:b.test(a)...
  function rf (line 175) | function rf(a){for(var b in a)if(a.hasOwnProperty(b)&&
  function zb (line 176) | function zb(a){return 768<=a.charCodeAt(0)&&tg.test(a)}
  function r (line 176) | function r(a,b,c,d){a=document.createElement(a);c&&(a.className=c);d&&(a...
  function wa (line 176) | function wa(a){for(var b=a.childNodes.length;0<b;--b)a.removeChild(a.fir...
  function Y (line 176) | function Y(a,b){return wa(a).appendChild(b)}
  function ma (line 176) | function ma(){for(var a=document.activeElement;a&&a.root&&a.root.activeE...
  function Kb (line 177) | function Kb(a){return new RegExp("(^|\\s)"+a+"(?:$|\\s)\\s*")}
  function Ad (line 177) | function Ad(a,b){a=a.split(" ");for(var c=0;c<a.length;c++)a[c]&&!Kb(a[c...
  function sf (line 177) | function sf(a){if(document.body.getElementsByClassName)for(var b=documen...
  function Cf (line 177) | function Cf(){var a;y(window,"resize",function(){null==a&&(a=setTimeout(...
  function pg (line 178) | function pg(a){if(null==Cd){var b=r("span","\u200b");Y(a,r("span",[b,doc...
  function Jf (line 178) | function Jf(a,b,c,d){if(!a)return d(b,c,"ltr");for(var e=!1,f=0;f<a.leng...
  function hd (line 179) | function hd(a){return a.level%2?a.to:a.from}
  function id (line 179) | function id(a){return a.level%2?a.from:a.to}
  function fc (line 179) | function fc(a){return(a=fa(a))?hd(a[0]):0}
  function gc (line 179) | function gc(a){var b=fa(a);return b?id(C(b)):a.text.length}
  function tf (line 179) | function tf(a,b){var c=w(a.doc,b);a=pa(c);a!=c&&(b=F(a));a=(c=fa(a))?c[0...
  function uf (line 179) | function uf(a,b){var c=tf(a,b.line);a=w(a.doc,c.line);var d=fa(a);return...
  function Xb (line 179) | function Xb(a,
  function Dd (line 180) | function Dd(a,b,c,d){if(!d)return b+c;do b+=c;while(0<b&&zb(a.text.charA...
  function kd (line 180) | function kd(a,b,c,d){var e=fa(a);if(!e)return We(a,b,c,d);var f=Xb(e,b),...
  function We (line 181) | function We(a,b,c,d){b+=c;if(d)for(;0<b&&zb(a.text.charAt(b));)b+=c;retu...
  function c (line 185) | function c(){var d=a.getBoundingClientRect();document.elementFromPoint(d...
  function b (line 187) | function b(a){if(!D(d,a)){if(d.somethingSelected())T={lineWise:!1,text:d...
  function a (line 192) | function a(){c.poll()||b?(c.pollingFast=!1,c.slowPoll()):(b=!0,c.polling...
  function b (line 194) | function b(){if(null!=g.selectionStart){var a=e.somethingSelected(),
  function c (line 195) | function c(){d.contextMenuPending=!1;d.wrapper.style.cssText=p;g.style.c...
  function b (line 198) | function b(a){if(!D(d,a)){if(d.somethingSelected())T={lineWise:!1,text:d...
  function a (line 205) | function a(){b.cm.state.focused&&(b.pollSelection(),b.polling.set(b.cm.o...
  function c (line 229) | function c(a){return"number"==typeof a||/^\d+$/.test(String(a))?a+"px":a}
  function c (line 257) | function c(){a.value=h.getValue()}
  function a (line 297) | function a(a){return 247>=a?"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNN...
  function b (line 298) | function b(a,b,c){this.level=a;this.from=b;this.to=c}

FILE: app/src/main/assets/code_mirror/mode/asciiarmor/asciiarmor.js
  function d (line 1) | function d(a){var b=a.match(/^\s*\S/);a.skipToEnd();return b?"error":null}

FILE: app/src/main/assets/code_mirror/mode/asn.1/asn.1.js
  function e (line 1) | function e(e){var b={};e=e.split(" ");for(var f=0;f<e.length;++f)b[e[f]]...
  function f (line 1) | function f(a,c){var d=a.next();if('"'==d||"'"==d)return c.tokenize=n(d),...
  function n (line 3) | function n(a){return function(c,d){for(var e=!1,b,f=!1;null!=(b=c.next()...
  function m (line 3) | function m(a,c,d,b,e){this.indented=a;this.column=c;this.type=d;this.ali...
  function k (line 3) | function k(a,c,d){var b=a.indented;a.context&&"statement"==a.context.typ...
  function h (line 3) | function h(a){var c=a.context.type;

FILE: app/src/main/assets/code_mirror/mode/asterisk/asterisk.js
  function c (line 1) | function c(a,b){var d,c=a.next();if(";"==c)return a.skipToEnd(),"comment...

FILE: app/src/main/assets/code_mirror/mode/clike/clike.js
  function D (line 1) | function D(a,b,e,c,g,m){this.indented=a;this.column=b;this.type=e;this.i...
  function z (line 1) | function z(a,b,c,r){var e=a.indented;a.context&&"statement"!=a.context.t...
  function x (line 1) | function x(a){var b=a.context.type;
  function H (line 2) | function H(a,b,c){if("variable"==b.prevToken||"variable-3"==b.prevToken|...
  function I (line 2) | function I(a){for(;;){if(!a||"top"==a.type)return!0;if("}"==a.type&&"nam...
  function c (line 2) | function c(a){var b={};a=a.split(" ");for(var c=0;c<a.length;++c)b[a[c]]...
  function t (line 2) | function t(a,b){return"function"===
  function n (line 3) | function n(a,b){if(!b.startOfLine)return!1;for(var c,r=null;c=a.peek();)...
  function A (line 3) | function A(a,b){return"variable-3"==b.prevToken?"variable-3":!1}
  function h (line 3) | function h(a){a.eatWhile(/[\w\.']/);return"number"}
  function u (line 3) | function u(a,b){a.backUp(1);if(a.match(/(R|u8R|uR|UR|LR)/)){var c=a.matc...
  function y (line 4) | function y(a,b){for(var c;null!=(c=a.next());)if('"'==c&&!a.eat('"')){b....
  function B (line 4) | function B(a,b){var c=b.cpp11RawStringDelim.replace(/[^\w\s]/g,"\\$&");a...
  function k (line 4) | function k(a,b){function c(a){if(a)for(var b in a)a.hasOwnProperty(b)&&r...
  function E (line 5) | function E(a,b){for(var c=!1;!a.eol();){if(!c&&a.match('"""')){b.tokeniz...
  function F (line 5) | function F(a){return function(b,c){for(var e=!1,g,m=!1;!b.eol();){if(!a&...
  function C (line 5) | function C(a){return function(b,
  function c (line 6) | function c(a,b){var c=a.next();if(w[c]){var p=w[c](a,b);if(!1!==p)return...
  function k (line 7) | function k(a){return function(b,c){for(var d=!1,p,f=!1;null!=(p=b.next()...
  function g (line 8) | function g(a,b){for(var c=!1,p;p=a.next();){if("/"==p&&c){b.tokenize=nul...
  function m (line 8) | function m(a,c){b.typeFirstDefinitions&&a.eol()&&I(c.context)&&(c.typeAt...

FILE: app/src/main/assets/code_mirror/mode/clojure/clojure.js
  function f (line 1) | function f(a){var c={};a=a.split(" ");for(var b=0;b<a.length;++b)c[a[b]]...
  function h (line 1) | function h(a,c,b){this.indent=a;this.type=c;this.prev=b}

FILE: app/src/main/assets/code_mirror/mode/cmake/cmake.js
  function b (line 1) | function b(a,d){for(var c,b,e=!1;!a.eol()&&(c=a.next())!=d.pending;){if(...
  function f (line 1) | function f(a,d){var c=a.next();if("$"===c)return a.match(g)?"variable-2":

FILE: app/src/main/assets/code_mirror/mode/cobol/cobol.js
  function c (line 1) | function c(a){var b={};a=a.split(" ");for(var d=0;d<a.length;++d)b[a[d]]...

FILE: app/src/main/assets/code_mirror/mode/coffeescript/coffeescript.js
  function k (line 1) | function k(a){return new RegExp("^(("+a.join(")|(")+"))\\b")}
  function h (line 1) | function h(a,b){if(a.sol()){null===b.scope.align&&(b.scope.align=!1);var...
  function p (line 3) | function p(a,b,c){return function(d,
  function u (line 4) | function u(a,b){for(;!a.eol();){a.eatWhile(/[^#]/);if(a.match("###")){b....
  function n (line 4) | function n(a,b,c){c=c||"coffee";for(var d=0,f=!1,r=null,g=b.scope;g;g=g....
  function m (line 5) | function m(a,b){if(b.scope.prev){if("coffee"===b.scope.type){a=a.indenta...

FILE: app/src/main/assets/code_mirror/mode/commonlisp/commonlisp.js
  function g (line 1) | function g(a){for(var b;b=a.next();)if("\\"==b)a.next();else if(!k.test(...
  function f (line 1) | function f(a,b){if(a.eatSpace())return d="ws",null;if(a.match(l))return"...
  function m (line 3) | function m(a,b){for(var c=!1,d;d=a.next();){if('"'==d&&!c){b.tokenize=f;...
  function n (line 3) | function n(a,b){for(var c,e;c=a.next();){if("#"==c&&"|"==e){b.tokenize=f...

FILE: app/src/main/assets/code_mirror/mode/crystal/crystal.js
  function m (line 1) | function m(a,b){return new RegExp((b?"":"^")+"(?:"+a.join("|")+")"+(b?"$...
  function h (line 1) | function h(a,b,c){c.tokenize.push(a);return a(b,c)}
  function r (line 1) | function r(a,b){if(a.eatSpace())return null;if("\\"!=b.lastToken&&a.matc...
  function q (line 5) | function q(a,b,c,e){return function(d,f){if(!e&&d.match(a))return f.toke...
  function n (line 5) | function n(a,b,c){return function(e,d){return!c&&e.match("{"+a)?(d.curre...
  function A (line 6) | function A(a,b){if(a.eatSpace())return null;a.match(k)?a.eat(/[!?]/):a.m...
  function l (line 6) | function l(a,b){if(a.eatSpace())return null;a.match(p);b.tokenize.pop();...
  function t (line 6) | function t(a,b,c){return function(e,d){for(var f=!1;e.peek();)if(f)e.nex...

FILE: app/src/main/assets/code_mirror/mode/css/css.js
  function l (line 1) | function l(d){for(var e={},f=0;f<d.length;++f)e[d[f]]=!0;return e}
  function m (line 1) | function m(d,e){for(var f=!1,k;null!=(k=d.next());){if(f&&"/"==k){e.toke...
  function f (line 1) | function f(a,c){K=c;return a}
  function l (line 1) | function l(a,c){var b=a.next();if(w[b]){var d=
  function m (line 3) | function m(a){return function(c,
  function y (line 4) | function y(a,c){a.next();a.match(/\s*[\"\')]/,!1)?c.tokenize=null:c.toke...
  function r (line 4) | function r(a,c,b){this.type=a;this.indent=c;this.prev=b}
  function h (line 4) | function h(a,c,b,d){a.context=new r(b,c.indentation()+(!1===d?0:v),a.con...
  function n (line 4) | function n(a){a.context.prev&&(a.context=a.context.prev);return a.contex...
  function q (line 4) | function q(a,c,b,d){for(d=
  function t (line 5) | function t(a){a=a.current().toLowerCase();g=F.hasOwnProperty(a)?"atom":E...

FILE: app/src/main/assets/code_mirror/mode/d/d.js
  function h (line 1) | function h(k){var g={};k=k.split(" ");for(var f=0;f<k.length;++f)g[k[f]]...
  function h (line 1) | function h(a,b){var c=a.next();if(q[c]){var d=q[c](a,b);if(!1!==d)return...
  function v (line 3) | function v(a){return function(b,c){for(var d=!1,e,f=!1;null!=(e=b.next()...
  function n (line 3) | function n(a,b){for(var c=!1,d;d=a.next();){if("/"==d&&c){b.tokenize=nul...
  function u (line 3) | function u(a,b,c,d,e){this.indented=a;this.column=b;this.type=c;this.ali...
  function m (line 3) | function m(a,b,c){var d=a.indented;a.context&&"statement"==a.context.type&&
  function l (line 4) | function l(a){var b=a.context.type;if(")"==b||"]"==b||"}"==b)a.indented=...

FILE: app/src/main/assets/code_mirror/mode/dart/dart.js
  function d (line 1) | function d(b){for(var a={},c=0;c<b.length;++c)a[b[c]]=!0;return a}
  function f (line 1) | function f(b,a,c,e){function d(a,c){for(var d=!1;!a.eol();){if(!e&&!d&&"...
  function n (line 2) | function n(b,a){b.eat("$");b.eat("{")?a.tokenize=null:a.tokenize=p;retur...
  function p (line 2) | function p(b,a){b.eatWhile(/[\w_]/);a.tokenize=(a.interpolationStack||(a...
  function g (line 2) | function g(b){return function(a,c){for(var d;d=a.next();)if("*"==d&&a.ea...

FILE: app/src/main/assets/code_mirror/mode/django/django.js
  function c (line 1) | function c(b,a){if(b.match("{{"))return a.tokenize=m,"tag";if(b.match("{...
  function d (line 2) | function d(b,a){return function(c,d){!d.escapeNext&&c.eat(b)?d.tokenize=...
  function m (line 2) | function m(b,a){if(a.waitDot){a.waitDot=!1;if("."!=b.peek())return"null"...
  function l (line 4) | function l(b,a){if(a.waitDot){a.waitDot=!1;if("."!=b.peek())return"null"...
  function n (line 6) | function n(b,a){b.match(/^.*?#\}/)?a.tokenize=c:b.skipToEnd();return"com...
  function p (line 6) | function p(b,

FILE: app/src/main/assets/code_mirror/mode/dtd/dtd.js
  function f (line 1) | function f(b,a){d=a;return b}
  function g (line 1) | function g(b,a){var c=b.next();if("<"==c&&b.eat("!")){if(b.eatWhile(/[\-...
  function h (line 2) | function h(b,a){for(var c=0,d;null!=(d=
  function l (line 3) | function l(b){return function(a,c){for(var d=!1,e;null!=(e=a.next());){i...
  function k (line 3) | function k(b,a){return function(c,d){for(;!c.eol();){if(c.match(a)){d.to...

FILE: app/src/main/assets/code_mirror/mode/dylan/dylan.js
  function k (line 1) | function k(a,e,b){e.tokenize=b;return b(a,e)}
  function l (line 1) | function l(a,e){var b=a.peek();if("'"==b||'"'==b)return a.next(),k(a,e,m...
  function q (line 4) | function q(a,c){for(var b=!1,e=!1,d=0,g;g=a.next();){if("/"==g&&b)if(0<d...
  function m (line 4) | function m(a,c){return function(b,e){for(var d=!1,g,f=!1;null!=(g=b.next...

FILE: app/src/main/assets/code_mirror/mode/ecl/ecl.js
  function f (line 1) | function f(a){var b={};a=a.split(" ");for(var c=0;c<a.length;++c)b[a[c]]...
  function l (line 1) | function l(a,b){var c=a.next();if(p[c]){var g=p[c](a,b);if(!1!==g)return...
  function v (line 3) | function v(a){return function(b,c){for(var g=!1,d,e=!1;null!=(d=b.next()...
  function q (line 4) | function q(a,b){for(var c=!1,d;d=a.next();){if("/"==d&&c){b.tokenize=l;b...
  function u (line 4) | function u(a,b,c,d,e){this.indented=a;this.column=b;this.type=c;this.ali...
  function m (line 4) | function m(a,b,c){return a.context=new u(a.indented,b,c,null,a.context)}
  function k (line 4) | function k(a){var b=a.context.type;if(")"==b||"]"==b||"}"==b)a.indented=...

FILE: app/src/main/assets/code_mirror/mode/eiffel/eiffel.js
  function d (line 1) | function d(b){for(var a={},c=0,d=b.length;c<d;++c)a[b[c]]=!0;return a}
  function e (line 1) | function e(b,a){if(b.eatSpace())return null;var c=b.next();return'"'==c|...
  function h (line 2) | function h(b,a,c){return function(d,e){for(var f=!1,g;null!=(g=d.next())...

FILE: app/src/main/assets/code_mirror/mode/elm/elm.js
  function d (line 1) | function d(a,c,b){c(b);return b(a,c)}
  function f (line 1) | function f(){return function(a,c){if(a.eatWhile(h))return null;var b=a.n...
  function k (line 3) | function k(a,c){return 0==c?f():function(b,d){for(var e=c;!b.eol();){var...
  function l (line 3) | function l(a,c){for(;!a.eol();){var b=a.next();if('"'==b)return c(f()),"...
  function v (line 3) | function v(a,c){if(a.eat("\\"))return d(a,c,l);a.next();c(f());return"er...

FILE: app/src/main/assets/code_mirror/mode/erlang/erlang.js
  function z (line 1) | function z(a,b){if(b.in_string)return b.in_string=!n(a,'"',"\\"),c(b,a,"...
  function v (line 5) | function v(a,b,d){if(1==a.current().length&&b.test(a.current())){for(a.b...
  function x (line 5) | function x(a,b,d){if(1==a.current().length&&b.test(a.current())){for(;b....
  function n (line 5) | function n(a,b,d){for(;!a.eol();){var f=a.next();if(f==b)return!0;
  function g (line 6) | function g(a,b){return-1<b.indexOf(a)}
  function c (line 6) | function c(a,b,d){var f;f=b.current();var c=b.column();b=b.indentation()...
  function N (line 8) | function N(a){return{token:a,column:0,indent:0,type:a}}
  function m (line 8) | function m(a,b){var d=a.tokenStack.length;b=b?b:1;return d<b?!1:a.tokenS...
  function M (line 8) | function M(a){if(!a.length)return a;var b=a.length-1;if("dot"===a[b].typ...
  function e (line 9) | function e(a,b){for(var d in b)for(var c=a.length-1,r=b[d],h=c-1;-1<h;h-...
  function O (line 10) | function O(a,b){var d,c=y.indentUnit;b=b.match(/,|[a-z]+|\}|\]|\)|>>|\|+...
  function u (line 12) | function u(a,b){a=a.tokenStack;b=q(a,"token",b);return l(a[b])?a[b]:!1}
  function q (line 12) | function q(a,b,d){for(var c=a.length-1;-1<c;c--)if(g(a[c][b],d))return c...
  function l (line 12) | function l(a){return!1!==a&&null!=a}

FILE: app/src/main/assets/code_mirror/mode/fcl/fcl.js
  function f (line 1) | function f(a,b){var c=a.next();if(/[\d\.]/.test(c))return"."==c?a.match(...
  function h (line 2) | function h(a,b){for(var c=!1,e;e=a.next();){if(("/"==e||")"==e)&&c){b.to...
  function m (line 2) | function m(a,b,c,e,d){this.indented=a;this.column=b;this.type=c;this.ali...

FILE: app/src/main/assets/code_mirror/mode/forth/forth.js
  function e (line 1) | function e(d){var b=[];d.split(" ").forEach(function(a){b.push({name:a})...
  function d (line 2) | function d(b,a){var c;for(c=b.length-1;0<=c;c--)if(b[c].name===a.toUpper...

FILE: app/src/main/assets/code_mirror/mode/fortran/fortran.js
  function b (line 1) | function b(a){for(var d={},c=0;c<a.length;++c)d[a[c]]=!0;return d}
  function g (line 1) | function g(a,d){if(a.match(h))return"operator";var c=a.next();if("!"==c)...
  function k (line 2) | function k(a){return function(d,c){for(var b=!1,f,e=!1;null!=(f=d.next()...

FILE: app/src/main/assets/code_mirror/mode/gas/gas.js
  function n (line 1) | function n(b){f="@";l.syntax="builtin";a.r0="variable";a.r1="variable";a...
  function m (line 2) | function m(a,e){for(var b=!1,d;null!=(d=a.next());){if("/"===d&&b){e.tok...

FILE: app/src/main/assets/code_mirror/mode/go/go.js
  function g (line 1) | function g(a,c){var b=a.next();if('"'==b||"'"==b||"`"==b)return c.tokeni...
  function q (line 2) | function q(a){return function(c,b){for(var d=!1,e,f=!1;null!=(e=c.next()...
  function k (line 3) | function k(a,c){for(var b=!1,d;d=a.next();){if("/"==d&&b){c.tokenize=g;b...
  function m (line 3) | function m(a,c,b,d,e){this.indented=a;this.column=c;this.type=b;this.ali...
  function h (line 3) | function h(a,c,b){return a.context=new m(a.indented,c,b,null,a.context)}
  function n (line 3) | function n(a){if(a.context.prev){var c=a.context.type;if(")"==c||"]"==c|...

FILE: app/src/main/assets/code_mirror/mode/groovy/groovy.js
  function h (line 1) | function h(a){var b={};a=a.split(" ");for(var c=0;c<a.length;++c)b[a[c]]...
  function l (line 1) | function l(a,b){var c=a.next();if('"'==c||"'"==c)return n(c,a,b);if(/[\[...
  function n (line 3) | function n(a,b,c){function d(c,b){for(var d=!1,f,g=!e;null!=(f=c.next())...
  function w (line 3) | function w(){function a(a,
  function p (line 4) | function p(a,b){for(var c=!1,d;d=a.next();){if("/"==d&&c){b.tokenize.pop...
  function m (line 4) | function m(a,b){return!a||"operator"==a||"->"==a||/[\.\[\{\(,;:]/.test(a...
  function q (line 4) | function q(a,b,c,d,e){this.indented=a;this.column=b;this.type=c;this.ali...
  function k (line 4) | function k(a,
  function g (line 5) | function g(a){var b=a.context.type;if(")"==b||"]"==b||"}"==b)a.indented=...

FILE: app/src/main/assets/code_mirror/mode/haml/haml.js
  function l (line 1) | function l(b){return function(a,c){return a.peek()==b&&1==c.rubyState.to...
  function e (line 1) | function e(b,a){return b.match("-#")?
  function f (line 2) | function f(b,a){var c=b.peek();if("comment"==a.previousToken.style&&a.in...

FILE: app/src/main/assets/code_mirror/mode/haskell/haskell.js
  function g (line 1) | function g(a,c,b){c(b);return b(a,c)}
  function f (line 1) | function f(a,c){if(a.eatWhile(l))return null;var b=a.next();if(u.test(b)...
  function m (line 3) | function m(a,c){return 0==c?f:function(b,d){for(var e=c;!b.eol();){var q...
  function n (line 3) | function n(a,c){for(;!a.eol();){var b=a.next();if('"'==b)return c(f),"st...
  function z (line 3) | function z(a,c){if(a.eat("\\"))return g(a,c,n);a.next();c(f);return"error"}
  function a (line 4) | function a(a){return function(){for(var b=0;b<arguments.length;b++)c[arg...

FILE: app/src/main/assets/code_mirror/mode/haxe/haxe.js
  function c (line 1) | function c(a){return{type:a,style:"keyword"}}
  function p (line 1) | function p(a,d){for(var b=!1,k;null!=(k=a.next());){if(k==d&&!b)return!0...
  function n (line 1) | function n(a,d,b){l=a;M=b;return d}
  function A (line 1) | function A(a,d){var b=a.next();if('"'==b||"'"==b)return b=X(b),d.tokeniz...
  function X (line 3) | function X(a){return function(b,c){p(b,a)&&(c.tokenize=A);return n("stri...
  function Y (line 3) | function Y(a,b){for(var d=!1,k;k=a.next();){if("/"==k&&d){b.tokenize=
  function O (line 4) | function O(a,b,c,k,g,f){this.indented=a;this.column=b;this.type=c;this.p...
  function P (line 4) | function P(a){for(var b=g.state,c=b.importedtypes;c;c=c.next)if(c.name==...
  function t (line 4) | function t(){for(var a=arguments.length-1;0<=a;a--)g.cc.push(arguments[a])}
  function b (line 4) | function b(){t.apply(null,arguments);return!0}
  function Q (line 4) | function Q(a,b){for(;b;b=b.next)if(b.name==a)return!0;return!1}
  function B (line 4) | function B(a){var b=g.state;b.context?
  function G (line 5) | function G(){g.state.context||(g.state.localVars=Z);g.state.context={pre...
  function C (line 5) | function C(){g.state.localVars=g.state.context.vars;g.state.context=g.st...
  function h (line 5) | function h(a,b){var d=function(){var d=g.state;d.lexical=new O(d.indente...
  function e (line 5) | function e(){var a=
  function m (line 6) | function m(a){function d(c){return c==a?b():";"==a?t():b(d)}return d}
  function u (line 6) | function u(a){return"@"==a?b(R):"var"==a?b(h("vardef"),H,m(";"),e):"keyw...
  function r (line 7) | function r(a){return V.hasOwnProperty(a)||"type"==a?b(v):"function"==a?b...
  function J (line 7) | function J(a){return a.match(/[;\}\)\],]/)?t():t(r)}
  function v (line 7) | function v(a,d){if("operator"==a&&/\+\+|--/.test(d))return b(v);if("oper...
  function S (line 8) | function S(a){if("attribute"==a)return b(S);if("function"==a)return b(x)...
  function R (line 8) | function R(a){if(":"==a||"variable"==a)return b(R);if("("==a)return b(h(...
  function fa (line 8) | function fa(a){if("variable"==a)return b()}
  function U (line 8) | function U(a,d){if("variable"==a&&/[A-Z]/.test(d.charAt(0)))return P(d),...
  function ca (line 9) | function ca(a,d){if("variable"==a&&/[A-Z]/.test(d.charAt(0)))return P(d)...
  function ba (line 9) | function ba(a){return":"==a?b(e,u):t(v,m(";"),e)}
  function ea (line 9) | function ea(a){if("variable"==a)return g.marked="property",b()}
  function da (line 9) | function da(a){"variable"==a&&(g.marked="property");if(V.hasOwnProperty(...
  function w (line 9) | function w(a,d){function c(k){return","==k?b(a,c):k==d?b():b(m(d))}retur...
  function I (line 9) | function I(a){return"}"==a?b():t(u,I)}
  function H (line 9) | function H(a,d){return"variable"==
  function W (line 10) | function W(a,d){if("="==d)return b(r,W);if(","==a)return b(H)}
  function aa (line 10) | function aa(a,d){return"variable"==a?(B(d),b(ga,r)):t()}
  function ga (line 10) | function ga(a,d){if("in"==d)return b()}
  function x (line 10) | function x(a,d){if("variable"==a||"type"==a)return B(d),b(x);if("new"==d...
  function D (line 10) | function D(a){if(":"==a)return b(ha)}
  function ha (line 10) | function ha(a){if("type"==a||"variable"==a)return b();if("{"==a)return b...
  function ia (line 10) | function ia(a){if("variable"==a)return b(D)}
  function T (line 10) | function T(a,d){if("variable"==

FILE: app/src/main/assets/code_mirror/mode/htmlmixed/htmlmixed.js
  function p (line 1) | function p(f){var c=k[f];return c?c:k[f]=new RegExp("\\s+"+f+"\\s*=\\s*(...
  function q (line 1) | function q(f,c){return(f=f.match(p(c)))?/^\s*(.*?)\s*$/.exec(f[2])[1]:
  function l (line 2) | function l(f,c){for(var d in f)for(var g=c[d]||(c[d]=[]),h=f[d],e=h.leng...
  function r (line 2) | function r(d,c){for(var f=0;f<d.length;f++){var g=d[f];if(!g[0]||g[1].te...
  function k (line 3) | function k(a,b){var c=g.token(a,b.htmlState),e=/\btag\b/.test(c),m;if(e&...

FILE: app/src/main/assets/code_mirror/mode/http/http.js
  function c (line 1) | function c(a,b){a.skipToEnd();b.cur=d;return"error"}
  function g (line 1) | function g(a,b){return a.match(/^HTTP\/\d\.\d/)?(b.cur=h,"keyword"):a.ma...
  function h (line 1) | function h(a,b){var e=a.match(/^\d+/);if(!e)return c(a,b);b.cur=l;a=
  function l (line 2) | function l(a,b){a.skipToEnd();b.cur=d;return null}
  function k (line 2) | function k(a,b){a.eatWhile(/\S/);b.cur=m;return"string-2"}
  function m (line 2) | function m(a,b){return a.match(/^HTTP\/\d\.\d$/)?(b.cur=d,"keyword"):c(a...
  function d (line 2) | function d(a){if(a.sol()&&!a.eat(/[ \t]/)){if(a.match(/^.*?:/))return"at...
  function f (line 3) | function f(a){a.skipToEnd();return null}

FILE: app/src/main/assets/code_mirror/mode/idl/idl.js
  function c (line 1) | function c(a){return new RegExp("^(("+a.join(")|(")+"))\\b","i")}
  function f (line 1) | function f(a){if(a.eatSpace())return null;if(a.match(";"))return a.skipT...

FILE: app/src/main/assets/code_mirror/mode/javascript/javascript.js
  function fa (line 1) | function fa(p,q,n){return/^(?:operator|sof|keyword c|case|new|[\[{}\(,;:...
  function n (line 1) | function n(a,c,b){E=a;M=b;return c}
  function y (line 1) | function y(a,c){var b=a.next();if('"'==b||"'"==b)return c.tokenize=
  function ta (line 4) | function ta(a){return function(c,b){var e=!1,k;if(P&&"@"==c.peek()&&c.ma...
  function N (line 4) | function N(a,c){for(var b=!1,e;e=a.next();){if("/"==e&&b){c.tokenize=y;b...
  function U (line 5) | function U(a,c){for(var b=!1,e;null!=(e=a.next());){if(!b&&("`"==e||"$"=...
  function W (line 5) | function W(a,c){c.fatArrowAt&&(c.fatArrowAt=null);var b=a.string.indexOf...
  function ha (line 6) | function ha(a,b,d,e,f,z){this.indented=a;this.column=b;this.type=d;this....
  function f (line 6) | function f(){for(var a=arguments.length-1;0<=a;a--)d.cc.push(arguments[a])}
  function b (line 6) | function b(){f.apply(null,arguments);return!0}
  function F (line 6) | function F(a){function b(b){for(;b;b=b.next)if(b.name==a)return!0;return...
  function G (line 7) | function G(){d.state.context={prev:d.state.context,vars:d.state.localVar...
  function H (line 7) | function H(){d.state.localVars=d.state.context.vars;d.state.context=d.st...
  function l (line 7) | function l(a,b){var c=function(){var c=d.state,k=c.indented;if("stat"==c...
  function g (line 7) | function g(){var a=d.state;a.lexical.prev&&(")"==a.lexical.type&&
  function h (line 8) | function h(a){function c(d){return d==a?b():";"==a?f():b(c)}return c}
  function r (line 8) | function r(a,c){return"var"==a?b(l("vardef",c.length),X,h(";"),g):"keywo...
  function m (line 9) | function m(a){return ja(a,!1)}
  function t (line 9) | function t(a){return ja(a,!0)}
  function Y (line 9) | function Y(a){return"("!=a?f():b(l(")"),m,h(")"),g)}
  function ja (line 9) | function ja(a,c){if(d.state.fatArrowAt==d.stream.start){var k=
  function aa (line 10) | function aa(a){return a.match(/[;\}\)\],]/)?f():f(m)}
  function Ca (line 10) | function Ca(a){return a.match(/[;\}\)\],]/)?f():f(t)}
  function A (line 10) | function A(a,c){return","==a?b(m):I(a,
  function I (line 11) | function I(a,c,d){var e=0==d?A:I,k=0==d?m:t;if("=>"==a)return b(G,d?ka:l...
  function R (line 11) | function R(a,c){return"quasi"!=a?f():"${"!=c.slice(c.length-2)?b(R):b(m,...
  function Ga (line 11) | function Ga(a){if("}"==a)return d.marked="string-2",d.state.tokenize=U,b...
  function la (line 11) | function la(a){W(d.stream,d.state);return f("{"==a?r:
  function ka (line 12) | function ka(a){W(d.stream,d.state);return f("{"==a?r:t)}
  function Ea (line 12) | function Ea(a){return function(c){return"."==c?b(a?Ha:Ia):f(a?t:m)}}
  function Ia (line 12) | function Ia(a,c){if("target"==c)return d.marked="keyword",b(A)}
  function Ha (line 12) | function Ha(a,c){if("target"==c)return d.marked="keyword",b(I)}
  function xa (line 12) | function xa(a){return":"==a?b(g,r):f(A,h(";"),g)}
  function Fa (line 12) | function Fa(a){if("variable"==a)return d.marked="property",b()}
  function ba (line 12) | function ba(a,c){if("async"==a)return d.marked="property",b(ba);if("vari...
  function Ja (line 13) | function Ja(a){if("variable"!=a)return f(B);d.marked="property";return b...
  function B (line 13) | function B(a){if(":"==a)return b(t);if("("==a)return f(w)}
  function x (line 13) | function x(a,c){function k(e,g){return","==e?(e=d.state.lexical,"call"==...
  function J (line 14) | function J(a,c,k){for(var e=3;e<arguments.length;e++)d.cc.push(arguments...
  function Q (line 14) | function Q(a){return"}"==a?b():f(r,Q)}
  function S (line 14) | function S(a,c){if(K){if(":"==a)return b(v);if("?"==c)return b(S)}}
  function Ka (line 14) | function Ka(a,c){if("="==c)return b(t)}
  function v (line 14) | function v(a){if("variable"==a)return d.marked="variable-3",b(ca);if("{"...
  function La (line 14) | function La(a){if("=>"==a)return b(v)}
  function ma (line 15) | function ma(a){if("variable"==a||"keyword"==d.style)return d.marked="pro...
  function na (line 15) | function na(a){if("variable"==a)return b(na);if(":"==a)return b(v)}
  function ca (line 15) | function ca(a,c){if("<"==c)return b(x(v,">"),ca);if("["==a)return b(h("]...
  function X (line 15) | function X(){return f(u,S,da,Ma)}
  function u (line 15) | function u(a,c){if("modifier"==a)return b(u);if("variable"==a)return F(c...
  function Na (line 15) | function Na(a,c){if("variable"==a&&!d.stream.match(/^\s*:/,
  function da (line 16) | function da(a,c){if("="==c)return b(t)}
  function Ma (line 16) | function Ma(a){if(","==a)return b(X)}
  function ia (line 16) | function ia(a,c){if("keyword b"==a&&"else"==c)return b(l("form","else"),...
  function wa (line 16) | function wa(a){if("("==a)return b(l(")"),Oa,h(")"),g)}
  function Oa (line 16) | function Oa(a){return"var"==a?b(X,h(";"),T):";"==a?b(T):"variable"==a?b(...
  function Pa (line 16) | function Pa(a,c){return"in"==c||"of"==c?(d.marked="keyword",b(m)):b(A,T)}
  function T (line 16) | function T(a,c){return";"==
  function oa (line 17) | function oa(a){")"!=a&&b(m)}
  function w (line 17) | function w(a,c){if("*"==c)return d.marked="keyword",b(w);if("variable"==...
  function Z (line 17) | function Z(a){return"spread"==a?b(Z):f(u,S,Ka)}
  function ya (line 17) | function ya(a,c){if("variable"==a)return F(c),b(pa)}
  function pa (line 17) | function pa(a,c){if("extends"==c)return b(K?v:m,pa);if("{"==a)return b(l...
  function L (line 17) | function L(a,c){if("variable"==a||"keyword"==d.style){if(("static"==c||"...
  function Qa (line 18) | function Qa(a){return":"==a?b(v):f(w)}
  function za (line 18) | function za(a,c){return"*"==c?(d.marked="keyword",b(qa,h(";"))):"default...
  function Aa (line 18) | function Aa(a){return"string"==a?b():f(ea,qa)}
  function ea (line 18) | function ea(a,c){if("{"==a)return J(ea,"}");"variable"==
  function Ra (line 19) | function Ra(a,c){if("as"==c)return d.marked="keyword",b(ea)}
  function qa (line 19) | function qa(a,c){if("from"==c)return d.marked="keyword",b(m)}
  function Da (line 19) | function Da(a){return"]"==a?b():f(x(t,"]"))}
  function a (line 19) | function a(a){return{type:a,style:"keyword"}}

FILE: app/src/main/assets/code_mirror/mode/jinja2/jinja2.js
  function c (line 1) | function c(a,b){var c=a.peek();if(b.incomment)return a.skipTo("#}")?(a.e...

FILE: app/src/main/assets/code_mirror/mode/jsx/jsx.js
  function l (line 1) | function l(d,l,n,p){this.state=d;this.mode=l;this.depth=n;this.prev=p}
  function q (line 1) | function q(e){return new l(d.copyState(e.mode,e.state),e.mode,e.depth,e....
  function n (line 1) | function n(a){var c=
  function p (line 2) | function p(a,c){if(c.context.mode==g)return r(a,c,c.context);var b=c.con...
  function r (line 2) | function r(a,c,b){if(2==b.depth)return a.match(/^.*?\*\//)?b.depth=

FILE: app/src/main/assets/code_mirror/mode/julia/julia.js
  function g (line 1) | function g(b,a){"undefined"===typeof a&&(a="\\b");return new RegExp("^((...
  function h (line 1) | function h(b){return 0==b.scopes.length?null:b.scopes[b.scopes.length-1]}
  function k (line 1) | function k(b,a){if(b.match(/^#=/,!1))return a.tokenize=q,a.tokenize(b,a)...
  function p (line 5) | function p(b,a){var d=b.match(/^(\(\s*)/);d&&(0>a.firstParenPos&&(a.firs...
  function q (line 6) | function q(b,a){b.match(/^#=/)&&a.weakScopes++;b.match(/.*?(?=(#=|=#))/)...
  function x (line 6) | function x(b,a){var d=!1,c;if(b.match(D))d=!0;else if(c=b.match(/\\u([a-...
  function z (line 7) | function z(b){function a(a,c){for(;!a.eol();)if(a.eatWhile(/[^"\\]/),a.e...

FILE: app/src/main/assets/code_mirror/mode/lua/lua.js
  function e (line 1) | function e(a){return new RegExp("^(?:"+a.join("|")+")$","i")}
  function h (line 1) | function h(a){for(var b=0;a.eat("=");)++b;a.eat("[");return b}
  function g (line 1) | function g(a,b){var c=a.next();if("-"==c&&a.eat("-")){if(a.eat("[")&&a.e...
  function k (line 2) | function k(a,b){return function(c,d){for(var f=null,e;null!=(e=c.next())...
  function m (line 2) | function m(a){return function(b,c){for(var d=!1,e;null!=(e=b.next())&&(e...

FILE: app/src/main/assets/code_mirror/mode/markdown/markdown.js
  function r (line 1) | function r(b,a,c){a.f=a.inline=c;return c(b,a)}
  function t (line 1) | function t(b){return!b||!/\S/.test(b.string)}
  function w (line 1) | function w(b){b.linkTitle=!1;b.em=!1;b.strong=!1;b.strikethrough=!1;b.qu...
  function p (line 2) | function p(b,a){var e=b.sol(),g=!1!==a.list,l=a.indentedCode;a.indentedC...
  function u (line 5) | function u(b,a){var c=n.token(b,a.htmlState);if(!x){var d=h.innerMode(n,...
  function J (line 5) | function J(b,a){if(a.fencedChars&&b.match(a.fencedChars,!1))return a.loc...
  function K (line 6) | function K(b,a){b.match(a.fencedChars);a.block=p;a.f=m;a.fencedChars=nul...
  function d (line 6) | function d(b){var a=[];if(b.formatting){a.push(f.formatting);"string"===...
  function L (line 8) | function L(b,
  function m (line 9) | function m(b,a){var e=a.text(b,a);if("undefined"!==typeof e)return e;if(...
  function C (line 15) | function C(b,a){if(">"===b.next())return a.f=a.inline=m,c.highlightForma...
  function B (line 15) | function B(b,a){if(b.eatSpace())return null;b=b.next();return"("===b||"[...
  function N (line 16) | function N(b){return function(a,e){if(a.next()===b)return e.f=e.inline=m...
  function G (line 16) | function G(b,a){return b.match(/^([^\]\\]|\\.)*\]:/,!1)?(a.f=P,b.next(),...
  function P (line 16) | function P(b,a){if(b.match(/^\]:/,!0))return a.f=a.inline=Q,c.highlightF...
  function Q (line 17) | function Q(b,a){if(b.eatSpace())return null;b.match(/^[^\s]+/,!0);void 0...

FILE: app/src/main/assets/code_mirror/mode/mathematica/mathematica.js
  function f (line 1) | function f(a,b){var d;d=a.next();if('"'===d)return b.tokenize=g,b.tokeni...
  function g (line 3) | function g(a,b){for(var d,c=!1,e=!1;null!=(d=a.next());){if('"'===d&&!e)...
  function h (line 3) | function h(a,b){for(var d,c;0<b.commentLevel&&null!=

FILE: app/src/main/assets/code_mirror/mode/mbox/mbox.js
  function g (line 1) | function g(b,a){if(b.sol()){a.inSeparator=!1;if(a.inHeader&&b.match(h))r...

FILE: app/src/main/assets/code_mirror/mode/mirc/mirc.js
  function e (line 1) | function e(a){var b={};a=a.split(" ");for(var d=0;d<a.length;++d)b[a[d]]...
  function f (line 1) | function f(a,b){var d=b.beforeParams;b.beforeParams=!1;var c=a.next();if...
  function m (line 3) | function m(a,b){for(var d=!1,c;c=a.next();){if("/"==c&&d){b.tokenize=f;b...
  function n (line 3) | function n(a,b){for(var d=0,c;c=a.next();){if(";"==c&&2==d){b.tokenize=f...

FILE: app/src/main/assets/code_mirror/mode/mllike/mllike.js
  function f (line 1) | function f(a,c){var d=a.next();if('"'===d)return c.tokenize=k,c.tokenize...
  function k (line 2) | function k(a,c){for(var d,b=!1,e=!1;null!=(d=a.next());){if('"'===d&&!e)...
  function l (line 2) | function l(a,c){for(var d,b;0<c.commentLevel&&null!=(b=a.next());)"("===...

FILE: app/src/main/assets/code_mirror/mode/modelica/modelica.js
  function e (line 1) | function e(c){var d={};c=c.split(" ");for(var f=0;f<c.length;++f)d[c[f]]...
  function f (line 1) | function f(a,b){a.skipToEnd();b.tokenize=null;return"comment"}
  function n (line 1) | function n(a,b){for(var l=!1,c;c=a.next();){if(l&&"/"==c){b.tokenize=nul...
  function k (line 2) | function k(a,b){for(var c=!1,d;null!=(d=a.next());){if('"'==d&&!c){b.tok...
  function p (line 2) | function p(a,b){for(a.eatWhile(h);a.eat(h)||a.eat(m););a=a.current();!b....
  function u (line 2) | function u(a,b){for(;a.eat(/[^']/););b.tokenize=null;
  function e (line 3) | function e(a,b){a.eatWhile(h);a.eat(".")&&a.eatWhile(h);if(a.eat("e")||a...
  function f (line 5) | function f(c){if(c)for(var d in c)c.hasOwnProperty(d)&&e.push(d)}

FILE: app/src/main/assets/code_mirror/mode/mscgen/mscgen.js
  function d (line 1) | function d(a){return new RegExp("\\b("+a.join("|")+")\\b","i")}
  function e (line 1) | function e(a){return new RegExp("("+a.join("|")+")","i")}
  function f (line 1) | function f(){return{inComment:!1,inString:!1,inAttributeList:!1,inScript...
  function g (line 1) | function g(a){return{inComment:a.inComment,inString:a.inString,inAttribu...
  function h (line 2) | function h(a){return function(b,c){if(b.match(e(a.brackets),!0,!0))retur...

FILE: app/src/main/assets/code_mirror/mode/mumps/mumps.js
  function d (line 1) | function d(a){return new RegExp("^(("+a.join(")|(")+"))\\b","i")}
  function e (line 1) | function e(a,b){a.sol()&&(b.label=!0,b.commandMode=0);var c=a.peek();if(...

FILE: app/src/main/assets/code_mirror/mode/nginx/nginx.js
  function k (line 1) | function k(a){var c={};a=a.split(" ");for(var b=0;b<a.length;++b)c[a[b]]...
  function e (line 1) | function e(a,c){g=c;return a}
  function h (line 1) | function h(a,c){a.eatWhile(/[\w\$_]/);var b=a.current();if(n.propertyIsE...
  function l (line 3) | function l(a,c){for(var b=!1,f;null!=(f=a.next());){if(b&&"/"==f){c.toke...
  function m (line 3) | function m(a,c){for(var b=0,f;null!=(f=a.next());){if(2<=b&&">"==f){c.to...
  function r (line 3) | function r(a){return function(c,b){for(var f=!1,d;null!=(d=c.next())&&

FILE: app/src/main/assets/code_mirror/mode/ntriples/ntriples.js
  function d (line 1) | function d(f,b){var c=f.location;f.location=c==a.PRE_SUBJECT&&"<"==b?a.W...

FILE: app/src/main/assets/code_mirror/mode/octave/octave.js
  function c (line 1) | function c(a){return new RegExp("^(("+a.join(")|(")+"))\\b")}
  function e (line 1) | function e(a,b){if(!a.sol()&&"'"===a.peek())return a.next(),b.tokenize=d...
  function f (line 1) | function f(a,b){if(a.match(/^.*%}/))return b.tokenize=d,"comment";a.skip...
  function d (line 2) | function d(a,b){if(a.eatSpace())return null;if(a.match("%{"))return b.to...

FILE: app/src/main/assets/code_mirror/mode/oz/oz.js
  function e (line 1) | function e(a){return new RegExp("^(("+a.join(")|(")+"))\\b")}
  function f (line 1) | function f(a,b){if(a.eatSpace())return null;if(a.match(/[{}]/))return"br...
  function u (line 3) | function u(a,b){if(a.eatSpace())return null;a.match(/([A-Z][A-Za-z0-9_]*...
  function v (line 3) | function v(a,b){if(a.eatSpace())return null;a.match(/([a-zA-Z][A-Za-z0-9...
  function t (line 3) | function t(a,b){if(a.eatSpace())return null;
  function k (line 4) | function k(a,b){for(var c=!1,d;d=a.next();){if("/"==d&&c){b.tokenize=f;b...
  function x (line 4) | function x(a){return function(b,c){for(var d=!1,e,g=!1;null!=(e=b.next()...

FILE: app/src/main/assets/code_mirror/mode/pascal/pascal.js
  function b (line 1) | function b(a,d){var c=a.next();if("#"==c&&d.startOfLine)return a.skipToE...
  function h (line 2) | function h(a){return function(d,c){for(var b=!1,f,e=!1;null!=(f=d.next()...
  function e (line 2) | function e(a,d){for(var c=!1,b;b=a.next();){if(")"==b&&c){d.tokenize=nul...

FILE: app/src/main/assets/code_mirror/mode/perl/perl.js
  function g (line 1) | function g(d,e){return d.string.charAt(d.pos+(e||0))}
  function q (line 1) | function q(d,e){if(e){var g=d.pos-e;return d.string.substr(0<=g?g:0,e)}r...
  function p (line 1) | function p(d,e){var g=d.string.length,r=g-d.pos+1;return d.string.substr...
  function e (line 1) | function e(d,e){e=d.pos+e;var g;0>=e?d.pos=
  function d (line 2) | function d(a,c,d,e,b){c.chain=null;c.style=null;c.tail=null;c.tokenize=f...
  function k (line 2) | function k(a,c,d){c.tokenize=function(a,b){a.string==d&&(b.tokenize=n);a...
  function n (line 2) | function n(a,c){if(a.eatSpace())return null;

FILE: app/src/main/assets/code_mirror/mode/php/php.js
  function h (line 1) | function h(c){var a={};c=c.split(" ");for(var d=0;d<c.length;++d)a[c[d]]...
  function m (line 1) | function m(c,a,d){return 0==c.length?k(a):function(e,f){for(var b=c[0],l...
  function k (line 2) | function k(c,a){return function(d,e){if(!1!==a&&d.match("${",!1)||d.matc...

FILE: app/src/main/assets/code_mirror/mode/pig/pig.js
  function g (line 1) | function g(b,f){for(var c=!1,a;a=b.next();){if("/"==a&&c){f.tokenize=e;b...
  function n (line 1) | function n(b){return function(a,c){for(var f=!1,d,g=!1;null!=(d=a.next()...
  function e (line 2) | function e(b,a){var c=b.next();if('"'==c||"'"==c)return c=n(c),a.tokeniz...
  function e (line 3) | function e(a){var d={};a=a.split(" ");for(var e=0;e<a.length;++e)d[a[e]]...

FILE: app/src/main/assets/code_mirror/mode/powershell/powershell.js
  function e (line 1) | function e(b,a){a=a||{};var c=void 0!==a.prefix?a.prefix:"^";a=void 0!==...
  function f (line 1) | function f(b,
  function p (line 3) | function p(b,a){for(var c;null!=(c=b.peek());){if("$"===c)return a.token...
  function u (line 3) | function u(b,a){return r(b,a,p)}
  function v (line 3) | function v(b,
  function w (line 4) | function w(b,a){return r(b,a,v)}
  function r (line 4) | function r(b,a,c){if(b.match("$(")){var d=a.bracketNesting;a.returnStack...
  function q (line 4) | function q(b,a){for(var c=!1,d;null!=(d=b.next());){if(c&&">"==d){a.toke...
  function h (line 5) | function h(b,a){var c=b.peek();if(b.eat("{"))return a.tokenize=t,t(b,a);...
  function t (line 5) | function t(b,a){for(var c;null!=(c=b.next());)if("}"===c){a.tokenize=f;b...
  function g (line 5) | function g(b,a){var c=a.startQuote;if(b.sol()&&b.match(new RegExp(c+"@")...

FILE: app/src/main/assets/code_mirror/mode/protobuf/protobuf.js
  function d (line 1) | function d(a){if(a.eatSpace())return null;if(a.match("//"))return a.skip...

FILE: app/src/main/assets/code_mirror/mode/pug/pug.js
  function g (line 1) | function g(){this.javaScriptArguments=this.javaScriptLineExcludesColon=t...
  function k (line 2) | function k(c,b){if(c.match("#{"))return b.isInterpolating=!0,b.interpola...
  function l (line 2) | function l(c,b){if(c.match(/^:([\w\-]+)/)){var a;
  function m (line 3) | function m(c,b){if(b.isAttrs){n[c.peek()]&&b.attrsNest.push(n[c.peek()])...
  function h (line 4) | function h(c,b,a){a=d.mimeModes[a]||
  function p (line 5) | function p(c,b,a){if(c.indentation()>b.indentOf||b.innerModeForLine&&!c....

FILE: app/src/main/assets/code_mirror/mode/puppet/puppet.js
  function c (line 1) | function c(a,b){b=b.split(" ");for(var e=0;e<b.length;e++)g[b[e]]=a}
  function k (line 1) | function k(a,b){for(var e,c,f=!1;!a.eol()&&(e=a.next())!=b.pending;){if(...
  function h (line 1) | function h(a,

FILE: app/src/main/assets/code_mirror/mode/python/python.js
  function n (line 1) | function n(f){return new RegExp("^(("+f.join(")|(")+"))\\b")}
  function f (line 1) | function f(f){return f.scopes[f.scopes.length-1]}
  function l (line 3) | function l(a,b){a.sol()&&(b.indent=a.indentation());if(a.sol()&&"py"==f(...
  function w (line 3) | function w(a,b){if(a.eatSpace())return null;if("#"==a.peek())return a.sk...
  function B (line 5) | function B(a){function b(b,f){for(;!b.eol();)if(b.eatWhile(/[^'"\\]/),b....
  function u (line 6) | function u(a){for(;"py"!=f(a).type;)a.scopes.pop();a.scopes.push({offset...
  function v (line 6) | function v(a,b){for(a=a.indentation();1<b.scopes.length&&f(b).offset>a;)...

FILE: app/src/main/assets/code_mirror/mode/q/q.js
  function g (line 1) | function g(a,b){var d=a.sol(),c=a.next();f=null;if(d){if("/"==c)return(b...
  function l (line 3) | function l(a,b){return a.skipToEnd(),/\/\s*$/.test(a.current())?(b.token...
  function r (line 3) | function r(a,b){var d=a.sol()&&"\\"==a.peek();a.skipToEnd();d&&/^\\\s*$/...
  function m (line 4) | function m(a){return a.skipToEnd(),"comment"}
  function n (line 4) | function n(a,b){for(var d=!1,c,e=!1;c=a.next();){if('"'==c&&!d){e=!0;bre...
  function h (line 4) | function h(a,b,d){a.context={prev:a.context,indent:a.indent,col:d,type:b}}
  function k (line 4) | function k(a){a.indent=a.context.indent;a.context=a.context.prev}

FILE: app/src/main/assets/code_mirror/mode/r/r.js
  function f (line 1) | function f(b){b=b.split(" ");for(var a={},c=0;c<b.length;++c)a[b[c]]=!0;...
  function h (line 1) | function h(b,a){e=null;var c=b.next();if("#"==c)return b.skipToEnd(),"co...
  function l (line 3) | function l(b){return function(a,c){if(a.eat("\\"))return c=a.next(),"x"=...
  function g (line 4) | function g(b,a,c){b.ctx={type:a,indent:b.indent,align:null,column:c.colu...

FILE: app/src/main/assets/code_mirror/mode/rst/rst.js
  function g (line 3) | function g(b){var a=Array.prototype.slice.call(arguments,1);return b.rep...
  function d (line 3) | function d(b,a){var e=null;if(b.sol()&&b.match(H,!1))c(a,r,{mode:z,local...
  function l (line 7) | function l(b,a){var e=null;if(a.ctx.phase==u||b.match(u,!1))switch(n(a))...
  function x (line 9) | function x(b,a){return v(b,a,"comment")}
  function y (line 9) | function y(b,a){return v(b,a,"meta")}
  function v (line 9) | function v(b,a,e){if(b.eol()||
  function r (line 10) | function r(b,a){if(a.ctx.mode&&a.ctx.local)return b.sol()?(b.eatSpace()|...
  function f (line 10) | function f(b,a,c,d){return{phase:b,stage:a,mode:c,local:d}}
  function c (line 10) | function c(b,a,c){b.tok=a;b.ctx=c||{}}
  function n (line 10) | function n(b){return b.ctx.stage||0}

FILE: app/src/main/assets/code_mirror/mode/ruby/ruby.js
  function n (line 1) | function n(a){for(var c={},b=0,d=a.length;b<d;++b)c[a[b]]=!0;return c}
  function k (line 1) | function k(a,c,b){b.tokenize.push(a);return a(c,b)}
  function m (line 1) | function m(a,c){if(a.sol()&&a.match("=begin")&&a.eol())return c.tokenize...
  function q (line 5) | function q(a){a||(a=1);return function(c,b){if("}"==c.peek()){if(1==a)re...
  function u (line 6) | function u(){var a=!1;return function(c,b){if(a)return b.tokenize.pop(),...
  function l (line 6) | function l(a,c,b,d){return function(h,f){var e=!1,g;"read-quoted-paused"...
  function t (line 7) | function t(a){return function(c,b){c.match(a)?b.tokenize.pop():c.skipToE...
  function r (line 7) | function r(a,c){a.sol()&&a.match("=end")&&a.eol()&&c.tokenize.pop();a.sk...

FILE: app/src/main/assets/code_mirror/mode/sas/sas.js
  function d (line 1) | function d(a,c,b){if(b){c=c.split(" ");for(var d=0;d<c.length;d++)e[c[d]...
  function f (line 1) | function f(a,c){var b=a.next();if("/"===b&&a.eat("*"))return c.continueC...

FILE: app/src/main/assets/code_mirror/mode/sass/sass.js
  function k (line 1) | function k(a,b){var c=a.peek();if(")"===c)return a.next(),b.tokenizer=g,...
  function l (line 1) | function l(a,b){return function(c,d){if(c.sol()&&c.indentation()<=
  function h (line 2) | function h(a,b){function c(d,f){var e=d.next(),m=d.peek(),h=d.string.cha...
  function n (line 2) | function n(a){return function(b,c){return"}"===b.peek()?(b.next(),c.toke...
  function e (line 2) | function e(a){0==a.indentCount&&
  function g (line 3) | function g(a,b){var c=a.peek();if(a.match("/*"))return b.tokenizer=l(a.i...

FILE: app/src/main/assets/code_mirror/mode/scheme/scheme.js
  function e (line 1) | function e(a){var c={};a=a.split(" ");for(var b=0;b<a.length;++b)c[a[b]]...
  function g (line 1) | function g(a,c,b){this.indent=a;this.type=c;this.prev=b}
  function l (line 1) | function l(a){return a.match(m)}
  function n (line 1) | function n(a){return a.match(p)}
  function h (line 1) | function h(a,c){!0===c&&a.backUp(1);return a.match(q)}
  function r (line 2) | function r(a){return a.match(t)}

FILE: app/src/main/assets/code_mirror/mode/shell/shell.js
  function d (line 1) | function d(a,b){b=b.split(" ");for(var e=0;e<b.length;e++)h[b[e]]=a}
  function g (line 1) | function g(a,b){if(a.eatSpace())return null;var e=a.sol(),c=a.next();if(...
  function k (line 2) | function k(a){return function(b,e){for(var c,d=!1,f=!1;null!=(c=b.next()...

FILE: app/src/main/assets/code_mirror/mode/sieve/sieve.js
  function g (line 1) | function g(a){var b={};a=a.split(" ");for(var c=0;c<a.length;++c)b[a[c]]...
  function e (line 1) | function e(a,b){var c=a.next();if("/"==c&&a.eat("*"))return b.tokenize=h...
  function l (line 3) | function l(a,b){b._multiLineString=!0;if(!a.sol()){a.eatSpace();if("#"==...
  function h (line 3) | function h(a,b){for(var c=!1,d;null!=(d=a.next());){if(c&&"/"==d){b.toke...
  function k (line 3) | function k(a){return function(b,c){for(var d=!1,f;null!=(f=b.next())&&(f...

FILE: app/src/main/assets/code_mirror/mode/slim/slim.js
  function J (line 1) | function J(a,b,c){var e=function(e,d){d.tokenize=b;return e.pos<a?(e.pos...
  function t (line 1) | function t(a,b){a.stack=
  function u (line 2) | function u(a){a.line==a.tokenize&&(a.line=a.stack.tokenize,a.stack=a.sta...
  function K (line 2) | function K(a,b){return function(c,e){u(e);if(c.match(/^\\$/))return t(e,...
  function L (line 2) | function L(a,b){return function(c,e){u(e);var d=b(c,e);c.eol()&&c.curren...
  function v (line 2) | function v(a,b){return function(c,e){return c.peek()==
  function f (line 3) | function f(a){var b,c=function(c,d){if(1==d.rubyState.tokenize.length&&!...
  function n (line 3) | function n(a,b){return p.token(a,b.rubyState)}
  function z (line 3) | function z(a,b){if(a.match(/^#\{/))return b.tokenize=v("}",b.tokenize),n...
  function M (line 4) | function M(a){return function(b,c){var d;d=b.match(/^\\$/)?"lineContinua...
  function A (line 4) | function A(a,b,c){b.stack={parent:b.stack,style:"html",indented:a.column...
  function B (line 4) | function B(a,b){a.skipToEnd();return b.stack.style}
  function l (line 4) | function l(a,b){if(a.eat(b.stack.endQuote))return b.line=b.stack.line,b....
  function O (line 5) | function O(a,b){return a.match(/^==?/)?(b.tokenize=P,null):l(a,b)}
  function P (line 5) | function P(a,b){var c=a.peek();return'"'==c||"'"==c?(b.tokenize=C(c,"str...
  function Q (line 5) | function Q(a,b){if(a.match(/^#\{/))return b.tokenize=v("}",b.tokenize),n...
  function R (line 6) | function R(a,b){b.stack.indented=a.column();b.line=b.tokenize=Q;return b...
  function S (line 6) | function S(a,b){a.skipToEnd();return"slimDoctype"}
  function T (line 6) | function T(a,b){if("<"==a.peek())return(b.tokenize=M(b.tokenize))(a,b);i...
  function y (line 8) | function y(a,b){return b.startOfLine?T(a,b):x(a,b)}
  function x (line 8) | function x(a,b){return a.eat("*")?(b.tokenize=f(E),null):a.match(V)?(b.t...
  function E (line 8) | function E(a,b){return a.match(/^(<>?|><?)/)?(b.tokenize=q,null):q(a,b)}
  function q (line 8) | function q(a,b){return a.match(W)?(b.tokenize=q,"slimId"):a.match(X)?(b....
  function g (line 8) | function g(a,b){return a.match(/^([\[\{\(])/)?(b.stack={parent:b.stack,s...
  function aa (line 9) | function aa(a,b){return a.match(/^==?/)?(b.tokenize=ba,null):g(a,b)}
  function ba (line 9) | function ba(a,b){var c=a.peek();return'"'==c||"'"==c?(b.tokenize=C(c,"st...
  function G (line 9) | function G(a,b){a.backUp(1);if(a.match(/^[^\s],(?=:)/))return b.tokenize=
  function C (line 10) | function C(a,b,c,d,k){return function(e,f){u(f);var h=0==e.current().len...
  function F (line 10) | function F(a,b){if(a.match(/^==?/))return b.tokenize=n,"slimSwitch";

FILE: app/src/main/assets/code_mirror/mode/smarty/smarty.js
  function e (line 1) | function e(a,b){m=b;return a}
  function h (line 1) | function h(a,b){for(var c=a.string,e=a.pos;;){var d=c.indexOf(g,e),e=d+g...
  function q (line 2) | function q(a,b){if(a.match(n,!0))return 3===p?(b.depth--,0>=b.depth&&(b....
  function v (line 4) | function v(a){return function(b,c){for(var d=null,e;!b.eol();){e=
  function u (line 5) | function u(a,b){return function(c,d){for(;!c.eol();){if(c.match(b)){d.to...

FILE: app/src/main/assets/code_mirror/mode/solr/solr.js
  function e (line 1) | function e(b){return function(a,c){for(var d=!1,e;null!=(e=a.next())&&(e...
  function h (line 1) | function h(b){return function(a,c){var d="operator";"+"==b?d+=" positive...
  function k (line 2) | function k(b){return function(a,c){for(var d=b;(b=a.peek())&&null!=b.mat...
  function f (line 2) | function f(b,a){var c=b.next();'"'==c?a.tokenize=e(c):m.test(c)?a.tokeni...

FILE: app/src/main/assets/code_mirror/mode/soy/soy.js
  function g (line 1) | function g(a){return a[a.length-1]}
  function l (line 1) | function l(a,b,c){var d=

FILE: app/src/main/assets/code_mirror/mode/sparql/sparql.js
  function h (line 1) | function h(a,b){var c=a.next();d=null;if("$"==c||"?"==c){if("?"==c&&a.ma...
  function l (line 2) | function l(a){return function(b,c){for(var d=!1,e;null!=(e=b.next());){i...
  function f (line 3) | function f(a,b,c){a.context={prev:a.context,indent:a.indent,col:c,type:b}}
  function g (line 3) | function g(a){a.indent=a.context.indent;a.context=a.context.prev}

FILE: app/src/main/assets/code_mirror/mode/sql/sql.js
  function k (line 1) | function k(b,f){var c=b.next();if(m[c]){var d=m[c](b,f);if(!1!==d)return...
  function a (line 4) | function a(b){return function(a,c){for(var f=!1,e;null!=(e=a.next());){i...
  function e (line 4) | function e(b,a){for(;;)if(b.skipTo("*")){if(b.next(),b.eat("/")){a.token...
  function p (line 4) | function p(b,
  function l (line 6) | function l(a){for(var e;null!=(e=a.next());)if("`"==
  function h (line 7) | function h(a){a.eat("@")&&(a.match(/^session\./),a.match(/^local\./),a.m...
  function k (line 7) | function k(a){return a.eat("N")?"atom":a.match(/^[a-zA-Z.#!?]/)?"variabl...
  function a (line 7) | function a(a){var d={};a=a.split(" ");for(var e=

FILE: app/src/main/assets/code_mirror/mode/stex/stex.js
  function e (line 1) | function e(a){a=a.cmdState;for(var b=a.length-1;0<=b;b--){var c=a[b];if(...
  function h (line 1) | function h(a,b,c){return function(){this.name=a;this.bracketNo=0;this.st...
  function k (line 2) | function k(a,b){a.f=b}
  function g (line 2) | function g(a,b){var c;if(a.match(/^\\[a-zA-Z@]+/))return a=a.current().s...
  function l (line 4) | function l(a,b,c){if(a.eatSpace())return null;if(a.match(c))return b.f=g...
  function m (line 4) | function m(a,b){var c=a.peek(),d;

FILE: app/src/main/assets/code_mirror/mode/stylus/stylus.js
  function E (line 1) | function E(f){f=f.sort(function(f,p){return p>f});return new RegExp("^((...
  function f (line 1) | function f(f){for(var g={},p=0;p<f.length;++p)g[f[p]]=!0;return g}
  function D (line 1) | function D(a,b){y=a.string.match(/(^[\w-]+\s*=\s*$)|(^\s*[\w-]+\s*=\s*[\...
  function p (line 5) | function p(a,b){for(var c=!1,d;null!=(d=a.next());){if(c&&"/"==d){b.toke...
  function F (line 5) | function F(a){return function(b,c){for(var d=!1,e;null!=(e=b.next());){i...
  function V (line 5) | function V(a,b){a.next();a.match(/\s*[\"\')]/,!1)?b.tokenize=null:b.toke...
  function G (line 5) | function G(a,b,c,d){this.type=a;this.indent=b;this.prev=
  function d (line 6) | function d(a,b,c,d){d=0<=d?d:q;a.context=new G(c,b.indentation()+d,a.con...
  function r (line 6) | function r(a,b){var c=a.context.indent-q;a.context=a.context.prev;b&&(a....
  function A (line 6) | function A(a,b,c,d){for(d=d||1;0<d;d--)c.context=c.context.prev;return h...
  function n (line 6) | function n(a){return a.toLowerCase()in Y}
  function t (line 6) | function t(a){a=a.toLowerCase();return a in Z||a in aa}
  function u (line 6) | function u(a){return a.toLowerCase()in ba}
  function v (line 6) | function v(a){var b=a.toLowerCase(),
  function H (line 7) | function H(a,b){return k(b)&&("{"==a||"]"==a||"hash"==a||"qualifier"==a)...
  function w (line 7) | function w(a){return a.sol()||a.string.match(new RegExp("^\\s*"+a.curren...
  function k (line 7) | function k(a){return a.eol()||a.match(/^\s*$/,!1)}
  function l (line 7) | function l(a){var b=/^\s*[-_]*[a-z0-9]+[\w-]*/i;return(a="string"==typeo...

FILE: app/src/main/assets/code_mirror/mode/swift/swift.js
  function g (line 1) | function g(a){for(var b={},c=0;c<a.length;c++)b[a[c]]=!0;return b}
  function h (line 1) | function h(a,b,c){a.sol()&&(b.indented=a.indentation());if(a.eatSpace())...
  function w (line 2) | function w(){var a=0;return function(b,
  function m (line 3) | function m(a){return function(b,c){for(var d,e=!1;d=b.next();)if(e){if("...
  function k (line 3) | function k(a,b){a.match(/^(?:[^*]|\*(?!\/))*/);a.match("*/")&&b.tokenize...
  function x (line 3) | function x(a,b,c){this.prev=a;this.align=
  function y (line 4) | function y(a,b){b=b.match(/^\s*($|\/[\/\*])/,!1)?null:b.column()+1;a.con...
  function z (line 4) | function z(a){a.context&&(a.indented=a.context.indented,a.context=a.cont...

FILE: app/src/main/assets/code_mirror/mode/tcl/tcl.js
  function e (line 1) | function e(a){var b={};a=a.split(" ");for(var d=0;d<a.length;++d)b[a[d]]...
  function f (line 1) | function f(a,b,d){b.tokenize=d;return d(a,b)}
  function g (line 1) | function g(a,b){var d=b.beforeParams;b.beforeParams=!1;var c=a.next();if...
  function p (line 3) | function p(a){return function(b,d){for(var c=!1,e,f=!1;null!=(e=b.next()...
  function m (line 3) | function m(a,b){for(var d=!1,c;c=a.next();){if("#"==c&&d){b.tokenize=g;b...
  function n (line 3) | function n(a,b){for(var d=0,c;c=a.next();){if("#"==c&&2==d){b.tokenize=g...

FILE: app/src/main/assets/code_mirror/mode/textile/textile.js
  function p (line 1) | function p(b,a,c){return"_"===c?b.eat("_")?g(b,a,"italic",/__/,2):g(b,a,...
  function g (line 2) | function g(b,a,c,d,e){e=b.pos>e?b.string.charAt(b.pos-e-1):null;var g=b....
  function h (line 3) | function h(b){var a=n(b);if(a)return a;a=[];b.layoutType&&a.push(k[b.lay...
  function n (line 3) | function n(b){var a=b.layoutType;
  function l (line 4) | function l(b,a){var c=n(b);if(c)return c;b=h(b);return a?b?b+" "+a:a:b}
  function q (line 4) | function q(b){for(var a=[],c=1;c<arguments.length;++c)b[arguments[c]]&&a...
  function r (line 4) | function r(b){var a=b.spanningLayout,c=b.layoutType,d;for(d in b)b.hasOw...
  function e (line 4) | function e(b){return d.cache[b]||(d.cache[b]=d.createRe(b))}

FILE: app/src/main/assets/code_mirror/mode/tiddlywiki/tiddlywiki.js
  function g (line 1) | function g(a,c,d){c.tokenize=d;return d(a,c)}
  function e (line 1) | function e(a,c){var d=a.sol(),b=a.peek();c.block=!1;if(d&&/[<\/\*{}\-]/....
  function f (line 4) | function f(a,c){for(var d=!1,b;b=a.next();){if("/"==b&&d){c.tokenize=e;b...
  function z (line 4) | function z(a,c){for(var d=!1,b;b=a.next();){if("'"==b&&d){c.tokenize=e;b...
  function h (line 4) | function h(a,c){var d=c.block;if(d&&a.current())return"comment";if(!d&&a...
  function w (line 4) | function w(a,c){for(var d=!1,b;b=a.next();){if("/"==b&&d){c.tokenize=e;b...
  function x (line 4) | function x(a,c){for(var d=
  function y (line 5) | function y(a,c){for(var d=!1,b;b=a.next();){if("-"==b&&d){c.tokenize=e;b...
  function A (line 5) | function A(a,c){if("<<"==a.current())return"macro";var d=a.next();if(!d)...

FILE: app/src/main/assets/code_mirror/mode/tiki/tiki.js
  function e (line 1) | function e(a,b,c){return function(d,e){for(;!d.eol();){if(d.match(b)){e....
  function r (line 1) | function r(a){return function(b,c){for(;!b.eol();)b.next();c.tokenize=g;...
  function g (line 1) | function g(a,b){function c(c){b.tokenize=c;return c(a,
  function n (line 3) | function n(a,b){var c=a.next(),d=a.peek();if("}"==c)return b.tokenize=g,...
  function w (line 4) | function w(a){return function(b,c){for(;!b.eol();)if(b.next()==a){c.toke...
  function v (line 4) | function v(){return function(a,b){for(;!a.eol();){var c=a.next(),d=a.pee...
  function l (line 4) | function l(){for(var a=
  function f (line 5) | function f(){l.apply(null,arguments);return!0}
  function t (line 5) | function t(a,b){d.context={prev:d.context,pluginName:a,indent:d.indented...
  function x (line 5) | function x(a){if("openPlugin"==a)return d.pluginName=p,f(q,y(d.startOfLi...
  function y (line 6) | function y(a){return function(b){if("selfclosePlugin"==b||"endPlugin"==b...
  function z (line 6) | function z(a){return function(b){a&&(k="error");return"endPlugin"==b?f()...
  function q (line 6) | function q(a){return"keyword"==a?(k="attribute",f(q)):"equals"==a?f(A,q)...
  function A (line 6) | function A(a){return"keyword"==a?(k="string",f()):"string"==a?f(u):l()}
  function u (line 6) | function u(a){return"string"==a?f(u):l()}

FILE: app/src/main/assets/code_mirror/mode/tornado/tornado.js
  function a (line 1) | function a(a,c){a.eatWhile(/[^\{]/);var b=a.next();if("{"==b&&(b=a.eat(/...
  function e (line 1) | function e(b){"{"==

FILE: app/src/main/assets/code_mirror/mode/troff/troff.js
  function b (line 1) | function b(a){if(a.eatSpace())return null;var b=a.sol(),d=a.next();if("\...

FILE: app/src/main/assets/code_mirror/mode/ttcn-cfg/ttcn-cfg.js
  function g (line 1) | function g(e){var f={};e=e.split(" ");for(var h=0;h<e.length;++h)f[e[h]]...
  function h (line 1) | function h(a,b){var c=a.next();if('"'==c||"'"==c)return b.tokenize=g(c),...
  function g (line 2) | function g(a){return function(b,c){for(var e=!1,d,f=!1;null!=(d=b.next()...
  function n (line 3) | function n(a,b,c,d,e){this.indented=a;this.column=b;this.type=c;this.ali...
  function l (line 3) | function l(a,b,c){var d=a.indented;a.context&&"statement"==a.context.typ...
  function k (line 3) | function k(a){var b=a.context.type;if(")"==b||"]"==b||"}"==b)a.indented=...

FILE: app/src/main/assets/code_mirror/mode/ttcn/ttcn.js
  function a (line 1) | function a(a){var c={};a=a.split(" ");for(var g=0;g<a.length;++g)c[a[g]]...
  function g (line 1) | function g(b,f){var d=b.next();if('"'==d||"'"==d)return f.tokenize=h(d),...
  function h (line 4) | function h(b){return function(f,d){for(var c=!1,a,e=!1;null!=(a=f.next()...
  function p (line 4) | function p(b,f){for(var d=!1,a;a=b.next();){if("/"==a&&d){f.tokenize=nul...
  function r (line 4) | function r(b,a,d,c,e){this.indented=b;this.column=a;this.type=d;this.ali...
  function l (line 4) | function l(b,a,d){var c=b.indented;b.context&&"statement"==b.context.typ...
  function k (line 5) | function k(b){var a=b.context.type;if(")"==a||"]"==a||"}"==a)b.indented=...
  function g (line 7) | function g(a){if(a)for(var c in a)a.hasOwnProperty(c)&&m.push(c)}

FILE: app/src/main/assets/code_mirror/mode/turtle/turtle.js
  function h (line 1) | function h(a,b){var c=a.next();e=null;if("<"!=c||a.match(/^[\s\u00a0=]/,...
  function l (line 2) | function l(a){return function(b,c){for(var d=!1,e;null!=(e=b.next());){i...
  function f (line 2) | function f(a,b,c){a.context={prev:a.context,indent:a.indent,col:c,type:b}}
  function g (line 2) | function g(a){a.indent=a.context.indent;a.context=a.context.prev}

FILE: app/src/main/assets/code_mirror/mode/twig/twig.js
  function c (line 1) | function c(a,b){var c=a.peek();if(b.incomment)return a.skipTo("#}")?(a.e...

FILE: app/src/main/assets/code_mirror/mode/vb/vb.js
  function d (line 1) | function d(a){return new RegExp("^(("+a.join(")|(")+"))\\b","i")}
  function f (line 1) | function f(a,b){if(a.eatSpace())return null;if("'"===a.peek())return a.s...
  function v (line 3) | function v(a){var b=1==a.length;return function(c,d){for(;!c.eol();){c.e...

FILE: app/src/main/assets/code_mirror/mode/vbscript/vbscript.js
  function d (line 1) | function d(a){return new RegExp("^(("+a.join(")|(")+"))\\b","i")}
  function h (line 1) | function h(a,b){if(a.eatSpace())return"space";if("'"===a.peek()||a.match...
  function q (line 4) | function q(a){var b=1==a.length;return function(c,d){for(;!c.eol();){c.e...

FILE: app/src/main/assets/code_mirror/mode/velocity/velocity.js
  function e (line 1) | function e(b){var a={};b=b.split(" ");for(var d=0;d<b.length;++d)a[b[d]]...
  function f (line 1) | function f(b,a,d){a.tokenize=d;return d(b,a)}
  function g (line 1) | function g(b,a){var d=a.beforeParams;a.beforeParams=!1;var c=b.next();if...
  function k (line 4) | function k(b){return function(a,d){for(var c=!1,e,f=!1;null!=(e=a.next()...
  function p (line 4) | function p(b,a){for(var d=!1,c;c=b.next();){if("#"==c&&d){a.tokenize=g;b...
  function q (line 5) | function q(b,a){for(var d=0,c;c=b.next();){if("#"==c&&2==d){a.tokenize=g...

FILE: app/src/main/assets/code_mirror/mode/verilog/verilog.js
  function t (line 1) | function t(b,a){var d=0;b=b.indentation();switch(a.tlvCurCtlFlowChar){ca...
  function d (line 2) | function d(c){var a={};c=c.split(" ");for(var e=0;e<c.length;++e)a[c[e]]...
  function g (line 2) | function g(c,a){var e=c.peek(),b;if(m[e]&&0!=(b=m[e](c,a))||m.tokenBase&...
  function n (line 4) | function n(c){return function(a,b){for(var e=!1,v,d=!1;null!=(v=a.next()...
  function f (line 4) | function f(c,a){for(var e=!1,b;b=c.next();){if("/"==b&&e){a.tokenize=g;b...
  function u (line 4) | function u(c,a,b,d,f){this.indented=c;this.column=a;this.type=b;this.ali...
  function q (line 4) | function q(c,a,b){a=new u(c.indented,a,b,null,c.context);return c.contex...
  function w (line 4) | function w(c){var a=
  function t (line 5) | function t(c,a){if(c==a)return!0;a=a.split(";");for(var b in a)if(c==a[b...

FILE: app/src/main/assets/code_mirror/mode/vhdl/vhdl.js
  function l (line 1) | function l(e){var k={};e=e.split(",");for(var g=0;g<e.length;++g){var d=...
  function q (line 1) | function q(e){e.eatWhile(/[\w\$_]/);return"meta"}
  function g (line 1) | function g(a,b){var c=a.next();if(r[c]){var f=
  function k (line 3) | function k(a){return function(b,c){for(var f=!1,d,e=!1;null!=(d=b.next()...
  function w (line 3) | function w(a){return function(b,c){for(var f=!1,d,e=!1;null!=(d=b.next()...
  function v (line 3) | function v(a,b,c,d,e){this.indented=a;this.column=b;this.type=c;this.ali...
  function n (line 3) | function n(a,b,c){return a.context=new v(a.indented,b,c,null,a.context)}
  function m (line 3) | function m(a){var b=

FILE: app/src/main/assets/code_mirror/mode/webidl/webidl.js
  function d (line 1) | function d(a){return new RegExp("^(("+a.join(")|(")+"))\\b")}
  function l (line 1) | function l(a,b){if(a.eatSpace())return null;if(b.inComment){if(a.match(m...

FILE: app/src/main/assets/code_mirror/mode/xml/xml.js
  function h (line 3) | function h(a,c){function b(b){c.tokenize=b;return b(a,c)}var d=a.next();...
  function u (line 4) | function u(a,c){var b=a.next();if(">"==b||"/"==b&&a.eat(">"))return c.to...
  function F (line 5) | function F(a){var c=function(b,c){for(;!b.eol();)if(b.next()==a){c.token...
  function r (line 5) | function r(a,c){return function(b,d){for(;!b.eol();){if(b.match(c)){d.to...
  function t (line 5) | function t(a){return function(c,b){for(var d;null!=(d=c.next());){if("<"...
  function G (line 6) | function G(a,c,b){this.prev=a.context;this.tagName=c;this.indent=a.inden...
  function v (line 6) | function v(a){a.context&&(a.context=a.context.prev)}
  function y (line 6) | function y(a,c){for(var b;a.context;){b=a.context.tagName;if(!e.contextG...
  function m (line 7) | function m(a,c,b){return"openTag"==a?(b.tagStart=c.column(),z):"closeTag...
  function z (line 7) | function z(a,c,b){if("word"==a)return b.tagName=c.current(),f="tag",k;f=...
  function H (line 7) | function H(a,c,b){if("word"==a){a=c.current();b.context&&b.context.tagNa...
  function w (line 7) | function w(a,c,b){if("endTag"!=a)return f="error",w;v(b);return m}
  function A (line 7) | function A(a,
  function k (line 8) | function k(a,c,b){if("word"==a)return f="attribute",I;if("endTag"==a||"s...
  function I (line 8) | function I(a,c,b){if("equals"==a)return B;e.allowMissing||(f="error");re...
  function B (line 8) | function B(a,c,b){if("string"==a)return C;if("word"==a&&e.allowUnquoted)...
  function C (line 9) | function C(a,c,b){return"string"==a?C:k(a,c,b)}

FILE: app/src/main/assets/code_mirror/mode/xquery/xquery.js
  function l (line 1) | function l(a,c,b){c.tokenize=b;return b(a,c)}
  function f (line 1) | function f(a,c){var b=a.next(),d=!1,g;g='"'===a.current()?a.match(/^[^\"...
  function k (line 4) | function k(a,c){for(var b=!1,d=!1,g=0,e;e=a.next();){if(")"==e&&b)if(0<g...
  function q (line 4) | function q(a,c){return function(b,d){var g;if(m(d,"string")&&b.current()...
  function x (line 5) | function x(a,c){var b=/[\w\$_-]/;if(a.eat('"')){for(;'"'!==a.next(););a....
  function w (line 5) | function w(a,c){return function(b,d){b.eatSpace();if(c&&b.eat(">"))retur...
  function r (line 6) | function r(a,c){var b=a.next();if("/"==b&&a.eat(">"))return n(c)&&h(c),m...
  function t (line 6) | function t(a,c){for(var b;b=a.next();)if("-"==b&&a.match("->",!0))return...
  function u (line 7) | function u(a,c){for(var b;b=a.next();)if("]"==b&&a.match("]",!0))return ...
  function v (line 7) | function v(a,c){for(var b;b=a.next();)if("?"==b&&a.match(">",!0))return ...
  function n (line 7) | function n(a){return m(a,"attribute")}
  function m (line 7) | function m(a,c){return a.stack.length&&a.stack[a.stack.length-1].type==c}
  function h (line 7) | function h(a){a.stack.pop();a.tokenize=a.stack.length&&a.stack[a.stack.l...
  function a (line 7) | function a(a){return{type:a,style:"keyword"}}

FILE: app/src/main/assets/code_mirror/mode/yacas/yacas.js
  function f (line 1) | function f(a,b){var c;c=a.next();if('"'===c)return b.tokenize=k,b.tokeni...
  function k (line 3) | function k(a,b){for(var c,d=!1,e=!1;null!=(c=a.next());){if('"'===c&&!e)...
  function l (line 3) | function l(a,b){for(var c,d;null!=(d=a.next());){if("*"===c&&"/"===d){b....
  function g (line 3) | function g(a){var b=null;0<a.scopes.length&&(b=a.scopes[a.scopes.length-...

FILE: app/src/main/assets/intercept.js
  function addTouchEvents (line 6) | function addTouchEvents(elements){
  function touchStart (line 13) | function touchStart(event){
  function touchEnd (line 18) | function touchEnd(event){

FILE: app/src/main/assets/polyfills.js
  function r (line 4) | function r(t,o){return function(t,o){if("object"!=typeof t||null===t)thr...
  function f (line 6) | function f(a,c){function b(a){if(!this||this.constructor!==b)return new ...
  function v (line 6) | function v(a){this.add?a.forEach(this.add,this):a.forEach(function(a){th...
  function d (line 6) | function d(a){this.has(a)&&(this._keys.splice(b,1),this._values.splice(b...
  function m (line 6) | function m(a){return this.has(a)?this._values[b]:
  function n (line 7) | function n(a,c){if(this.objectOnly&&c!==Object(c))throw new TypeError("I...
  function p (line 7) | function p(a){return n.call(this,this._values,a)}
  function q (line 7) | function q(a){return n.call(this,this._keys,a)}
  function r (line 7) | function r(a,c){this.has(a)?this._values[b]=c:this._values[this._keys.pu...
  function t (line 7) | function t(a){this.has(a)||this._values.push(a);return this}
  function h (line 7) | function h(){(this._keys||0).length=this._values.length=
  function z (line 8) | function z(){return k(this._itp,this._keys)}
  function l (line 8) | function l(){return k(this._itp,this._values)}
  function A (line 8) | function A(){return k(this._itp,this._keys,this._values)}
  function B (line 8) | function B(){return k(this._itp,this._values,this._values)}
  function k (line 8) | function k(a,c,b){var g=[0],e=!1;a.push(g);return{next:function(){var f,...
  function x (line 8) | function x(){return this._values.length}
  function u (line 8) | function u(a,c){for(var b=this.entries();;){var d=b.next();if(d.done)break;
  function e (line 12) | function e(){}
  function n (line 12) | function n(e){if(!(this instanceof n))throw new TypeError("Promises must...
  function t (line 12) | function t(e,t){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!...
  function o (line 12) | function o(e,t){try{if(t===e)throw new TypeError("A promise cannot be re...
  function r (line 12) | function r(e,n){e._state=2,e._value=n,i(e)}
  function i (line 12) | function i(e){2===e._state&&0===e._deferreds.length&&n._immediateFn(func...
  function f (line 12) | function f(e,n){var t=!1;try{e(function(e){t||(t=!0,o(n,e))},function(e)...
  function o (line 12) | function o(e,f){try{if(f&&("object"==typeof f||"function"==typeof f)){va...

FILE: app/src/main/assets/source-editor.js
  function getExtension (line 1) | function getExtension(name) {
  function updateWidth (line 12) | function updateWidth() {
  function loadImage (line 21) | function loadImage(type, content) {

FILE: app/src/main/java/com/github/pockethub/android/ApplicationComponent.java
  type ApplicationComponent (line 17) | @Singleton
    method gistStore (line 29) | GistStore gistStore();
    class Builder (line 31) | @Component.Builder
      method application (line 34) | @BindsInstance
      method build (line 37) | @Override

FILE: app/src/main/java/com/github/pockethub/android/GitHubModule.java
  class GitHubModule (line 18) | @Module
    method providesRepositoryCommitService (line 21) | @Provides
    method providesUserService (line 27) | @Provides
    method providesRepositoryCommentService (line 33) | @Provides
    method providesGistService (line 39) | @Provides
    method providesIssueService (line 45) | @Provides
    method providesRepositoryService (line 51) | @Provides
    method providesNotificationService (line 57) | @Provides
    method providesSearchService (line 63) | @Provides

FILE: app/src/main/java/com/github/pockethub/android/Intents.java
  class Intents (line 34) | public class Intents {
    method repoFrom (line 189) | public static Repository repoFrom(Intent intent) {
    class Builder (line 199) | public static class Builder {
      method Builder (line 208) | public Builder(String actionSuffix) {
      method repo (line 219) | public Builder repo(Repository repository) {
      method issue (line 229) | public Builder issue(Issue issue) {
      method gist (line 240) | public Builder gist(Gist gist) {
      method gist (line 250) | public Builder gist(String gist) {
      method gistFile (line 260) | public Builder gistFile(GistFile file) {
      method user (line 270) | public Builder user(User user) {
      method add (line 281) | public Builder add(String fieldName, String value) {
      method add (line 293) | public Builder add(String fieldName, CharSequence[] values) {
      method add (line 305) | public Builder add(String fieldName, int value) {
      method add (line 317) | public Builder add(String fieldName, int[] values) {
      method add (line 329) | public Builder add(String fieldName, boolean[] values) {
      method add (line 341) | public Builder add(String fieldName, Serializable value) {
      method add (line 354) | public Builder add(String fieldName, Parcelable value) {
      method add (line 366) | public Builder add(String fieldName, ArrayList<? extends Parcelable>...
      method toIntent (line 376) | public Intent toIntent() {

FILE: app/src/main/java/com/github/pockethub/android/PocketHub.java
  class PocketHub (line 24) | public class PocketHub extends DaggerApplication {
    method onCreate (line 28) | @Override
    method applicationComponent (line 36) | public ApplicationComponent applicationComponent() {
    method applicationInjector (line 40) | @Override

FILE: app/src/main/java/com/github/pockethub/android/PocketHubModule.java
  class PocketHubModule (line 30) | @Module
    method account (line 33) | @Provides
    method cacheDir (line 40) | @Provides

FILE: app/src/main/java/com/github/pockethub/android/RequestCodes.java
  type RequestCodes (line 21) | public interface RequestCodes {

FILE: app/src/main/java/com/github/pockethub/android/RequestReader.java
  class RequestReader (line 32) | public class RequestReader {
    method RequestReader (line 46) | public RequestReader(File file, int formatVersion) {
    method read (line 56) | @SuppressWarnings("unchecked")

FILE: app/src/main/java/com/github/pockethub/android/RequestWriter.java
  class RequestWriter (line 31) | public class RequestWriter {
    method RequestWriter (line 45) | public RequestWriter(File file, int formatVersion) {
    method createDirectory (line 50) | private void createDirectory(final File dir) {
    method write (line 62) | public <V> V write(V request) {

FILE: app/src/main/java/com/github/pockethub/android/ResultCodes.java
  type ResultCodes (line 23) | public interface ResultCodes {

FILE: app/src/main/java/com/github/pockethub/android/accounts/AccountAuthenticator.java
  class AccountAuthenticator (line 36) | public class AccountAuthenticator extends AbstractAccountAuthenticator {
    method AccountAuthenticator (line 40) | public AccountAuthenticator(final Context context) {
    method addAccount (line 52) | @Override
    method confirmCredentials (line 65) | @Override
    method editProperties (line 72) | @Override
    method getAuthToken (line 78) | @Override
    method getAuthTokenLabel (line 85) | @Override
    method hasFeatures (line 94) | @Override
    method updateCredentials (line 103) | @Override

FILE: app/src/main/java/com/github/pockethub/android/accounts/AccountAuthenticatorService.java
  class AccountAuthenticatorService (line 28) | public class AccountAuthenticatorService extends Service {
    method onBind (line 32) | @Override
    method getAuthenticator (line 38) | private AccountAuthenticator getAuthenticator() {

FILE: app/src/main/java/com/github/pockethub/android/accounts/AccountUtils.java
  class AccountUtils (line 42) | public class AccountUtils {
    class AuthenticatorConflictException (line 52) | private static class AuthenticatorConflictException extends IOException {
    method hasAuthenticator (line 64) | public static boolean hasAuthenticator(final AccountManager manager) {
    method isUser (line 90) | public static boolean isUser(final Context context, final User user) {
    method getLogin (line 109) | public static String getLogin(final Context context) {
    method getAccount (line 120) | public static Account getAccount(final Context context) {
    method getAccounts (line 126) | private static Account[] getAccounts(final AccountManager manager)
    method renameAccount (line 139) | public static boolean renameAccount(String newName, Account account,
    method removeAccount (line 166) | private static void removeAccount(Account account, AccountManager acco...
    method getPasswordAccessibleAccount (line 180) | public static Account getPasswordAccessibleAccount(final Context conte...
    method getPasswordAccessibleAccounts (line 195) | private static Account[] getPasswordAccessibleAccounts(
    method getAccount (line 224) | public static Account getAccount(final AccountManager manager,
    method updateAccount (line 288) | public static boolean updateAccount(final Account account,
    method showConflictMessage (line 330) | private static void showConflictMessage(final Activity activity) {
    method isUnauthorized (line 346) | public static boolean isUnauthorized(final Exception e) {

FILE: app/src/main/java/com/github/pockethub/android/accounts/AccountsHelper.java
  class AccountsHelper (line 24) | public class AccountsHelper {
    method buildBundle (line 30) | public static Bundle buildBundle(String name, String mail, String avat...
    method buildBundle (line 40) | public static Bundle buildBundle(String name, String mail, String avat...
    method getUserAvatar (line 54) | public static String getUserAvatar(Context context, Account account) {
    method getUserMail (line 59) | public static String getUserMail(Context context, Account account) {
    method getUrl (line 64) | public static String getUrl(Context context, Account account) {
    method getUserName (line 69) | public static String getUserName(Context context, Account account) {
    method getUserToken (line 74) | public static String getUserToken(Context context, Account account) {

FILE: app/src/main/java/com/github/pockethub/android/accounts/LoginActivity.java
  class LoginActivity (line 52) | public class LoginActivity extends AccountAuthenticatorAppCompatActivity {
    method configureSyncFor (line 77) | public static void configureSyncFor(Account account) {
    method onCreate (line 105) | @Override
    method checkOauthConfig (line 124) | private void checkOauthConfig() {
    method onNewIntent (line 130) | @Override
    method onUserLoggedIn (line 137) | private void onUserLoggedIn(Uri uri) {
    method openMain (line 165) | private void openMain() {
    method openLoadingDialog (line 171) | private void openLoadingDialog() {
    method handleLogin (line 178) | public void handleLogin() {
    method openLoginInBrowser (line 182) | private void openLoginInBrowser() {
    method onActivityResult (line 198) | @Override
    method onOptionsItemSelected (line 206) | @Override
    method endAuth (line 217) | private void endAuth(final String accessToken, final String scope) {
    method finish (line 248) | @Override
    method onCreateOptionsMenu (line 256) | @Override

FILE: app/src/main/java/com/github/pockethub/android/accounts/LoginWebViewActivity.java
  class LoginWebViewActivity (line 40) | public class LoginWebViewActivity extends AppCompatActivity {
    method onCreate (line 42) | @Override

FILE: app/src/main/java/com/github/pockethub/android/core/ItemStore.java
  class ItemStore (line 26) | public abstract class ItemStore {
    class ItemReference (line 28) | private static class ItemReference<V> extends WeakReference<V> {
      method ItemReference (line 39) | public ItemReference(V item, Object id, ReferenceQueue<? super V> qu...
    class ItemReferences (line 50) | protected static class ItemReferences<V> {
      method ItemReferences (line 59) | public ItemReferences() {
      method expungeEntries (line 64) | @SuppressWarnings("rawtypes")
      method get (line 78) | public V get(final Object id) {
      method put (line 90) | public void put(Object id, V item) {

FILE: app/src/main/java/com/github/pockethub/android/core/OnLoadListener.java
  type OnLoadListener (line 23) | public interface OnLoadListener<V> {
    method loaded (line 30) | void loaded(V data);

FILE: app/src/main/java/com/github/pockethub/android/core/code/FullTree.java
  class FullTree (line 36) | public class FullTree {
    class Entry (line 41) | public static class Entry implements Comparable<Entry> {
      method Entry (line 58) | private Entry() {
      method Entry (line 64) | private Entry(GitTreeEntry entry, Folder parent) {
      method isRoot (line 70) | public boolean isRoot() {
      method compareTo (line 74) | @Override
    class Folder (line 83) | public static class Folder extends Entry {
      method Folder (line 95) | private Folder() {
      method Folder (line 99) | private Folder(GitTreeEntry entry, Folder parent) {
      method addFile (line 103) | private void addFile(GitTreeEntry entry, String[] pathSegments, int ...
      method addFolder (line 115) | private void addFolder(GitTreeEntry entry, String[] pathSegments, in...
      method add (line 127) | private void add(final GitTreeEntry entry) {
    method FullTree (line 185) | public FullTree(final GitTree tree, final GitReference reference) {

FILE: app/src/main/java/com/github/pockethub/android/core/code/RefreshTreeTask.java
  class RefreshTreeTask (line 43) | public class RefreshTreeTask {
    method RefreshTreeTask (line 59) | public RefreshTreeTask(final Context context, final Repository reposit...
    method isValidRef (line 66) | private boolean isValidRef(GitReference ref) {
    method getValidRef (line 71) | private Single<GitReference> getValidRef(GitService service, GitRefere...
    method getBranch (line 91) | private Single<String> getBranch(GitReference ref) {
    method refresh (line 106) | public Single<FullTree> refresh() {
    class RefreshTreeModel (line 124) | private class RefreshTreeModel {
      method RefreshTreeModel (line 128) | public RefreshTreeModel(GitCommit commit, GitReference ref) {
      method getRef (line 133) | public GitReference getRef() {
      method setRef (line 137) | public void setRef(GitReference ref) {
      method getCommit (line 141) | public GitCommit getCommit() {
      method setCommit (line 145) | public void setCommit(GitCommit commit) {

FILE: app/src/main/java/com/github/pockethub/android/core/commit/CommitStore.java
  class CommitStore (line 39) | @Singleton
    method CommitStore (line 50) | @Inject
    method getCommit (line 61) | public Commit getCommit(final Repository repo, final String id) {
    method addCommit (line 73) | public Commit addCommit(Repository repo, Commit commit) {
    method refreshCommit (line 96) | public Single<Commit> refreshCommit(final Repository repo, final Strin...

FILE: app/src/main/java/com/github/pockethub/android/core/commit/CommitUriMatcher.java
  class CommitUriMatcher (line 29) | public class CommitUriMatcher {
    method getCommit (line 37) | public static CommitMatch getCommit(Uri uri) {

FILE: app/src/main/java/com/github/pockethub/android/core/commit/FullCommit.java
  class FullCommit (line 34) | public class FullCommit extends ArrayList<GitComment> implements
    method FullCommit (line 48) | public FullCommit(final Commit commit) {
    method FullCommit (line 67) | public FullCommit(final Commit commit,
    method add (line 104) | @Override
    method getFiles (line 128) | public List<FullCommitFile> getFiles() {
    method getCommit (line 135) | public Commit getCommit() {

FILE: app/src/main/java/com/github/pockethub/android/core/commit/FullCommitFile.java
  class FullCommitFile (line 30) | public class FullCommitFile {
    method FullCommitFile (line 41) | public FullCommitFile(final GitHubFile file) {
    method get (line 51) | public List<GitComment> get(final int line) {
    method add (line 62) | public FullCommitFile add(final GitComment comment) {
    method getFile (line 78) | public GitHubFile getFile() {

FILE: app/src/main/java/com/github/pockethub/android/core/commit/RefreshCommitTask.java
  class RefreshCommitTask (line 39) | @AutoFactory
    method RefreshCommitTask (line 59) | public RefreshCommitTask(@Provided CommitStore store, @Provided HttpIm...
    method refresh (line 75) | public Single<FullCommit> refresh() {

FILE: app/src/main/java/com/github/pockethub/android/core/gist/GistEventMatcher.java
  class GistEventMatcher (line 27) | public class GistEventMatcher {
    method getGist (line 35) | public static Gist getGist(final GitHubEvent event) {

FILE: app/src/main/java/com/github/pockethub/android/core/gist/GistStore.java
  class GistStore (line 41) | @Singleton
    method GistStore (line 52) | @Inject
    method getGist (line 62) | public Gist getGist(String id) {
    method sortFiles (line 72) | protected Map<String, GistFile> sortFiles(final Gist gist) {
    method addGist (line 89) | public Gist addGist(Gist gist) {
    method refreshGist (line 108) | public Single<Gist> refreshGist(String id) {
    method editGist (line 119) | public Single<Gist> editGist(Gist gist) {

FILE: app/src/main/java/com/github/pockethub/android/core/gist/GistUriMatcher.java
  class GistUriMatcher (line 30) | public class GistUriMatcher {
    method getGist (line 40) | public static Gist getGist(final Uri uri) {

FILE: app/src/main/java/com/github/pockethub/android/core/gist/RefreshGistTask.java
  class RefreshGistTask (line 44) | @AutoFactory
    method RefreshGistTask (line 63) | public RefreshGistTask(@Provided GistStore store, @Provided HttpImageG...
    method refresh (line 72) | public Single<FullGist> refresh() {
    method getGistComments (line 81) | Single<List<GitHubComment>> getGistComments() {

FILE: app/src/main/java/com/github/pockethub/android/core/issue/IssueEventMatcher.java
  class IssueEventMatcher (line 29) | public class IssueEventMatcher {
    method getIssue (line 37) | public static Issue getIssue(GitHubEvent event) {

FILE: app/src/main/java/com/github/pockethub/android/core/issue/IssueFilter.java
  class IssueFilter (line 32) | public class IssueFilter implements Parcelable, Cloneable, Comparator<La...
    method IssueFilter (line 160) | public IssueFilter(final Repository repository, String id) {
    method IssueFilter (line 168) | protected IssueFilter(Parcel in) {
    method createFromParcel (line 181) | @Override
    method newArray (line 186) | @Override
    method setOpen (line 199) | public IssueFilter setOpen(final boolean open) {
    method addLabel (line 210) | public IssueFilter addLabel(Label label) {
    method setLabels (line 225) | public IssueFilter setLabels(Collection<Label> labels) {
    method getLabels (line 242) | public List<Label> getLabels() {
    method getRepository (line 249) | public Repository getRepository() {
    method setMilestone (line 257) | public IssueFilter setMilestone(Milestone milestone) {
    method getMilestone (line 265) | public Milestone getMilestone() {
    method setAssignee (line 273) | public IssueFilter setAssignee(User assignee) {
    method setDirection (line 282) | public IssueFilter setDirection(String direction) {
    method setSortType (line 292) | public IssueFilter setSortType(String sortType) {
    method getSortType (line 297) | public String getSortType() {
    method getDirection (line 301) | public String getDirection() {
    method isOpen (line 310) | public boolean isOpen() {
    method getAssignee (line 317) | public User getAssignee() {
    method toFilterMap (line 326) | public Map<String, Object> toFilterMap() {
    method toDisplay (line 362) | public CharSequence toDisplay() {
    method hashCode (line 401) | @Override
    method isEqual (line 411) | private boolean isEqual(Object a, Object b) {
    method isEqual (line 418) | private boolean isEqual(Milestone a, Milestone b) {
    method isEqual (line 425) | private boolean isEqual(User a, User b) {
    method isEqual (line 432) | private boolean isEqual(Repository a, Repository b) {
    method equals (line 436) | @Override
    method clone (line 454) | @Override
    method compare (line 464) | @Override
    method describeContents (line 469) | @Override
    method writeToParcel (line 474) | @Override
    method getId (line 486) | public String getId() {

FILE: app/src/main/java/com/github/pockethub/android/core/issue/IssueStore.java
  class IssueStore (line 43) | @Singleton
    method IssueStore (line 57) | @Inject
    method getIssue (line 68) | public Issue getIssue(Repository repository, int number) {
    method addIssue (line 79) | public Issue addIssue(Issue issue) {
    method repoFromUrl (line 90) | private Repository repoFromUrl(String url) {
    method addIssue (line 123) | public Issue addIssue(Repository repository, Issue issue) {
    method refreshIssue (line 147) | public Single<Issue> refreshIssue(Repository repository, int issueNumb...
    method editIssue (line 159) | public Single<Issue> editIssue(Repository repository, int issueNumber,...
    method changeState (line 173) | public Single<Issue> changeState(Repository repository, int issueNumbe...
    method addIssueOrThrow (line 191) | private Issue addIssueOrThrow(Repository repository, Response<Issue> r...

FILE: app/src/main/java/com/github/pockethub/android/core/issue/IssueUriMatcher.java
  class IssueUriMatcher (line 31) | public class IssueUriMatcher {
    method getIssue (line 40) | public static Issue getIssue(Uri uri) {
    method getApiIssue (line 81) | public static Issue getApiIssue(String url) {

FILE: app/src/main/java/com/github/pockethub/android/core/issue/IssueUtils.java
  class IssueUtils (line 26) | public class IssueUtils {
    method isPullRequest (line 34) | public static boolean isPullRequest(final Issue issue) {
    method toIssue (line 45) | public static Issue toIssue(final PullRequest pullRequest) {

FILE: app/src/main/java/com/github/pockethub/android/core/issue/RefreshIssueTask.java
  class RefreshIssueTask (line 46) | @AutoFactory
    method RefreshIssueTask (line 71) | public RefreshIssueTask(@Provided Context context,
    method refresh (line 89) | public Single<FullIssue> refresh() {
    method getAllComments (line 125) | private Single<List<GitHubComment>> getAllComments(String login, Strin...
    method getAllEvents (line 138) | private Single<List<IssueEvent>> getAllEvents(String login, String nam...
    method getPullRequest (line 148) | private Single<PullRequest> getPullRequest(String login, String name,

FILE: app/src/main/java/com/github/pockethub/android/core/ref/RefUtils.java
  class RefUtils (line 26) | public class RefUtils {
    method isBranch (line 42) | public static boolean isBranch(final GitReference ref) {
    method isTag (line 57) | public static boolean isTag(final GitReference ref) {
    method isTag (line 67) | public static boolean isTag(final String name) {
    method getPath (line 77) | public static String getPath(final GitReference ref) {
    method getName (line 95) | public static String getName(final GitReference ref) {
    method getName (line 109) | public static String getName(final String name) {
    method isValid (line 132) | public static boolean isValid(final GitReference ref) {

FILE: app/src/main/java/com/github/pockethub/android/core/repo/RepositoryEventMatcher.java
  class RepositoryEventMatcher (line 34) | public class RepositoryEventMatcher {
    method getRepository (line 42) | public static Repository getRepository(final GitHubEvent event) {

FILE: app/src/main/java/com/github/pockethub/android/core/repo/RepositoryUriMatcher.java
  class RepositoryUriMatcher (line 28) | public class RepositoryUriMatcher {
    method getRepository (line 36) | public static Repository getRepository(Uri uri) {

FILE: app/src/main/java/com/github/pockethub/android/core/user/UserComparator.java
  class UserComparator (line 31) | public class UserComparator implements Comparator<User> {
    method UserComparator (line 40) | @Inject
    method compare (line 45) | @Override

FILE: app/src/main/java/com/github/pockethub/android/core/user/UserEventMatcher.java
  class UserEventMatcher (line 26) | public class UserEventMatcher {
    class UserPair (line 31) | public static class UserPair {
      method UserPair (line 43) | private UserPair(final User from, final User to) {
    method getUsers (line 55) | public static UserPair getUsers(final GitHubEvent event) {

FILE: app/src/main/java/com/github/pockethub/android/core/user/UserUriMatcher.java
  class UserUriMatcher (line 28) | public class UserUriMatcher {
    method getUser (line 36) | public static User getUser(Uri uri) {

FILE: app/src/main/java/com/github/pockethub/android/dagger/ActivityBuilder.java
  type ActivityBuilder (line 31) | @Module
    method mainActivity (line 34) | @ContributesAndroidInjector(modules = MainFragmentProvider.class)
    method repositoryViewActivity (line 37) | @ContributesAndroidInjector(modules = RepositoryViewFragmentProvider.c...
    method issuesViewActivity (line 40) | @ContributesAndroidInjector(modules = IssuesViewFragmentProvider.class)
    method notificationActivity (line 43) | @ContributesAndroidInjector(modules = NotificationFragmentProvider.class)
    method createGistActivity (line 46) | @ContributesAndroidInjector
    method issueBrowseActivity (line 49) | @ContributesAndroidInjector(modules = IssueBrowseFragmentProvider.class)
    method editIssuesFilterActivity (line 52) | @ContributesAndroidInjector
    method editIssueActivity (line 55) | @ContributesAndroidInjector
    method searchActivity (line 58) | @ContributesAndroidInjector(modules = SearchActivityFragmentProvider.c...
    method filtersViewActivity (line 61) | @ContributesAndroidInjector(modules = FiltersViewFragmentProvider.class)
    method gistsViewActivity (line 64) | @ContributesAndroidInjector(modules = GistsViewFragmentProvider.class)
    method gistFilesViewActivity (line 67) | @ContributesAndroidInjector(modules = GistFilesViewFragmentProvider.cl...
    method createGistCommentActivity (line 70) | @ContributesAndroidInjector(modules = CreateCommentFragmentProvider.cl...
    method createIssueCommentActivity (line 73) | @ContributesAndroidInjector(modules = CreateCommentFragmentProvider.cl...
    method createCommitCommentActivity (line 76) | @ContributesAndroidInjector(modules = CreateCommentFragmentProvider.cl...
    method editGistCommentActivity (line 79) | @ContributesAndroidInjector(modules = CreateCommentFragmentProvider.cl...
    method editIssueCommentActivity (line 82) | @ContributesAndroidInjector(modules = CreateCommentFragmentProvider.cl...
    method repositoryContributorsActivity (line 85) | @ContributesAndroidInjector(modules = RepositoryContributorsFragmentPr...
    method userViewActivity (line 88) | @ContributesAndroidInjector(modules = UserViewFragmentProvider.class)
    method loginActivity (line 91) | @ContributesAndroidInjector
    method uriLauncherActivity (line 94) | @ContributesAndroidInjector
    method issueSearchActivity (line 97) | @ContributesAndroidInjector(modules = IssueSearchFragmentProvider.class)
    method commitCompareViewActivity (line 100) | @ContributesAndroidInjector(modules = CommitCompareViewFragmentProvide...
    method commitViewActivity (line 103) | @ContributesAndroidInjector(modules = CommitViewFragmentProvider.class)
    method commitFileViewActivity (line 106) | @ContributesAndroidInjector
    method branchFileViewActivity (line 109) | @ContributesAndroidInjector
    method loginWebViewActivity (line 112) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/CommitCompareViewFragmentProvider.java
  type CommitCompareViewFragmentProvider (line 8) | @Module
    method commitCompareListFragment (line 11) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/CommitViewFragmentProvider.java
  type CommitViewFragmentProvider (line 8) | @Module
    method commitDiffListFragment (line 11) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/CreateCommentFragmentProvider.java
  type CreateCommentFragmentProvider (line 9) | @Module
    method rawCommentFragment (line 12) | @ContributesAndroidInjector
    method renderedCommentFragment (line 15) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/DialogFragmentBuilder.java
  type DialogFragmentBuilder (line 12) | @Module
    method labelsDialogFragment (line 15) | @ContributesAndroidInjector
    method assigneeDialogFragment (line 18) | @ContributesAndroidInjector
    method milestoneDialogFragment (line 21) | @ContributesAndroidInjector
    method refDialogFragment (line 24) | @ContributesAndroidInjector
    method confirmDialogFragment (line 27) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/FiltersViewFragmentProvider.java
  type FiltersViewFragmentProvider (line 8) | @Module
    method filterListFragment (line 11) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/GistFilesViewFragmentProvider.java
  type GistFilesViewFragmentProvider (line 8) | @Module
    method gistFileFragment (line 11) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/GistsPagerFragmentProvider.java
  type GistsPagerFragmentProvider (line 10) | @Module
    method myGistsFragment (line 13) | @ContributesAndroidInjector
    method publicGistsFragment (line 16) | @ContributesAndroidInjector
    method starredGistsFragment (line 19) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/GistsViewFragmentProvider.java
  type GistsViewFragmentProvider (line 8) | @Module
    method gistFragment (line 11) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/HomePagerFragmentProvider.java
  type HomePagerFragmentProvider (line 13) | @Module
    method userReceivedNewsFragment (line 16) | @ContributesAndroidInjector
    method organizationNewsFragment (line 19) | @ContributesAndroidInjector
    method repositoryListFragment (line 22) | @ContributesAndroidInjector
    method myFollowersFragment (line 25) | @ContributesAndroidInjector
    method myFollowingFragment (line 28) | @ContributesAndroidInjector
    method membersFragment (line 31) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/IssueBrowseFragmentProvider.java
  type IssueBrowseFragmentProvider (line 8) | @Module
    method issuesFragment (line 11) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/IssueDashboardPagerFragmentProvider.java
  type IssueDashboardPagerFragmentProvider (line 8) | @Module
    method dashboardIssueFragment (line 11) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/IssueSearchFragmentProvider.java
  type IssueSearchFragmentProvider (line 8) | @Module
    method searchIssueListFragment (line 11) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/IssuesViewFragmentProvider.java
  type IssuesViewFragmentProvider (line 8) | @Module
    method issueFragment (line 11) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/MainFragmentProvider.java
  type MainFragmentProvider (line 16) | @Module
    method homePagerFragment (line 19) | @ContributesAndroidInjector(modules = HomePagerFragmentProvider.class)
    method gistsPagerFragment (line 22) | @ContributesAndroidInjector(modules = GistsPagerFragmentProvider.class)
    method issueDashboardPagerFragment (line 25) | @ContributesAndroidInjector(modules = IssueDashboardPagerFragmentProvi...
    method filterListFragment (line 28) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/NotificationFragmentProvider.java
  type NotificationFragmentProvider (line 8) | @Module
    method notificationListFragment (line 11) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/RepositoryContributorsFragmentProvider.java
  type RepositoryContributorsFragmentProvider (line 8) | @Module
    method repositoryContributorsFragment (line 11) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/RepositoryViewFragmentProvider.java
  type RepositoryViewFragmentProvider (line 12) | @Module
    method repositoryReadmeFragment (line 15) | @ContributesAndroidInjector
    method repositoryNewsFragment (line 18) | @ContributesAndroidInjector
    method repositoryCodeFragment (line 21) | @ContributesAndroidInjector
    method commitListFragment (line 24) | @ContributesAndroidInjector
    method issuesFragment (line 27) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/SearchActivityFragmentProvider.java
  type SearchActivityFragmentProvider (line 9) | @Module
    method searchRepositoryListFragment (line 12) | @ContributesAndroidInjector
    method searchUserListFragment (line 15) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/ServiceBuilder.java
  type ServiceBuilder (line 8) | @Module
    method provideSyncAdapterService (line 11) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/dagger/UserViewFragmentProvider.java
  type UserViewFragmentProvider (line 11) | @Module
    method userCreatedNewsFragment (line 14) | @ContributesAndroidInjector
    method userRepositoryListFragment (line 17) | @ContributesAndroidInjector
    method userFollowersFragment (line 20) | @ContributesAndroidInjector
    method userFollowingFragment (line 23) | @ContributesAndroidInjector

FILE: app/src/main/java/com/github/pockethub/android/markwon/AlignHandler.java
  class AlignHandler (line 16) | public class AlignHandler extends SimpleTagHandler {
    method getSpans (line 18) | @Nullable
    method supportedTags (line 47) | @NonNull

FILE: app/src/main/java/com/github/pockethub/android/markwon/AsyncDrawableSchedulerPlugin.java
  class AsyncDrawableSchedulerPlugin (line 11) | public class AsyncDrawableSchedulerPlugin extends AbstractMarkwonPlugin {
    method beforeSetText (line 12) | @Override
    method afterSetText (line 17) | @Override
    method onLayoutChange (line 22) | private void onLayoutChange(View v, int left, int top, int right, int ...

FILE: app/src/main/java/com/github/pockethub/android/markwon/FontResolver.java
  class FontResolver (line 8) | public class FontResolver extends SimpleAssetResolver {
    method FontResolver (line 10) | public FontResolver(AssetManager assetManager) {
    method resolveFont (line 14) | @Override

FILE: app/src/main/java/com/github/pockethub/android/markwon/GifAwareGlideStore.java
  class GifAwareGlideStore (line 20) | class GifAwareGlideStore implements GlideImagesPlugin.GlideStore {
    method GifAwareGlideStore (line 23) | public GifAwareGlideStore(Context context) {
    method load (line 27) | @NonNull
    method cancel (line 48) | @Override

FILE: app/src/main/java/com/github/pockethub/android/markwon/MarkwonUtils.java
  class MarkwonUtils (line 29) | @PrismBundle(
    method createMarkwon (line 34) | public static Markwon createMarkwon (Context context, String baseUrl) {

FILE: app/src/main/java/com/github/pockethub/android/markwon/SpanLinkPlugin.java
  class SpanLinkPlugin (line 18) | public class SpanLinkPlugin extends AbstractMarkwonPlugin {
    method SpanLinkPlugin (line 23) | public SpanLinkPlugin(String baseUrl) {
    method configureSpansFactory (line 29) | @Override

FILE: app/src/main/java/com/github/pockethub/android/markwon/SvgDecoder.java
  class SvgDecoder (line 14) | public class SvgDecoder implements ResourceDecoder<InputStream, SVG> {
    method handles (line 16) | @Override
    method decode (line 22) | public Resource<SVG> decode(

FILE: app/src/main/java/com/github/pockethub/android/markwon/SvgDrawableTranscoder.java
  class SvgDrawableTranscoder (line 17) | public class SvgDrawableTranscoder implements ResourceTranscoder<SVG, Dr...
    method transcode (line 18) | @Nullable

FILE: app/src/main/java/com/github/pockethub/android/markwon/SvgModule.java
  class SvgModule (line 15) | @GlideModule
    method registerComponents (line 17) | @Override
    method isManifestParsingEnabled (line 24) | @Override

FILE: app/src/main/java/com/github/pockethub/android/persistence/AccountDataManager.java
  class AccountDataManager (line 50) | public class AccountDataManager {
    method AccountDataManager (line 78) | @Inject
    method getContext (line 84) | public Context getContext() {
    method read (line 94) | @SuppressWarnings("unchecked")
    method write (line 115) | private AccountDataManager write(File file, Object data) {
    method query (line 128) | protected Cursor query(SQLiteOpenHelper helper, String tables,
    method query (line 143) | protected Cursor query(SQLiteOpenHelper helper, String tables,
    method getOrgs (line 161) | public List<User> getOrgs(boolean forceReload) throws IOException {
    method getRepos (line 178) | public List<Repository> getRepos(final User user, boolean forceReload)
    method getIssueFilters (line 193) | public List<IssueFilter> getIssueFilters() {
    method addIssueFilter (line 290) | public Single<IssueFilter> addIssueFilter(final IssueFilter filter) {
    method removeIssueFilter (line 362) | public Single<IssueFilter> removeIssueFilter(IssueFilter filter) {

FILE: app/src/main/java/com/github/pockethub/android/persistence/OrganizationRepositoriesFactory.java
  class OrganizationRepositoriesFactory (line 10) | public class OrganizationRepositoriesFactory {
    method OrganizationRepositoriesFactory (line 18) | @Inject
    method create (line 23) | public OrganizationRepositories create(User org) {

FILE: app/src/main/java/com/github/pockethub/android/persistence/PersistableResource.java
  type PersistableResource (line 30) | public interface PersistableResource<E> {
    method loadItems (line 38) | List<E> loadItems(Database database);
    method store (line 46) | void store(Database database, List<E> items);
    method request (line 55) | List<E> request() throws IOException;

FILE: app/src/main/java/com/github/pockethub/android/rx/AutoDisposeUtils.java
  class AutoDisposeUtils (line 10) | public class AutoDisposeUtils {
    method bindToLifecycle (line 12) | public static <T> AutoDisposeConverter<T> bindToLifecycle(LifecycleOwn...
    method bindToLifecycle (line 16) | public static <T> AutoDisposeConverter<T> bindToLifecycle(Lifecycle li...
    method bindToLifecycle (line 20) | public static <T> AutoDisposeConverter<T> bindToLifecycle(LifecycleOwn...
    method bindToLifecycle (line 25) | public static <T> AutoDisposeConverter<T> bindToLifecycle(Lifecycle li...

FILE: app/src/main/java/com/github/pockethub/android/rx/RxProgress.java
  class RxProgress (line 10) | public final class RxProgress {
    method RxProgress (line 12) | private RxProgress() {
    method bindToLifecycle (line 16) | public static <U> SingleTransformer<U, U> bindToLifecycle(Context cont...
    method bindToLifecycle (line 20) | public static <U> SingleTransformer<U, U> bindToLifecycle(Context cont...

FILE: app/src/main/java/com/github/pockethub/android/sync/ContentProviderAdapter.java
  class ContentProviderAdapter (line 26) | public class ContentProviderAdapter extends ContentProvider {
    method delete (line 28) | @Override
    method getType (line 33) | @Override
    method insert (line 38) | @Override
    method onCreate (line 43) | @Override
    method query (line 48) | @Override
    method update (line 54) | @Override

FILE: app/src/main/java/com/github/pockethub/android/sync/SyncAdapter.java
  class SyncAdapter (line 31) | @Singleton
    method SyncAdapter (line 44) | @Inject
    method onPerformSync (line 49) | @Override
    method onSyncCanceled (line 58) | @Override
    method cancelCampaign (line 63) | private void cancelCampaign() {

FILE: app/src/main/java/com/github/pockethub/android/sync/SyncAdapterService.java
  class SyncAdapterService (line 29) | public class SyncAdapterService extends DaggerService {
    method onBind (line 34) | @Override

FILE: app/src/main/java/com/github/pockethub/android/sync/SyncCampaign.java
  class SyncCampaign (line 33) | @AutoFactory
    method SyncCampaign (line 53) | public SyncCampaign(@Provided DatabaseCache cache,
    method run (line 63) | @Override
    method cancel (line 97) | public void cancel() {

FILE: app/src/main/java/com/github/pockethub/android/ui/ConfirmDialogFragment.java
  class ConfirmDialogFragment (line 36) | public class ConfirmDialogFragment extends DialogFragmentHelper implements
    method show (line 49) | public static void show(final FragmentActivity activity,
    method show (line 63) | public static void show(final FragmentActivity activity,
    method onCreateDialog (line 73) | @Override
    method onClick (line 88) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/DialogResultListener.java
  type DialogResultListener (line 24) | public interface DialogResultListener {
    method onDialogResult (line 35) | void onDialogResult(int requestCode, int resultCode, Bundle arguments);

FILE: app/src/main/java/com/github/pockethub/android/ui/FragmentProvider.java
  type FragmentProvider (line 23) | public interface FragmentProvider {
    method getSelected (line 30) | Fragment getSelected();

FILE: app/src/main/java/com/github/pockethub/android/ui/SingleChoiceDialogFragment.java
  class SingleChoiceDialogFragment (line 33) | public class SingleChoiceDialogFragment extends DialogFragmentHelper
    method show (line 67) | protected static void show(final BaseActivity activity,
    method onItemClick (line 77) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/TextWatcherAdapter.java
  class TextWatcherAdapter (line 24) | public class TextWatcherAdapter implements TextWatcher {
    method afterTextChanged (line 26) | @Override
    method beforeTextChanged (line 30) | @Override
    method onTextChanged (line 35) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/ViewPager.java
  class ViewPager (line 26) | public class ViewPager extends androidx.viewpager.widget.ViewPager {
    method ViewPager (line 31) | public ViewPager(final Context context) {
    method ViewPager (line 39) | public ViewPager(final Context context, final AttributeSet attrs) {
    method setItem (line 52) | public boolean setItem(final int item) {
    method setItem (line 71) | public boolean setItem(final int item, final OnPageChangeListener list...
    method scheduleSetItem (line 85) | public void scheduleSetItem(final int item,
    method scheduleSetItem (line 95) | public void scheduleSetItem(final int item) {
    method canScroll (line 99) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/WebView.java
  class WebView (line 25) | public class WebView extends android.webkit.WebView {
    method WebView (line 35) | public WebView(final Context context, final AttributeSet attrs,
    method WebView (line 45) | public WebView(final Context context, final AttributeSet attrs,
    method WebView (line 54) | public WebView(final Context context, final AttributeSet attrs) {
    method WebView (line 61) | public WebView(final Context context) {
    method onInterceptTouchEvent (line 65) | @Override
    method onTouchEvent (line 71) | @Override
    method canScrollCodeHorizontally (line 80) | private boolean canScrollCodeHorizontally(final int direction) {
    method startIntercept (line 94) | public void startIntercept() {
    method stopIntercept (line 98) | public void stopIntercept() {

FILE: app/src/main/java/com/github/pockethub/android/ui/base/AccountAuthenticatorAppCompatActivity.java
  class AccountAuthenticatorAppCompatActivity (line 39) | public abstract class AccountAuthenticatorAppCompatActivity extends Base...
    method setAccountAuthenticatorResult (line 49) | public final void setAccountAuthenticatorResult(Bundle result) {
    method onCreate (line 58) | @Override
    method finish (line 73) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/base/DialogFragmentHelper.java
  class DialogFragmentHelper (line 35) | public abstract class DialogFragmentHelper extends DaggerAppCompatDialog...
    method show (line 60) | protected static void show(FragmentActivity activity,
    method createArguments (line 82) | protected static Bundle createArguments(final String title,
    method onResult (line 96) | protected void onResult(final int resultCode) {
    method getTitle (line 111) | protected String getTitle() {
    method getMessage (line 120) | protected String getMessage() {
    method onCancel (line 124) | @Override
    method createDialogBuilder (line 134) | protected MaterialDialog.Builder createDialogBuilder() {

FILE: app/src/main/java/com/github/pockethub/android/ui/base/FragmentPagerAdapter.java
  class FragmentPagerAdapter (line 31) | public abstract class FragmentPagerAdapter extends
    method FragmentPagerAdapter (line 47) | public FragmentPagerAdapter(AppCompatActivity activity) {
    method FragmentPagerAdapter (line 54) | public FragmentPagerAdapter(Fragment fragment) {
    method isEmpty (line 61) | public boolean isEmpty() {
    method clearAdapter (line 71) | public FragmentPagerAdapter clearAdapter() {
    method getSelected (line 89) | @Override
    method instantiateItem (line 94) | @Override
    method getFragmentByPosition (line 115) | public Fragment getFragmentByPosition(int fragmentPosition) {
    method setPrimaryItem (line 120) | @Override
    method getFragmentTag (line 139) | private String getFragmentTag(int viewPagerId, int fragmentPosition) {

FILE: app/src/main/java/com/github/pockethub/android/ui/base/FragmentStatePagerAdapter.java
  class FragmentStatePagerAdapter (line 26) | public abstract class FragmentStatePagerAdapter extends
    method FragmentStatePagerAdapter (line 37) | public FragmentStatePagerAdapter(final AppCompatActivity activity) {
    method FragmentStatePagerAdapter (line 46) | public FragmentStatePagerAdapter(final Fragment fragment) {
    method getSelected (line 52) | @Override
    method setPrimaryItem (line 57) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/comment/CommentPreviewPagerAdapter.java
  class CommentPreviewPagerAdapter (line 29) | public class CommentPreviewPagerAdapter extends FragmentPagerAdapter {
    method CommentPreviewPagerAdapter (line 45) | public CommentPreviewPagerAdapter(AppCompatActivity activity, Reposito...
    method getItem (line 51) | @Override
    method getCount (line 66) | @Override
    method getCommentText (line 76) | public String getCommentText() {
    method setCommentText (line 89) | public void setCommentText(String comment) {
    method setCurrentItem (line 102) | public CommentPreviewPagerAdapter setCurrentItem(int position) {
    method getPageTitle (line 109) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/comment/DeleteCommentListener.java
  type DeleteCommentListener (line 23) | public interface DeleteCommentListener {
    method onDeleteComment (line 30) | void onDeleteComment(GitHubComment comment);

FILE: app/src/main/java/com/github/pockethub/android/ui/comment/EditCommentListener.java
  type EditCommentListener (line 23) | public interface EditCommentListener {
    method onEditComment (line 30) | void onEditComment(GitHubComment comment);

FILE: app/src/main/java/com/github/pockethub/android/ui/commit/CommitCompareViewActivity.java
  class CommitCompareViewActivity (line 41) | public class CommitCompareViewActivity extends BaseActivity {
    method createIntent (line 51) | public static Intent createIntent(final Repository repository,
    method onCreate (line 64) | @Override
    method onCreateOptionsMenu (line 79) | @Override
    method onOptionsItemSelected (line 88) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/commit/CommitFileComparator.java
  class CommitFileComparator (line 28) | public class CommitFileComparator implements Comparator<GitHubFile> {
    method compare (line 30) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/commit/CommitPagerAdapter.java
  class CommitPagerAdapter (line 31) | public class CommitPagerAdapter extends FragmentStatePagerAdapter {
    method CommitPagerAdapter (line 42) | public CommitPagerAdapter(AppCompatActivity activity,
    method getItem (line 50) | @Override
    method getCount (line 60) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/commit/CreateCommentActivity.java
  class CreateCommentActivity (line 47) | public class CreateCommentActivity extends
    method createIntent (line 57) | public static Intent createIntent(Repository repository, String commit) {
    method createIntent (line 70) | public static Intent createIntent(Repository repository, String commit,
    method isLineComment (line 81) | private static boolean isLineComment(final String path, final int posi...
    method onCreate (line 93) | @Override
    method createComment (line 109) | @Override
    method createAdapter (line 129) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/commit/DiffStyler.java
  class DiffStyler (line 35) | public class DiffStyler {
    method DiffStyler (line 48) | public DiffStyler(final Resources resources) {
    method nextLine (line 53) | private int nextLine(final String patch, final int start, final int le...
    method updateColors (line 68) | public void updateColors(final CharSequence line, final TextView view) {
    method setFiles (line 100) | public DiffStyler setFiles(final Collection<GitHubFile> files) {
    method get (line 132) | public List<CharSequence> get(final String file) {

FILE: app/src/main/java/com/github/pockethub/android/ui/gist/CreateCommentActivity.java
  class CreateCommentActivity (line 41) | public class CreateCommentActivity extends
    method createIntent (line 50) | public static Intent createIntent(Gist gist) {
    method onCreate (line 60) | @Override
    method createComment (line 75) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/gist/EditCommentActivity.java
  class EditCommentActivity (line 45) | public class EditCommentActivity extends
    method createIntent (line 56) | public static Intent createIntent(Gist gist, GitHubComment comment) {
    method onCreate (line 70) | @Override
    method createComment (line 85) | @Override
    method editComment (line 98) | protected void editComment(CommentRequest commentRequest) {
    method createAdapter (line 111) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/gist/GistFilesPagerAdapter.java
  class GistFilesPagerAdapter (line 33) | public class GistFilesPagerAdapter extends FragmentPagerAdapter {
    method GistFilesPagerAdapter (line 41) | public GistFilesPagerAdapter(AppCompatActivity activity, Gist gist) {
    method getPageTitle (line 52) | @Override
    method getItem (line 57) | @Override
    method getCount (line 67) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/gist/GistQueriesPagerAdapter.java
  class GistQueriesPagerAdapter (line 27) | public class GistQueriesPagerAdapter extends FragmentPagerAdapter {
    method GistQueriesPagerAdapter (line 36) | public GistQueriesPagerAdapter(Fragment fragment) {
    method getCount (line 42) | @Override
    method getItem (line 47) | @Override
    method getPageTitle (line 61) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/gist/GistsPagerAdapter.java
  class GistsPagerAdapter (line 31) | public class GistsPagerAdapter extends FragmentStatePagerAdapter {
    method GistsPagerAdapter (line 41) | public GistsPagerAdapter(AppCompatActivity activity, String[] gistIds) {
    method getItem (line 47) | @Override
    method getCount (line 56) | @Override
    method destroyItem (line 61) | @Override
    method instantiateItem (line 68) | @Override
    method onDialogResult (line 86) | public GistsPagerAdapter onDialogResult(int position, int requestCode,

FILE: app/src/main/java/com/github/pockethub/android/ui/gist/MyGistsFragment.java
  class MyGistsFragment (line 37) | public class MyGistsFragment extends GistsFragment {
    method onActivityResult (line 44) | @Override
    method loadData (line 55) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/gist/PublicGistsFragment.java
  class PublicGistsFragment (line 29) | public class PublicGistsFragment extends GistsFragment {
    method loadData (line 33) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/gist/StarredGistsFragment.java
  class StarredGistsFragment (line 29) | public class StarredGistsFragment extends GistsFragment {
    method loadData (line 33) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/AssigneeDialog.java
  class AssigneeDialog (line 44) | public class AssigneeDialog {
    method AssigneeDialog (line 61) | public AssigneeDialog(final BaseActivity activity,
    method show (line 82) | public void show(User selectedAssignee) {

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/AssigneeDialogFragment.java
  class AssigneeDialogFragment (line 41) | public class AssigneeDialogFragment extends SingleChoiceDialogFragment {
    method getSelected (line 49) | public static User getSelected(Bundle arguments) {
    method show (line 63) | public static void show(final BaseActivity activity,
    method onCreateDialog (line 73) | @NonNull
    method getChoices (line 92) | @SuppressWarnings("unchecked")
    method onItemClick (line 97) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/CreateCommentActivity.java
  class CreateCommentActivity (line 44) | public class CreateCommentActivity extends
    method createIntent (line 55) | public static Intent createIntent(Repository repoId, int issueNumber,
    method onCreate (line 68) | @Override
    method createComment (line 81) | @Override
    method createAdapter (line 95) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/EditAssigneeTask.java
  class EditAssigneeTask (line 42) | @AutoFactory
    method EditAssigneeTask (line 64) | public EditAssigneeTask(@Provided IssueStore store, final BaseActivity...
    method prompt (line 82) | public EditAssigneeTask prompt(User assignee) {
    method edit (line 93) | public EditAssigneeTask edit(User assignee) {

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/EditCommentActivity.java
  class EditCommentActivity (line 49) | public class EditCommentActivity extends
    method createIntent (line 62) | public static Intent createIntent(Repository repoId, int issueNumber, ...
    method onCreate (line 81) | @Override
    method createComment (line 95) | @Override
    method editComment (line 105) | protected void editComment(String commentText) {
    method createAdapter (line 123) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/EditLabelsTask.java
  class EditLabelsTask (line 44) | @AutoFactory
    method EditLabelsTask (line 66) | public EditLabelsTask(@Provided IssueStore store, final BaseActivity a...
    method prompt (line 85) | public EditLabelsTask prompt(List<Label> labels) {
    method edit (line 96) | public EditLabelsTask edit(@NonNull List<Label> labels) {

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/EditMilestoneTask.java
  class EditMilestoneTask (line 39) | @AutoFactory
    method EditMilestoneTask (line 61) | public EditMilestoneTask(@Provided IssueStore store, final BaseActivit...
    method prompt (line 78) | public EditMilestoneTask prompt(Milestone milestone) {
    method edit (line 89) | public EditMilestoneTask edit(Milestone milestone) {

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/EditStateTask.java
  class EditStateTask (line 40) | @AutoFactory
    method EditStateTask (line 58) | public EditStateTask(@Provided IssueStore store, final BaseActivity ac...
    method confirm (line 74) | public EditStateTask confirm(boolean close) {
    method edit (line 92) | public EditStateTask edit(boolean close) {

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/FiltersViewActivity.java
  class FiltersViewActivity (line 41) | public class FiltersViewActivity extends BaseActivity implements DialogR...
    method createIntent (line 50) | public static Intent createIntent() {
    method onCreate (line 59) | @Override
    method onDialogResult (line 72) | @Override
    method onDestroy (line 87) | @Override
    method onOptionsItemSelected (line 95) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/IssueBrowseActivity.java
  class IssueBrowseActivity (line 38) | public class IssueBrowseActivity extends BaseActivity {
    method createIntent (line 46) | public static Intent createIntent(IssueFilter filter) {
    method onCreate (line 53) | @Override
    method onOptionsItemSelected (line 66) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/IssueDashboardPagerAdapter.java
  class IssueDashboardPagerAdapter (line 33) | public class IssueDashboardPagerAdapter extends FragmentStatePagerAdapter {
    method IssueDashboardPagerAdapter (line 42) | public IssueDashboardPagerAdapter(final Fragment fragment) {
    method getCount (line 48) | @Override
    method getItem (line 53) | @Override
    method getPageTitle (line 83) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/IssueSearchActivity.java
  class IssueSearchActivity (line 42) | public class IssueSearchActivity extends BaseActivity {
    method onCreateOptionsMenu (line 52) | @Override
    method onOptionsItemSelected (line 67) | @Override
    method onCreate (line 87) | @Override
    method onNewIntent (line 108) | @Override
    method handleIntent (line 115) | private void handleIntent(Intent intent) {
    method search (line 121) | private void search(final String query) {

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/IssueSearchSuggestionsProvider.java
  class IssueSearchSuggestionsProvider (line 27) | public class IssueSearchSuggestionsProvider extends
    method save (line 38) | public static void save(Context context, String query) {
    method clear (line 47) | public static void clear(Context context) {
    method suggestions (line 51) | private static SearchRecentSuggestions suggestions(Context context) {
    method IssueSearchSuggestionsProvider (line 59) | public IssueSearchSuggestionsProvider() {

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/IssuesPagerAdapter.java
  class IssuesPagerAdapter (line 38) | public class IssuesPagerAdapter extends FragmentStatePagerAdapter {
    method IssuesPagerAdapter (line 59) | public IssuesPagerAdapter(AppCompatActivity activity,
    method IssuesPagerAdapter (line 77) | public IssuesPagerAdapter(AppCompatActivity activity,
    method getItem (line 89) | @Override
    method destroyItem (line 116) | @Override
    method instantiateItem (line 123) | @Override
    method getCount (line 132) | @Override
    method onDialogResult (line 146) | public IssuesPagerAdapter onDialogResult(int position, int requestCode,

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/LabelsDialog.java
  class LabelsDialog (line 47) | public class LabelsDialog {
    method LabelsDialog (line 64) | public LabelsDialog(final BaseActivity activity,
    method show (line 85) | public void show(Collection<Label> selectedLabels) {

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/LabelsDialogFragment.java
  class LabelsDialogFragment (line 41) | public class LabelsDialogFragment extends DialogFragmentHelper implement...
    method getSelected (line 63) | @SuppressWarnings("unchecked")
    method show (line 78) | public static void show(final BaseActivity activity, final int request...
    method onCreateDialog (line 87) | @NonNull
    method getChoices (line 121) | @SuppressWarnings("unchecked")
    method onResult (line 126) | @Override
    method onItemClick (line 145) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/issue/MilestoneDialog.java
  class MilestoneDialog (line 44) | public class MilestoneDialog {
    method MilestoneDialog (line 61) | public MilestoneDialog(final BaseActivity activity,
    method show (line 83) | public void show(Milestone selectedMilestone) {

FILE: app/src/main/java/com/github/pockethub/android/ui/notification/NotificationPagerAdapter.java
  class NotificationPagerAdapter (line 10) | class NotificationPagerAdapter extends FragmentPagerAdapter {
    method NotificationPagerAdapter (line 14) | public NotificationPagerAdapter(AppCompatActivity activity) {
    method getItem (line 19) | @Override
    method getPageTitle (line 40) | @Override
    method getCount (line 54) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/notification/NotificationReadListener.java
  type NotificationReadListener (line 13) | public interface NotificationReadListener {
    method readNotification (line 15) | void readNotification(@NonNull NotificationThread thread);
    method readNotifications (line 17) | void readNotifications(@Nullable Repository repository);

FILE: app/src/main/java/com/github/pockethub/android/ui/ref/RefDialog.java
  class RefDialog (line 45) | public class RefDialog {
    method RefDialog (line 62) | public RefDialog(final BaseActivity activity,
    method show (line 84) | public void show(GitReference selectedRef) {

FILE: app/src/main/java/com/github/pockethub/android/ui/ref/RefDialogFragment.java
  class RefDialogFragment (line 38) | public class RefDialogFragment extends SingleChoiceDialogFragment {
    method getSelected (line 46) | public static GitReference getSelected(Bundle arguments) {
    method show (line 60) | public static void show(final BaseActivity activity, final int request...
    method onCreateDialog (line 67) | @NonNull
    method getChoices (line 84) | @SuppressWarnings("unchecked")
    method onItemClick (line 90) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/repo/RecentRepositories.java
  class RecentRepositories (line 37) | public class RecentRepositories implements Comparator<Repository>, Seria...
    method getFile (line 48) | private static File getFile(final Context context, final User organiza...
    method RecentRepositories (line 65) | public RecentRepositories(final Context context, final User organizati...
    method load (line 70) | private void load() {
    method trim (line 79) | private void trim() {
    method add (line 93) | public RecentRepositories add(final Repository repo) {
    method add (line 103) | public RecentRepositories add(final long id) {
    method remove (line 119) | public RecentRepositories remove(final Repository repo) {
    method remove (line 129) | public RecentRepositories remove(final long id) {
    method saveAsync (line 142) | public RecentRepositories saveAsync() {
    method save (line 161) | public RecentRepositories save() {
    method contains (line 175) | public boolean contains(Repository repository) {
    method contains (line 185) | public boolean contains(long id) {
    method compare (line 192) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/repo/RepositoryContributorsActivity.java
  class RepositoryContributorsActivity (line 36) | public class RepositoryContributorsActivity extends BaseActivity {
    method createIntent (line 44) | public static Intent createIntent(Repository repository) {
    method onCreate (line 50) | @Override
    method onOptionsItemSelected (line 65) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/repo/RepositoryNewsFragment.java
  class RepositoryNewsFragment (line 41) | public class RepositoryNewsFragment extends NewsFragment {
    method onAttach (line 47) | @Override
    method loadData (line 54) | @Override
    method viewRepository (line 64) | @Override
    method viewIssue (line 71) | @Override
    method viewUser (line 76) | @Override
    method viewUser (line 85) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/repo/RepositoryPagerAdapter.java
  class RepositoryPagerAdapter (line 32) | public class RepositoryPagerAdapter extends FragmentPagerAdapter {
    method RepositoryPagerAdapter (line 50) | public RepositoryPagerAdapter(AppCompatActivity activity,
    method getPageTitle (line 59) | @Override
    method getItem (line 79) | @Override
    method getCount (line 101) | @Override
    method getItemCode (line 112) | public int getItemCode() {
    method getItemCommits (line 119) | public int getItemCommits() {
    method onBackPressed (line 128) | public boolean onBackPressed() {
    method onDialogResult (line 141) | public RepositoryPagerAdapter onDialogResult(int position, int request...

FILE: app/src/main/java/com/github/pockethub/android/ui/search/RepositorySearchSuggestionsProvider.java
  class RepositorySearchSuggestionsProvider (line 27) | public class RepositorySearchSuggestionsProvider extends
    method save (line 38) | public static void save(Context context, String query) {
    method clear (line 47) | public static void clear(Context context) {
    method suggestions (line 51) | private static SearchRecentSuggestions suggestions(Context context) {
    method RepositorySearchSuggestionsProvider (line 59) | public RepositorySearchSuggestionsProvider() {

FILE: app/src/main/java/com/github/pockethub/android/ui/search/SearchPagerAdapter.java
  class SearchPagerAdapter (line 28) | public class SearchPagerAdapter extends FragmentPagerAdapter {
    method SearchPagerAdapter (line 37) | public SearchPagerAdapter(AppCompatActivity activity) {
    method getPageTitle (line 43) | @Override
    method getItem (line 55) | @Override
    method getCount (line 67) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/user/MyFollowersFragment.java
  class MyFollowersFragment (line 29) | public class MyFollowersFragment extends FollowersFragment {
    method loadData (line 33) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/user/MyFollowingFragment.java
  class MyFollowingFragment (line 29) | public class MyFollowingFragment extends FollowingFragment {
    method loadData (line 33) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/user/OrganizationNewsFragment.java
  class OrganizationNewsFragment (line 30) | public class OrganizationNewsFragment extends UserNewsFragment {
    method loadData (line 34) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/user/OrganizationSelectionListener.java
  type OrganizationSelectionListener (line 23) | public interface OrganizationSelectionListener {
    method onOrganizationSelected (line 30) | void onOrganizationSelected(User organization);

FILE: app/src/main/java/com/github/pockethub/android/ui/user/OrganizationSelectionProvider.java
  type OrganizationSelectionProvider (line 23) | public interface OrganizationSelectionProvider {
    method addListener (line 31) | User addListener(OrganizationSelectionListener listener);
    method removeListener (line 39) | OrganizationSelectionProvider removeListener(

FILE: app/src/main/java/com/github/pockethub/android/ui/user/UriLauncherActivity.java
  class UriLauncherActivity (line 51) | public class UriLauncherActivity extends Activity {
    method launchUri (line 57) | static public void launchUri(Context context, Uri data) {
    method convert (line 73) | static public Intent convert(final Intent intent) {
    method onCreate (line 114) | @Override
    method getIntentForURI (line 136) | static private Intent getIntentForURI(Uri data) {
    method showParseError (line 167) | private void showParseError(String url) {

FILE: app/src/main/java/com/github/pockethub/android/ui/user/UserCreatedNewsFragment.java
  class UserCreatedNewsFragment (line 29) | public class UserCreatedNewsFragment extends UserNewsFragment {
    method loadData (line 33) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/user/UserFollowersFragment.java
  class UserFollowersFragment (line 33) | public class UserFollowersFragment extends FollowersFragment {
    method onAttach (line 39) | @Override
    method loadData (line 46) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/user/UserFollowingFragment.java
  class UserFollowingFragment (line 33) | public class UserFollowingFragment extends FollowingFragment {
    method onAttach (line 39) | @Override
    method loadData (line 46) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/user/UserNewsFragment.java
  class UserNewsFragment (line 30) | public abstract class UserNewsFragment extends NewsFragment implements
    method onSaveInstanceState (line 38) | @Override
    method onActivityCreated (line 47) | @Override
    method onDetach (line 64) | @Override
    method viewRepository (line 74) | @Override
    method onOrganizationSelected (line 84) | @Override
    method viewUser (line 94) | @Override
    method viewUser (line 103) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/user/UserPagerAdapter.java
  class UserPagerAdapter (line 29) | public class UserPagerAdapter extends FragmentPagerAdapter {
    method UserPagerAdapter (line 36) | public UserPagerAdapter(final AppCompatActivity activity) {
    method getItem (line 42) | @Override
    method getCount (line 58) | @Override
    method getPageTitle (line 63) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/user/UserReceivedNewsFragment.java
  class UserReceivedNewsFragment (line 29) | public class UserReceivedNewsFragment extends UserNewsFragment {
    method loadData (line 33) | @Override

FILE: app/src/main/java/com/github/pockethub/android/ui/view/OcticonTextView.java
  class OcticonTextView (line 8) | public class OcticonTextView extends AppCompatTextView {
    method OcticonTextView (line 192) | public OcticonTextView(Context context, AttributeSet attrs) {
    method getOcticons (line 201) | private Typeface getOcticons() {
    method getTypeface (line 211) | private static Typeface getTypeface(final Context context, final Strin...

FILE: app/src/main/java/com/github/pockethub/android/util/ConvertUtils.java
  class ConvertUtils (line 22) | public class ConvertUtils {
    method eventRepoToRepo (line 30) | public static Repository eventRepoToRepo(GitHubEvent.RepoIdentifier re...

FILE: app/src/main/java/com/github/pockethub/android/util/GravatarUtils.java
  class GravatarUtils (line 31) | public class GravatarUtils {
    method digest (line 58) | private static String digest(final String value) {
    method getHash (line 92) | publ
Condensed preview — 732 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,819K chars).
[
  {
    "path": ".gitattributes",
    "chars": 81,
    "preview": "# Set default behaviour, in case users don't have core.autocrlf set.\n* text=auto\n"
  },
  {
    "path": ".gitignore",
    "chars": 1422,
    "preview": "*/target\ntarget\ntmp\n*~\nbin\n*/test-output\ntemp-testng-customsuite.xml\n**pom.xml.releaseBackup\nrelease.properties\ngen\n*/se"
  },
  {
    "path": ".travis.yml",
    "chars": 552,
    "preview": "language: android\nandroid:\n   components:\n   - tools\n   - tools #Running this twice get's the latest build tools (https:"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 2201,
    "preview": "Contributing\n============\n\n## Reporting issues\n\n* IMPORTANT: Any issues reported regarding the old Play Store version of"
  },
  {
    "path": "ISSUE_TEMPLATE.md",
    "chars": 823,
    "preview": "## If the issues at hand is a BUG, please follow this template. Otherwise feel free to ignore it.\n\n## Description\nA conc"
  },
  {
    "path": "LICENSE",
    "chars": 11358,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "README.md",
    "chars": 3793,
    "preview": "# PocketHub [![Build Status](https://travis-ci.org/pockethub/PocketHub.svg?branch=master)](https://travis-ci.org/pocketh"
  },
  {
    "path": "app/build.gradle",
    "chars": 8280,
    "preview": "apply plugin: 'com.android.application'\napply plugin: 'kotlin-android'\napply plugin: 'kotlin-android-extensions'\napply p"
  },
  {
    "path": "app/quality.gradle",
    "chars": 448,
    "preview": "apply plugin: 'checkstyle'\n\ncheck.dependsOn 'checkstyle'\n\ncheckstyle {\n    toolVersion = '7.5.1'\n}\n\ntask checkstyle(type"
  },
  {
    "path": "app/src/androidTest/AndroidManifest.xml",
    "chars": 329,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/NewsEventTextTest.java",
    "chars": 9687,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/ViewVisibiltyIdlingResource.kt",
    "chars": 2468,
    "preview": "package com.github.pockethub.android.tests\n\nimport android.app.Activity\nimport android.os.Handler\nimport android.view.Vi"
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/commit/CommitUriMatcherTest.java",
    "chars": 3274,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/commit/CommitUtilsTest.java",
    "chars": 7557,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/commit/CreateCommentActivityTest.java",
    "chars": 2637,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/commit/DiffStylerTest.java",
    "chars": 4874,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/commit/FullCommitTest.java",
    "chars": 4494,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/gist/CreateCommentActivityTest.java",
    "chars": 2632,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/gist/CreateGistActivityTest.java",
    "chars": 2510,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/gist/GistFilesViewActivityTest.java",
    "chars": 3050,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/gist/GistStoreTest.java",
    "chars": 1931,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/gist/GistUriMatcherTest.java",
    "chars": 2224,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/issue/CreateCommentActivityTest.java",
    "chars": 2634,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/issue/EditIssueActivityTest.java",
    "chars": 3085,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/issue/EditIssuesFilterActivityTest.java",
    "chars": 1547,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/issue/IssueFilterTest.java",
    "chars": 2642,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/issue/IssueStoreTest.java",
    "chars": 2007,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/issue/IssueUriMatcherTest.java",
    "chars": 3610,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/ref/RefUtilsTest.java",
    "chars": 4568,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/repo/RecentRepositoriesTest.java",
    "chars": 3526,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/repo/RepositoryEventMatcherTest.java",
    "chars": 2814,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/repo/RepositoryUriMatcherTest.java",
    "chars": 3030,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/repo/SearchActivityTest.java",
    "chars": 1362,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/user/UserComparatorTest.java",
    "chars": 2346,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/user/UserUriMatcherTest.java",
    "chars": 2705,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/androidTest/java/com/github/pockethub/android/tests/util/HtmlUtilsTest.java",
    "chars": 6666,
    "preview": "/*\n * Copyright (c) 2015 PocketHub\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "app/src/debug/res/values/strings.xml",
    "chars": 137,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"app_name\" translatable=\"false\">PocketHub Debug</str"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "chars": 17112,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:to"
  },
  {
    "path": "app/src/main/assets/code_mirror/LICENSE",
    "chars": 1175,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2016 Marijn Haverbeke <marijnh@gmail.com> and others\nCopyright (c) 2016 Michael Zho"
  },
  {
    "path": "app/src/main/assets/code_mirror/VERSION",
    "chars": 15,
    "preview": "5.19.0-minified"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/comment/comment.js",
    "chars": 3934,
    "preview": "'use strict';(function(h){\"object\"==typeof exports&&\"object\"==typeof module?h(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/comment/continuecomment.js",
    "chars": 1763,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/dialog/dialog.css",
    "chars": 398,
    "preview": ".CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;colo"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/dialog/dialog.js",
    "chars": 2183,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/display/autorefresh.js",
    "chars": 857,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/display/fullscreen.css",
    "chars": 90,
    "preview": ".CodeMirror-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;height:auto;z-index:9}"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/display/fullscreen.js",
    "chars": 838,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/display/panel.js",
    "chars": 2124,
    "preview": "'use strict';(function(g){\"object\"==typeof exports&&\"object\"==typeof module?g(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/display/placeholder.js",
    "chars": 1195,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/display/rulers.js",
    "chars": 1155,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/edit/closebrackets.js",
    "chars": 3440,
    "preview": "'use strict';(function(f){\"object\"==typeof exports&&\"object\"==typeof module?f(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/edit/closetag.js",
    "chars": 3181,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/edit/continuelist.js",
    "chars": 856,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/edit/matchbrackets.js",
    "chars": 2425,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/edit/matchtags.js",
    "chars": 1318,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/edit/trailingspace.js",
    "chars": 522,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/fold/brace-fold.js",
    "chars": 1884,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/fold/comment-fold.js",
    "chars": 1007,
    "preview": "'use strict';(function(b){\"object\"==typeof exports&&\"object\"==typeof module?b(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/fold/foldcode.js",
    "chars": 2463,
    "preview": "'use strict';(function(b){\"object\"==typeof exports&&\"object\"==typeof module?b(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/fold/foldgutter.css",
    "chars": 375,
    "preview": ".CodeMirror-foldmarker{color:#00f;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;fo"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/fold/foldgutter.js",
    "chars": 3368,
    "preview": "'use strict';var $jscomp={scope:{},findInternal:function(a,f,d){a instanceof String&&(a=String(a));for(var g=a.length,e="
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/fold/indent-fold.js",
    "chars": 561,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/fold/markdown-fold.js",
    "chars": 702,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/fold/xml-fold.js",
    "chars": 3290,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/hint/anyword-hint.js",
    "chars": 790,
    "preview": "'use strict';(function(b){\"object\"==typeof exports&&\"object\"==typeof module?b(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/hint/css-hint.js",
    "chars": 1194,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/hint/html-hint.js",
    "chars": 7458,
    "preview": "'use strict';(function(b){\"object\"==typeof exports&&\"object\"==typeof module?b(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/hint/javascript-hint.js",
    "chars": 3024,
    "preview": "'use strict';(function(h){\"object\"==typeof exports&&\"object\"==typeof module?h(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/hint/show-hint.css",
    "chars": 506,
    "preview": ".CodeMirror-hints{position:absolute;z-index:10;overflow:hidden;list-style:none;margin:0;padding:2px;-webkit-box-shadow:2"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/hint/show-hint.js",
    "chars": 8671,
    "preview": "'use strict';(function(f){\"object\"==typeof exports&&\"object\"==typeof module?f(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/hint/sql-hint.js",
    "chars": 3280,
    "preview": "'use strict';(function(g){\"object\"==typeof exports&&\"object\"==typeof module?g(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/hint/xml-hint.js",
    "chars": 2127,
    "preview": "'use strict';(function(p){\"object\"==typeof exports&&\"object\"==typeof module?p(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/lint/coffeescript-lint.js",
    "chars": 588,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/lint/css-lint.js",
    "chars": 481,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/lint/html-lint.js",
    "chars": 712,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\"),require(\"h"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/lint/javascript-lint.js",
    "chars": 1534,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/lint/json-lint.js",
    "chars": 453,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/lint/lint.css",
    "chars": 2721,
    "preview": ".CodeMirror-lint-markers{width:16px}.CodeMirror-lint-tooltip{background-color:#ffd;border:1px solid #000;border-radius:4"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/lint/lint.js",
    "chars": 3958,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/lint/yaml-lint.js",
    "chars": 397,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/merge/merge.css",
    "chars": 2821,
    "preview": ".CodeMirror-merge{position:relative;border:1px solid #ddd;white-space:pre}.CodeMirror-merge,.CodeMirror-merge .CodeMirro"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/merge/merge.js",
    "chars": 14014,
    "preview": "'use strict';(function(n){\"object\"==typeof exports&&\"object\"==typeof module?n(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/mode/loadmode.js",
    "chars": 1177,
    "preview": "'use strict';(function(b){\"object\"==typeof exports&&\"object\"==typeof module?b(require(\"../../lib/codemirror\"),\"cjs\"):\"fu"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/mode/multiplex.js",
    "chars": 2168,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/mode/multiplex_test.js",
    "chars": 502,
    "preview": "'use strict';(function(){CodeMirror.defineMode(\"markdown_with_stex\",function(){var a=CodeMirror.getMode({},\"stex\"),b=Cod"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/mode/overlay.js",
    "chars": 1269,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/mode/simple.js",
    "chars": 3947,
    "preview": "'use strict';(function(k){\"object\"==typeof exports&&\"object\"==typeof module?k(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/runmode/colorize.js",
    "chars": 675,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/runmode/runmode-standalone.js",
    "chars": 3066,
    "preview": "'use strict';window.CodeMirror={};\n(function(){function k(a){this.pos=this.start=0;this.string=a;this.lineStart=0}k.prot"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/runmode/runmode.js",
    "chars": 1118,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/runmode/runmode.node.js",
    "chars": 4028,
    "preview": "'use strict';function splitLines(a){return a.split(/\\r\\n?|\\n/)}var countColumn=function(a,b,d,c,e){null==b&&(b=a.search("
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/scroll/annotatescrollbar.js",
    "chars": 2578,
    "preview": "'use strict';(function(b){\"object\"==typeof exports&&\"object\"==typeof module?b(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/scroll/scrollpastend.js",
    "chars": 811,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/scroll/simplescrollbars.css",
    "chars": 1149,
    "preview": ".CodeMirror-simplescroll-horizontal div,.CodeMirror-simplescroll-vertical div{position:absolute;background:#ccc;-moz-box"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/scroll/simplescrollbars.js",
    "chars": 3097,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/search/jump-to-line.js",
    "chars": 1093,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/search/match-highlighter.js",
    "chars": 2641,
    "preview": "'use strict';(function(f){\"object\"==typeof exports&&\"object\"==typeof module?f(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/search/matchesonscrollbar.css",
    "chars": 160,
    "preview": ".CodeMirror-search-match{background:gold;border-top:1px solid orange;border-bottom:1px solid orange;-moz-box-sizing:bord"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/search/matchesonscrollbar.js",
    "chars": 2138,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/search/search.js",
    "chars": 6038,
    "preview": "'use strict';var $jscomp={scope:{},findInternal:function(b,h,e){b instanceof String&&(b=String(b));for(var k=b.length,g="
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/search/searchcursor.js",
    "chars": 4353,
    "preview": "'use strict';var $jscomp={scope:{},findInternal:function(a,e,k){a instanceof String&&(a=String(a));for(var g=a.length,b="
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/selection/active-line.js",
    "chars": 1317,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/selection/mark-selection.js",
    "chars": 2695,
    "preview": "'use strict';var $jscomp={scope:{},findInternal:function(a,d,c){a instanceof String&&(a=String(a));for(var e=a.length,g="
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/selection/selection-pointer.js",
    "chars": 1835,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/tern/tern.css",
    "chars": 1576,
    "preview": ".CodeMirror-Tern-completion{padding-left:22px;position:relative;line-height:1.5}.CodeMirror-Tern-completion:before{posit"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/tern/tern.js",
    "chars": 11388,
    "preview": "'use strict';(function(h){\"object\"==typeof exports&&\"object\"==typeof module?h(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/tern/worker.js",
    "chars": 773,
    "preview": "'use strict';var server;this.onmessage=function(b){var a=b.data;switch(a.type){case \"init\":return startServer(a.defs,a.p"
  },
  {
    "path": "app/src/main/assets/code_mirror/addon/wrap/hardwrap.js",
    "chars": 2358,
    "preview": "'use strict';(function(k){\"object\"==typeof exports&&\"object\"==typeof module?k(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/lib/codemirror.css",
    "chars": 5453,
    "preview": ".CodeMirror{font-family:monospace;height:300px;color:#000}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}"
  },
  {
    "path": "app/src/main/assets/code_mirror/lib/codemirror.js",
    "chars": 155193,
    "preview": "'use strict';var $jscomp={scope:{},findInternal:function(l,aa,I){l instanceof String&&(l=String(l));for(var S=l.length,b"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/apl/apl.js",
    "chars": 3079,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/asciiarmor/asciiarmor.js",
    "chars": 1160,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/asn.1/asn.1.js",
    "chars": 4218,
    "preview": "'use strict';(function(f){\"object\"==typeof exports&&\"object\"==typeof module?f(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/asterisk/asterisk.js",
    "chars": 4027,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/brainfuck/brainfuck.js",
    "chars": 861,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/clike/clike.js",
    "chars": 18774,
    "preview": "'use strict';(function(q){\"object\"==typeof exports&&\"object\"==typeof module?q(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/clojure/clojure.js",
    "chars": 9060,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/cmake/cmake.js",
    "chars": 1048,
    "preview": "'use strict';(function(b){\"object\"==typeof exports&&\"object\"==typeof module?b(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/cobol/cobol.js",
    "chars": 6239,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/coffeescript/coffeescript.js",
    "chars": 4106,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/commonlisp/commonlisp.js",
    "chars": 2507,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/crystal/crystal.js",
    "chars": 4713,
    "preview": "'use strict';(function(g){\"object\"==typeof exports&&\"object\"==typeof module?g(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/css/css.js",
    "chars": 22582,
    "preview": "'use strict';(function(k){\"object\"==typeof exports&&\"object\"==typeof module?k(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/cypher/cypher.js",
    "chars": 3178,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/d/d.js",
    "chars": 4010,
    "preview": "'use strict';(function(f){\"object\"==typeof exports&&\"object\"==typeof module?f(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/dart/dart.js",
    "chars": 2306,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/diff/diff.js",
    "chars": 561,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/django/django.js",
    "chars": 4717,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/dockerfile/dockerfile.js",
    "chars": 893,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/dtd/dtd.js",
    "chars": 2350,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/dylan/dylan.js",
    "chars": 4171,
    "preview": "'use strict';(function(f){\"object\"==typeof exports&&\"object\"==typeof module?f(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/ebnf/ebnf.js",
    "chars": 2465,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/ecl/ecl.js",
    "chars": 5363,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/eiffel/eiffel.js",
    "chars": 1910,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/elm/elm.js",
    "chars": 2121,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/erlang/erlang.js",
    "chars": 8141,
    "preview": "'use strict';(function(k){\"object\"==typeof exports&&\"object\"==typeof module?k(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/factor/factor.js",
    "chars": 1439,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/fcl/fcl.js",
    "chars": 2298,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/forth/forth.js",
    "chars": 2920,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/fortran/fortran.js",
    "chars": 4133,
    "preview": "'use strict';(function(b){\"object\"==typeof exports&&\"object\"==typeof module?b(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/gas/gas.js",
    "chars": 4391,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/gfm/gfm.js",
    "chars": 2766,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/gherkin/gherkin.js",
    "chars": 16217,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/go/go.js",
    "chars": 3061,
    "preview": "'use strict';(function(f){\"object\"==typeof exports&&\"object\"==typeof module?f(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/groovy/groovy.js",
    "chars": 4068,
    "preview": "'use strict';(function(f){\"object\"==typeof exports&&\"object\"==typeof module?f(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/haml/haml.js",
    "chars": 2279,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/handlebars/handlebars.js",
    "chars": 1298,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/haskell/haskell.js",
    "chars": 4516,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/haskell-literate/haskell-literate.js",
    "chars": 710,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/haxe/haxe.js",
    "chars": 8276,
    "preview": "'use strict';(function(p){\"object\"==typeof exports&&\"object\"==typeof module?p(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/htmlembedded/htmlembedded.js",
    "chars": 913,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/htmlmixed/htmlmixed.js",
    "chars": 2834,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/http/http.js",
    "chars": 1264,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/idl/idl.js",
    "chars": 10120,
    "preview": "'use strict';(function(b){\"object\"==typeof exports&&\"object\"==typeof module?b(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/javascript/javascript.js",
    "chars": 13613,
    "preview": "'use strict';(function(p){\"object\"==typeof exports&&\"object\"==typeof module?p(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/jinja2/jinja2.js",
    "chars": 1991,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/jsx/jsx.js",
    "chars": 2314,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/julia/julia.js",
    "chars": 5135,
    "preview": "'use strict';(function(f){\"object\"==typeof exports&&\"object\"==typeof module?f(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/livescript/livescript.js",
    "chars": 4754,
    "preview": "'use strict';(function(b){\"object\"==typeof exports&&\"object\"==typeof module?b(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/lua/lua.js",
    "chars": 3295,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/markdown/markdown.js",
    "chars": 11404,
    "preview": "'use strict';(function(h){\"object\"==typeof exports&&\"object\"==typeof module?h(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/mathematica/mathematica.js",
    "chars": 2180,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/mbox/mbox.js",
    "chars": 1649,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/meta.js",
    "chars": 11673,
    "preview": "'use strict';(function(b){\"object\"==typeof exports&&\"object\"==typeof module?b(require(\"../lib/codemirror\")):\"function\"=="
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/mirc/mirc.js",
    "chars": 6167,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/mllike/mllike.js",
    "chars": 2934,
    "preview": "'use strict';(function(b){\"object\"==typeof exports&&\"object\"==typeof module?b(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/modelica/modelica.js",
    "chars": 3298,
    "preview": "'use strict';(function(g){\"object\"==typeof exports&&\"object\"==typeof module?g(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/mscgen/mscgen.js",
    "chars": 3389,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/mumps/mumps.js",
    "chars": 2135,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/nginx/nginx.js",
    "chars": 7642,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/nsis/nsis.js",
    "chars": 6592,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/ntriples/ntriples.js",
    "chars": 2382,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/octave/octave.js",
    "chars": 2293,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/oz/oz.js",
    "chars": 3141,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/pascal/pascal.js",
    "chars": 1542,
    "preview": "'use strict';(function(b){\"object\"==typeof exports&&\"object\"==typeof module?b(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/pegjs/pegjs.js",
    "chars": 1624,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/perl/perl.js",
    "chars": 9912,
    "preview": "'use strict';(function(k){\"object\"==typeof exports&&\"object\"==typeof module?k(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/php/php.js",
    "chars": 23691,
    "preview": "'use strict';(function(g){\"object\"==typeof exports&&\"object\"==typeof module?g(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/pig/pig.js",
    "chars": 4241,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/powershell/powershell.js",
    "chars": 7937,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"codemirror\")):\"function\"==typeof "
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/properties/properties.js",
    "chars": 987,
    "preview": "'use strict';(function(b){\"object\"==typeof exports&&\"object\"==typeof module?b(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/protobuf/protobuf.js",
    "chars": 1087,
    "preview": "'use strict';(function(b){\"object\"==typeof exports&&\"object\"==typeof module?b(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/pug/pug.js",
    "chars": 7664,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/puppet/puppet.js",
    "chars": 2850,
    "preview": "'use strict';(function(c){\"object\"==typeof exports&&\"object\"==typeof module?c(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/python/python.js",
    "chars": 5435,
    "preview": "'use strict';(function(g){\"object\"==typeof exports&&\"object\"==typeof module?g(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/q/q.js",
    "chars": 3866,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/r/r.js",
    "chars": 2846,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/rpm/rpm.js",
    "chars": 1952,
    "preview": "'use strict';(function(b){\"object\"==typeof exports&&\"object\"==typeof module?b(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/rst/rst.js",
    "chars": 7105,
    "preview": "'use strict';(function(k){\"object\"==typeof exports&&\"object\"==typeof module?k(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/ruby/ruby.js",
    "chars": 5141,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/rust/rust.js",
    "chars": 2333,
    "preview": "'use strict';(function(a){\"object\"==typeof exports&&\"object\"==typeof module?a(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/sas/sas.js",
    "chars": 9801,
    "preview": "'use strict';(function(f){\"object\"==typeof exports&&\"object\"==typeof module?f(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/sass/sass.js",
    "chars": 3796,
    "preview": "'use strict';(function(f){\"object\"==typeof exports&&\"object\"==typeof module?f(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/scheme/scheme.js",
    "chars": 6011,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/shell/shell.js",
    "chars": 2024,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/sieve/sieve.js",
    "chars": 1869,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/slim/slim.js",
    "chars": 8428,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\"),require(\"."
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/smalltalk/smalltalk.js",
    "chars": 2213,
    "preview": "'use strict';(function(f){\"object\"==typeof exports&&\"object\"==typeof module?f(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/smarty/smarty.js",
    "chars": 2954,
    "preview": "'use strict';(function(d){\"object\"==typeof exports&&\"object\"==typeof module?d(require(\"../../lib/codemirror\")):\"function"
  },
  {
    "path": "app/src/main/assets/code_mirror/mode/solr/solr.js",
    "chars": 1174,
    "preview": "'use strict';(function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function"
  }
]

// ... and 532 more files (download for full content)

About this extraction

This page contains the full source code of the pockethub/PocketHub GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 732 files (2.5 MB), approximately 709.3k tokens, and a symbol index with 2210 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!