diff --git a/asterixdb/asterix-app/pom.xml b/asterixdb/asterix-app/pom.xml
index 2ca748f..70073bd 100644
--- a/asterixdb/asterix-app/pom.xml
+++ b/asterixdb/asterix-app/pom.xml
@@ -183,6 +183,7 @@
                 <exclude>src/main/resources/webui/**</exclude>
                 <exclude>src/test/resources/**/only*.xml</exclude>
                 <exclude>src/main/resources/sdk/**</exclude>
+                <exclude>src/main/resources/dashboard/**</exclude>
               </excludes>
             </configuration>
           </execution>
diff --git a/asterixdb/asterix-app/src/main/appended-resources/META-INF/LICENSE b/asterixdb/asterix-app/src/main/appended-resources/META-INF/LICENSE
index 68b143c..4ad6d94 100644
--- a/asterixdb/asterix-app/src/main/appended-resources/META-INF/LICENSE
+++ b/asterixdb/asterix-app/src/main/appended-resources/META-INF/LICENSE
@@ -73,183 +73,6 @@
    even a nice Tweet is enough. Of course if you want, you can say thank you and
    support me by buying more icons on GLYPHICONS.com.
 ---
-   Portions of the AsterixDB QueryUI
-       located at:
-         queryui/js/json-formatter.min.js,
-       and
-         queryui/css/json-formatter.min.css
-
-   are available under the following license:
----
-   Copyright 2014 Mohsen Azimi
-
-   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.
----
-   Portions of the AsterixDB QueryUI
-       located at:
-         queryui/js/bootstrap.min.js,
-         queryui/css/bootstrap.min.css,
-         queryui/css/bootstrap-theme.min.css,
-         queryui/fonts/glyphicons-halflings-regular.eot,
-         queryui/fonts/glyphicons-halflings-regular.svg,
-         queryui/fonts/glyphicons-halflings-regular.ttf,
-         queryui/fonts/glyphicons-halflings-regular.woff,
-       and
-         queryui/fonts/glyphicons-halflings-regular.woff2
-
-   are available under the following license:
----
-   The MIT License (MIT)
-
-   Copyright (c) 2011-2015 Twitter, Inc
-
-   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.
-
-   queryui/css/bootstrap.min.css also contains normalize.css v3.0.3
-   (http://github.com/necolas/normalize.css), having the following copyright:
-   --
-   Copyright © Nicolas Gallagher and Jonathan Neal
-
-   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.
-   --
-
-   Credit for font files: queryui/fonts/glyphicons-halflings-regular.eot,
-                          queryui/fonts/glyphicons-halflings-regular.svg,
-                          queryui/fonts/glyphicons-halflings-regular.ttf,
-                          queryui/fonts/glyphicons-halflings-regular.woff,
-                        and
-                          queryui/fonts/glyphicons-halflings-regular.woff2
-
-   GLYPHICONS Halflings font is also released as an extension of a Bootstrap
-   (www.getbootstrap.com) for free and it is released under the same license as
-   Bootstrap. While you are not required to include attribution on your
-   Bootstrap-based projects, I would certainly appreciate any form of support,
-   even a nice Tweet is enough. Of course if you want, you can say thank you and
-   support me by buying more icons on GLYPHICONS.com.
----
-
-   Portions of the AsterixDB QueryUI
-       located at:
-         queryui/js/angular.min.js
-
-   are available under The MIT License:
----
-   Copyright (c) 2010-2016 Google, Inc. http://angularjs.org
-
-   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.
----
-   Portions of the AsterixDB QueryUI
-       located at:
-         queryui/js/codemirror.js,
-         queryui/js/javascript.js,
-       and
-         queryui/css/codemirror.css
-
-   are available under The MIT License:
----
-   Copyright (C) 2016 by Marijn Haverbeke <marijnh@gmail.com> and others
-
-   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.
----
-   Portions of the AsterixDB QueryUI
-       located at:
-         queryui/js/ui-codemirror.js
-
-   are available under The MIT License:
----
-   Copyright (c) 2012 the AngularUI Team, http://angular-ui.github.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.
----
     Portions of the AsterixDB WebUI
        located at:
          webui/static/js/jquery.json-viewer.js
@@ -278,4 +101,373 @@
     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 Saver Portions of the AsterixDB Dashboard
+    located at:
+      dashboard/src/app/dashboard/query/ouput.component.ts
+      dashboard/static/main.37b7b7cad656490b195a.bundle.js
+      dashboard/static/styles.9f50282210bba5318775.bundle
+      dashboard/static/scripts.da68998bdd77aff4e764.bundle.js
+      dashboard/static/polyfills.32ca5670d6503e090789.bundle.js
+      dashboard/static/inline.66bd6b83f86cf773a001.bundle.js
+      dashboard/static/index.html
+
+    are available under The MIT License:
+---
+The MIT License
+
+Copyright © 2016 Eli Grey.
+
+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.
+
+---
+ReactiveX/rxjs 
+    located at:
+        dashboard/src/app/dashboard/metadata/*.ts
+        dashboard/src/app/dashboard/metadata/datasets-collection/*.ts
+        dashboard/src/app/dashboard/metadata/datatypes-collection/*.ts
+        dashboard/src/app/dashboard/metadata/dataverses-collection/*.ts
+        dashboard/src/app/dashboard/query/*.ts
+        dashboard/src/app/dashboard/*.ts
+        dashboard/static/main.37b7b7cad656490b195a.bundle.js
+        dashboard/static/styles.9f50282210bba5318775.bundle
+        dashboard/static/scripts.da68998bdd77aff4e764.bundle.js
+        dashboard/static/polyfills.32ca5670d6503e090789.bundle.js
+        dashboard/static/inline.66bd6b83f86cf773a001.bundle.js
+        dashboard/static/index.html
+
+is licensed under the Apache License 2.0
+---
+PrimeNG Portions of the AsterixDB Dashboard
+    located at:
+        dashboard/src/app/dashboard/query/output.component.ts
+        dashboard/src/app/dashboard/query/output.component.html
+        dashboard/src/app/dashboard/query/output.component.scss
+        dashboard/src/app/dashboard/query/metadata.component.ts
+        dashboard/src/app/dashboard/query/metadata.component.html
+        dashboard/src/app/dashboard/query/metadata.component.scss
+        dashboard/static/main.37b7b7cad656490b195a.bundle.js
+        dashboard/static/styles.9f50282210bba5318775.bundle
+        dashboard/static/scripts.da68998bdd77aff4e764.bundle.js
+        dashboard/static/polyfills.32ca5670d6503e090789.bundle.js
+        dashboard/static/inline.66bd6b83f86cf773a001.bundle.js
+        dashboard/static/index.html
+
+are available under The MIT License:
+---
+The MIT License (MIT)
+
+Copyright (c) 2016-2017 PrimeTek
+
+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.
+
+---
+
+NGRX Portions of the AsterixDB Dashboard
+    located at:
+        dashboard/src/app/dashboard/metadata/*.ts
+        dashboard/src/app/dashboard/metadata/datasets-collection/*.ts
+        dashboard/src/app/dashboard/metadata/datatypes-collection/*.ts
+        dashboard/src/app/dashboard/metadata/dataverses-collection/*.ts
+        dashboard/src/app/dashboard/query/*.ts
+        dashboard/src/app/dashboard/*.ts
+        dashboard/src/app/dashboard/*.ts
+        dashboard/src/app/*.ts
+        dashboard/static/main.37b7b7cad656490b195a.bundle.js
+        dashboard/static/styles.9f50282210bba5318775.bundle
+        dashboard/static/scripts.da68998bdd77aff4e764.bundle.js
+        dashboard/static/polyfills.32ca5670d6503e090789.bundle.js
+        dashboard/static/inline.66bd6b83f86cf773a001.bundle.js
+        dashboard/static/index.html
+
+are available under The MIT License:
+---
+The MIT License (MIT)
+
+Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
+
+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.
+---
+Codemirror Portions of the AsterixDB Dashboard
+       located at:
+        dashboard/src/app/dashboard/query/input.component.ts
+        dashboard/src/app/dashboard/query/input.component.html
+        dashboard/src/app/dashboard/query/input.component.scss
+        dashboard/src/app/dashboard/query/codemirror.component.ts
+        dashboard/src/app/dashboard/query/codemirror.component.scss
+        dashboard/src/app/dashboard/metadata/input-metadata.component.ts
+        dashboard/src/app/dashboard/metadata/input-metadata.component.html
+        dashboard/src/app/dashboard/metadata/input-metadata.component.scss
+        dashboard/src/app/dashboard/metadata/codemirror-metadata.component.ts
+        dashboard/src/app/dashboard/metadata/codemirror-metadata.component.scss
+        dashboard/static/main.37b7b7cad656490b195a.bundle.js
+        dashboard/static/styles.9f50282210bba5318775.bundle
+        dashboard/static/scripts.da68998bdd77aff4e764.bundle.js
+        dashboard/static/polyfills.32ca5670d6503e090789.bundle.js
+        dashboard/static/inline.66bd6b83f86cf773a001.bundle.js
+        dashboard/static/index.html
+
+   are available under The MIT License:
+---
+   MIT License
+
+Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others
+
+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.
+
+---
+Angular Portions of the AsterixDB Dashboard
+       located at:
+        dashboard/src/
+        dashboard/static/main.37b7b7cad656490b195a.bundle.js
+        dashboard/static/styles.9f50282210bba5318775.bundle
+        dashboard/static/scripts.da68998bdd77aff4e764.bundle.js
+        dashboard/static/polyfills.32ca5670d6503e090789.bundle.js
+        dashboard/static/inline.66bd6b83f86cf773a001.bundle.js
+        dashboard/static/index.html
+
+   are available under The MIT License:
+---
+The MIT License
+
+Copyright (c) 2014-2017 Google, Inc. http://angular.io
+
+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.
+
+---
+Angular Material, hammerjs Portions of the AsterixDB Dashboard
+       located at:
+   dashboard/src/app/dashboard/metadata/datasets-collection/
+   dashboard/src/app/material.module.ts
+   dashboard/src/main.ts
+   dashboard/static/main.37b7b7cad656490b195a.bundle.js
+   dashboard/static/styles.9f50282210bba5318775.bundle
+   dashboard/static/scripts.da68998bdd77aff4e764.bundle.js
+   dashboard/static/polyfills.32ca5670d6503e090789.bundle.js
+   dashboard/static/inline.66bd6b83f86cf773a001.bundle.js
+   dashboard/static/index.html
+
+    are available under The MIT License:
+- --
+    The MIT License
+
+C opyright (c) 2017 Google LLC.
+
+P ermission 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.
+
+
+---
+Core JS Material Portions of the AsterixDB Dashboard
+       located at:
+        dashboard/src/
+        dashboard/static/main.37b7b7cad656490b195a.bundle.js
+        dashboard/static/styles.9f50282210bba5318775.bundle
+        dashboard/static/scripts.da68998bdd77aff4e764.bundle.js
+        dashboard/static/polyfills.32ca5670d6503e090789.bundle.js
+        dashboard/static/inline.66bd6b83f86cf773a001.bundle.js
+        dashboard/static/index.html
+
+   are available under following License:
+   https://github.com/zloirock/core-js/blob/master/LICENSE
+---
+
+Copyright (c) 2014-2017 Denis Pushkarev
+
+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.
+---
+Roboto Font Portions of the AsterixDB Dashboard
+       located at:
+          dashboard/src/index.html
+          dashboard/static/roboto-v15-latin-regular.3d3a53586bd78d1069ae.svg
+          dashboard/static/roboto-v15-latin-regular.7e367be02cd17a96d513.woff2
+          dashboard/static/roboto-v15-latin-regular.9f916e330c478bbfa2a0.eot
+          dashboard/static/roboto-v15-latin-regular.16e1d930cf13fb7a9563.woff
+          dashboard/static/roboto-v15-latin-regular.38861cba61c66739c145.ttf
+          dashboard/static/index.html
+   are available under following License: Apache2.0
+   https://github.com/google/roboto/blob/master/LICENSE
+---
+Font Awesome Portions of the AsterixDB Dashboard, used in primeng components
+        located at:
+          dashboard/src/index.html
+          dashboard/static/index.html
+
+    http://fontawesome.io/license/
+    Applies to all CSS and LESS files in the following directories if exist:
+    font-awesome/css/, font-awesome/less/, and font-awesome/scss/.
+    and downloaded from CDN network services and loaded in index.html
+    License: MIT License
+    URL: http://opensource.org/licenses/mit-license.html
+---
+webpack@3.8.1 portions of the AsterixDB Dashboard
+       located at:
+        dashboard/
+   are available under The MIT License:
+---
+MIT
+Copyright JS Foundation and other contributors
+
+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.
+---
+zone.js@0.8.18 Portions of the AsterixDB Dashboard
+       located at:
+        dashboard/src/
+        dashboard/static/main.37b7b7cad656490b195a.bundle.js
+        dashboard/static/styles.9f50282210bba5318775.bundle
+        dashboard/static/scripts.da68998bdd77aff4e764.bundle.js
+        dashboard/static/polyfills.32ca5670d6503e090789.bundle.js
+        dashboard/static/inline.66bd6b83f86cf773a001.bundle.js
+        dashboard/static/index.html
+        
+   are available under The MIT License:
+---
+MIT
+The MIT License
+
+Copyright (c) 2016 Google, Inc.
+
+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.
 ---
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
index 71ed6b0..a8f14b5 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
@@ -20,6 +20,9 @@
 
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.UnknownHostException;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentMap;
@@ -50,6 +53,7 @@
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.api.application.IServiceContext;
 import org.apache.hyracks.api.exceptions.HyracksException;
+import org.apache.hyracks.control.common.controllers.CCConfig;
 import org.apache.hyracks.http.api.IServletRequest;
 import org.apache.hyracks.http.api.IServletResponse;
 import org.apache.hyracks.http.server.utils.HttpUtil;
@@ -77,6 +81,7 @@
     private final IStatementExecutorContext queryCtx;
     protected final IServiceContext serviceCtx;
     protected final Function<IServletRequest, Map<String, String>> optionalParamProvider;
+    protected String hostName;
 
     public QueryServiceServlet(ConcurrentMap<String, Object> ctx, String[] paths, IApplicationContext appCtx,
             ILangExtension.Language queryLanguage, ILangCompilationProvider compilationProvider,
@@ -90,6 +95,14 @@
         this.queryCtx = (IStatementExecutorContext) ctx.get(ServletConstants.RUNNING_QUERIES_ATTR);
         this.serviceCtx = (IServiceContext) ctx.get(ServletConstants.SERVICE_CONTEXT_ATTR);
         this.optionalParamProvider = optionalParamProvider;
+        try {
+            this.hostName =
+                    InetAddress.getByName(serviceCtx.getAppConfig().getString(CCConfig.Option.CLUSTER_PUBLIC_ADDRESS))
+                            .getHostName();
+        } catch (UnknownHostException e) {
+            LOGGER.warn("Reverse DNS not properly configured, CORS defaulting to localhost", e);
+            this.hostName = "localhost";
+        }
     }
 
     @Override
@@ -109,6 +122,14 @@
         }
     }
 
+    @Override
+    protected void options(IServletRequest request, IServletResponse response) throws Exception {
+        response.setHeader("Access-Control-Allow-Origin",
+            "http://" + hostName + ":" + appCtx.getExternalProperties().getQueryWebInterfacePort());
+        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
+        response.setStatus(HttpResponseStatus.OK);
+    }
+
     public enum Parameter {
         STATEMENT("statement"),
         FORMAT("format"),
@@ -452,6 +473,10 @@
             if (optionalParamProvider != null) {
                 optionalParams = optionalParamProvider.apply(request);
             }
+            // CORS
+            response.setHeader("Access-Control-Allow-Origin",
+                    "http://" + hostName + ":" + appCtx.getExternalProperties().getQueryWebInterfacePort());
+            response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
             response.setStatus(execution.getHttpStatus());
             executeStatement(statementsText, sessionOutput, delivery, stats, param, execution, optionalParams);
             if (ResultDelivery.IMMEDIATE == delivery || ResultDelivery.DEFERRED == delivery) {
@@ -516,4 +541,4 @@
             execution.setStatus(ResultStatus.FATAL, HttpResponseStatus.INTERNAL_SERVER_ERROR);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java
index 6680eb9..598d802 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java
@@ -50,7 +50,8 @@
         String requestURI = request.getHttpRequest().uri();
         if ("/".equals(requestURI)) {
             HttpUtil.setContentType(response, HttpUtil.ContentType.TEXT_HTML);
-            deliverResource("/queryui/queryui.html", response);
+            // Dashboard Administration Console
+            deliverResource("/dashboard/static/index.html", response);
         } else {
             deliverResource(requestURI, response);
         }
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/.angular-cli.json b/asterixdb/asterix-app/src/main/resources/dashboard/.angular-cli.json
new file mode 100755
index 0000000..7e41979
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/.angular-cli.json
@@ -0,0 +1,69 @@
+{
+  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+  "project": {
+    "name": "asterixdb-web-console"
+  },
+  "apps": [
+    {
+      "root": "src",
+      "outDir": "static",
+      "assets": [
+        "assets",
+        "favicon.ico"
+      ],
+      "index": "index.html",
+      "main": "main.ts",
+      "polyfills": "polyfills.ts",
+      "test": "test.ts",
+      "tsconfig": "tsconfig.app.json",
+      "testTsconfig": "tsconfig.spec.json",
+      "prefix": "app",
+      "styles": [
+        "main.scss",
+        "../node_modules/codemirror/lib/codemirror.css",
+        "../node_modules/codemirror/theme/monokai.css",
+        "../node_modules/primeng/resources/themes/omega/theme.css",
+        "../node_modules/primeng/resources/primeng.min.css"
+      ],
+      "scripts": [
+        "../node_modules/codemirror/lib/codemirror.js"
+      ],
+      "environmentSource": "environments/environment.ts",
+      "environments": {
+        "dev": "environments/environment.ts",
+        "prod": "environments/environment.prod.ts"
+      }
+    }
+  ],
+  "e2e": {
+    "protractor": {
+      "config": "./protractor.conf.js"
+    }
+  },
+  "lint": [
+    {
+      "project": "src/tsconfig.app.json",
+      "exclude": "**/node_modules/**"
+    },
+    {
+      "project": "src/tsconfig.spec.json",
+      "exclude": "**/node_modules/**"
+    },
+    {
+      "project": "e2e/tsconfig.e2e.json",
+      "exclude": "**/node_modules/**"
+    }
+  ],
+  "test": {
+    "karma": {
+      "config": "./karma.conf.js"
+    }
+  },
+  "defaults": {
+    "styleExt": "css",
+    "class": {
+      "spec": false
+    },
+    "component": {}
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/.editorconfig b/asterixdb/asterix-app/src/main/resources/dashboard/.editorconfig
new file mode 100755
index 0000000..ba060b8
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/.editorconfig
@@ -0,0 +1,25 @@
+# Editor configuration, see http://editorconfig.org
+#/*
+#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.
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+max_line_length = off
+trim_trailing_whitespace = false
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/.gitignore b/asterixdb/asterix-app/src/main/resources/dashboard/.gitignore
new file mode 100755
index 0000000..fc1e2ce
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/.gitignore
@@ -0,0 +1,47 @@
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+
+# compiled output
+/tmp
+/out-tsc
+
+# dependencies
+/node_modules
+/documents
+# /static
+/dist
+
+# IDEs and editors
+/.idea
+.project
+.classpath
+.c9/
+*.launch
+.settings/
+*.sublime-workspace
+
+# IDE - VSCode
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+
+# misc
+/.sass-cache
+/connect.lock
+/coverage
+/libpeerconnection.log
+npm-debug.log
+testem.log
+/typings
+
+# e2e
+/e2e/*.js
+/e2e/*.map
+
+# System Files
+.DS_Store
+Thumbs.db
+
+# Others
+package-lock.json
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/README.md b/asterixdb/asterix-app/src/main/resources/dashboard/README.md
new file mode 100755
index 0000000..14f16fc
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/README.md
@@ -0,0 +1,47 @@
+/*
+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.
+*/
+
+# AsterixDB Web Administration Console
+
+AsterixDB Administration Console is an Angular 5 HTML/CSS/Typescript web application using predictable state containers, immutable data updates with Redux/NGRx frameworks, observable patterns, and standard Open Sourced UI widgets for data, metadata manipulation and visualization through SQL++ AsterixDB Query language.
+
+The main goal is create a baseline solution with unopinionated UI/UX design and SW architecture with two differentiated isolated, indepent minimal coupled levels between the UI components and application core or internal core, easily extensible and scalable by the AsterixDB community.
+
+## Development
+
+This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.4.9.
+
+## Installation
+
+Install node and npm, any of the latest versions will do.
+
+Run `npm install` to download all the dependency packages an recreate the node_modules directory.
+
+## Development server
+
+The development version uses the webpack proxy to avoid CORS problems in Angular see:  
+
+`https://daveceddia.com/access-control-allow-origin-cors-errors-in-angular`. 
+
+Please check `proxy.config.js` to see how it's configured.
+
+Run `ng serve` or `npm start` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
+
+A technical document describing the internals and architecture exist, here:
+
+`https://github.com/EmilioMobile/asterixdb-dashboard/blob/master/documents/AsterixDB%20Architecture%20v1.0.pdf?raw=true`
+
+A brief user guide document describing how to use it, here:
+
+`https://github.com/EmilioMobile/asterixdb-dashboard/blob/master/documents/AsterixDB%20User%20Guide%20v1.0.pptx?raw=true`
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/e2e/app.e2e-spec.ts b/asterixdb/asterix-app/src/main/resources/dashboard/e2e/app.e2e-spec.ts
new file mode 100755
index 0000000..e75aa02
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/e2e/app.e2e-spec.ts
@@ -0,0 +1,27 @@
+/*
+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.
+*/
+import { AppPage } from './app.po';
+
+describe('asterixdb-dashboard', () => {
+  let page: AppPage;
+
+  beforeEach(() => {
+    page = new AppPage();
+  });
+
+  it('should display welcome message', () => {
+    page.navigateTo();
+    expect(page.getParagraphText()).toEqual('Welcome to AsterixDB Dashboard!');
+  });
+});
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/e2e/app.po.ts b/asterixdb/asterix-app/src/main/resources/dashboard/e2e/app.po.ts
new file mode 100755
index 0000000..37d3de9
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/e2e/app.po.ts
@@ -0,0 +1,24 @@
+/*
+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.
+*/
+import { browser, by, element } from 'protractor';
+
+export class AppPage {
+  navigateTo() {
+    return browser.get('/');
+  }
+
+  getParagraphText() {
+    return element(by.css('app-root h1')).getText();
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/e2e/tsconfig.e2e.json b/asterixdb/asterix-app/src/main/resources/dashboard/e2e/tsconfig.e2e.json
new file mode 100755
index 0000000..41b7fc0
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/e2e/tsconfig.e2e.json
@@ -0,0 +1,27 @@
+/*
+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.
+*/
+{
+  "extends": "../tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../out-tsc/e2e",
+    "baseUrl": "./",
+    "module": "commonjs",
+    "target": "es5",
+    "types": [
+      "jasmine",
+      "jasminewd2",
+      "node"
+    ]
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/karma.conf.js b/asterixdb/asterix-app/src/main/resources/dashboard/karma.conf.js
new file mode 100755
index 0000000..c9da2c5
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/karma.conf.js
@@ -0,0 +1,47 @@
+/*
+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.
+*/
+
+// Karma configuration file, see link for more information
+// https://karma-runner.github.io/1.0/config/configuration-file.html
+
+module.exports = function (config) {
+  config.set({
+    basePath: '',
+    frameworks: ['jasmine', '@angular/cli'],
+    plugins: [
+      require('karma-jasmine'),
+      require('karma-chrome-launcher'),
+      require('karma-jasmine-html-reporter'),
+      require('karma-coverage-istanbul-reporter'),
+      require('@angular/cli/plugins/karma')
+    ],
+    client:{
+      clearContext: false // leave Jasmine Spec Runner output visible in browser
+    },
+    coverageIstanbulReporter: {
+      reports: [ 'html', 'lcovonly' ],
+      fixWebpackSourcePaths: true
+    },
+    angularCli: {
+      environment: 'dev'
+    },
+    reporters: ['progress', 'kjhtml'],
+    port: 9876,
+    colors: true,
+    logLevel: config.LOG_INFO,
+    autoWatch: true,
+    browsers: ['Chrome'],
+    singleRun: false
+  });
+};
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/package.json b/asterixdb/asterix-app/src/main/resources/dashboard/package.json
new file mode 100755
index 0000000..3073159
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/package.json
@@ -0,0 +1,60 @@
+{
+  "name": "asterixdb-web-console",
+  "version": "1.0.0",
+  "license": "Apache License, Version 2.0",
+  "scripts": {
+    "ng": "ng",
+    "start": "ng serve --proxy-config proxy.config.js --host 0.0.0.0",
+    "build": "ng build",
+    "test": "ng test",
+    "lint": "ng lint",
+    "e2e": "ng e2e"
+  },
+  "private": true,
+  "dependencies": {
+    "@angular/animations": "^5.0.3",
+    "@angular/cdk": "^5.0.0-rc.2",
+    "@angular/common": "^5.0.3",
+    "@angular/compiler": "^5.0.3",
+    "@angular/core": "^5.0.3",
+    "@angular/forms": "^5.0.3",
+    "@angular/http": "^5.0.3",
+    "@angular/material": "^5.0.0-rc.2",
+    "@angular/platform-browser": "^5.0.3",
+    "@angular/platform-browser-dynamic": "^5.0.3",
+    "@angular/router": "^5.0.3",
+    "@ngrx/db": "^2.0.2",
+    "@ngrx/effects": "^4.1.0",
+    "@ngrx/entity": "^4.1.0",
+    "@ngrx/store": "^4.1.0",
+    "@ngrx/store-devtools": "^4.0.0",
+    "codemirror": "^5.31.0",
+    "core-js": "^2.4.1",
+    "file-saver": "^1.3.3",
+    "hammerjs": "^2.0.8",
+    "primeng": "^4.3.0",
+    "rxjs": "^5.5.2",
+    "zone.js": "^0.8.18"
+  },
+  "devDependencies": {
+    "@angular/cli": "1.5.4",
+    "@angular/compiler-cli": "^5.0.3",
+    "@angular/language-service": "^5.0.0",
+    "@types/file-saver": "^1.3.0",
+    "@types/jasmine": "~2.5.53",
+    "@types/jasminewd2": "~2.0.2",
+    "@types/node": "~6.0.60",
+    "jasmine-core": "~2.6.2",
+    "jasmine-spec-reporter": "~4.1.0",
+    "karma": "~1.7.0",
+    "karma-chrome-launcher": "~2.1.1",
+    "karma-cli": "~1.0.1",
+    "karma-coverage-istanbul-reporter": "^1.2.1",
+    "karma-jasmine": "~1.1.0",
+    "karma-jasmine-html-reporter": "^0.2.2",
+    "protractor": "~5.1.2",
+    "ts-node": "^3.2.2",
+    "tslint": "^5.7.0",
+    "typescript": "^2.4.2"
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/protractor.conf.js b/asterixdb/asterix-app/src/main/resources/dashboard/protractor.conf.js
new file mode 100755
index 0000000..ac4c723
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/protractor.conf.js
@@ -0,0 +1,41 @@
+/*
+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.
+*/
+// Protractor configuration file, see link for more information
+// https://github.com/angular/protractor/blob/master/lib/config.ts
+
+const { SpecReporter } = require('jasmine-spec-reporter');
+
+exports.config = {
+  allScriptsTimeout: 11000,
+  specs: [
+    './e2e/**/*.e2e-spec.ts'
+  ],
+  capabilities: {
+    'browserName': 'chrome'
+  },
+  directConnect: true,
+  baseUrl: 'http://localhost:4200/',
+  framework: 'jasmine',
+  jasmineNodeOpts: {
+    showColors: true,
+    defaultTimeoutInterval: 30000,
+    print: function() {}
+  },
+  onPrepare() {
+    require('ts-node').register({
+      project: 'e2e/tsconfig.e2e.json'
+    });
+    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
+  }
+};
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/proxy.config.js b/asterixdb/asterix-app/src/main/resources/dashboard/proxy.config.js
new file mode 100755
index 0000000..58752c3
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/proxy.config.js
@@ -0,0 +1,23 @@
+/*
+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.
+*/
+const PROXY_CONFIG = {
+    "/query-service/*": {
+        "target": "http://localhost:19002",
+        "secure": false,
+        logLevel: "debug",
+        pathRewrite: function (path) { return path.replace('/query-service', '/query/service')}
+    }
+}
+
+module.exports = PROXY_CONFIG;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/app-config.service.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/app-config.service.ts
new file mode 100755
index 0000000..87a0c2b
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/app-config.service.ts
@@ -0,0 +1,75 @@
+/*
+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.
+*/
+import { Injectable } from '@angular/core';
+import { Observable } from 'rxjs/Observable';
+import {
+  Http,
+  Headers,
+  RequestOptions
+}                     from '@angular/http';
+
+@Injectable()
+export class ConfigService {
+
+  private config: Object
+  private env: Object
+
+  constructor(private http: Http) {}
+
+  /**
+   * Loads the environment config file first. Reads the environment variable from the file
+   * and based on that loads the appropriate configuration file - development or production
+   */
+  load() {
+    return new Promise((resolve, reject) => {
+      let headers = new Headers({ 'Accept': 'application/json', 'Content-Type': 'application/json', 'DataType': 'application/json' });
+      let options = new RequestOptions({ headers: headers });
+
+      this.http.get('/config/env.json')
+      .map(res => res.json())
+      .subscribe((env_data) => {
+        this.env = env_data;
+
+        this.http.get('/config/' + env_data.env + '.json')
+          .map(res => res.json())
+          .catch((error: any) => {
+            return Observable.throw(error.json().error || 'Server error');
+          })
+          .subscribe((data) => {
+            this.config = data;
+            resolve(true);
+          });
+      });
+
+    });
+  }
+
+  /**
+   * Returns environment variable based on given key
+   *
+   * @param key
+   */
+  getEnv(key: any) {
+    return this.env[key];
+  }
+
+  /**
+   * Returns configuration value based on given key
+   *
+   * @param key
+   */
+  get(key: any) {
+    return this.config[key];
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/app.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/app.component.html
new file mode 100755
index 0000000..58481be
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/app.component.html
@@ -0,0 +1,15 @@
+<!--/*
+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.
+*/-->
+<awc-bar></awc-bar>
+<awc-tab></awc-tab>
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/app.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/app.component.scss
new file mode 100755
index 0000000..b01fcf5
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/app.component.scss
@@ -0,0 +1,14 @@
+/*
+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.
+*/
+// Place holder for future expansion
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/app.component.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/app.component.ts
new file mode 100755
index 0000000..a913109
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/app.component.ts
@@ -0,0 +1,31 @@
+/*
+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.
+*/
+import { Component } from '@angular/core';
+import { AppCoreService } from './shared/services/app-core.service'
+
+/*
+ * Root component
+ * Defines AsterixDB Dashboard application's layout
+ */
+@Component({
+  selector: 'awc-root',
+  templateUrl: './app.component.html',
+  styleUrls: ['./app.component.scss']
+})
+export class AppComponent {
+  title = 'Asterix DB Web Console';
+
+  constructor(private appCoreService: AppCoreService) {
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/app.module.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/app.module.ts
new file mode 100755
index 0000000..11c8602
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/app.module.ts
@@ -0,0 +1,121 @@
+/*
+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.
+*/
+import { BrowserModule } from '@angular/platform-browser';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { HttpClientModule } from '@angular/common/http';
+import { EffectsModule } from '@ngrx/effects';
+import { DataverseEffects } from './shared/effects/dataverse.effects';
+import { DatasetEffects } from './shared/effects/dataset.effects';
+import { DatatypeEffects } from './shared/effects/datatype.effects';
+import { IndexEffects } from './shared/effects/index.effects';
+import { SQLQueryEffects } from './shared/effects/query.effects';
+import { MetadataEffects } from './shared/effects/metadata.effects';
+import { AppComponent } from './app.component';
+import { AppBarComponent }  from './dashboard/appbar.component';
+import { DataverseCollection } from './dashboard/metadata/dataverses-collection/dataverses.component';
+import { DatasetCollection } from './dashboard/metadata/datasets-collection/datasets.component';
+import { DatatypeCollection } from './dashboard/metadata/datatypes-collection/datatypes.component';
+import { CodemirrorComponent } from './dashboard/query/codemirror.component';
+import { CodemirrorMetadataComponent } from './dashboard/metadata/codemirror-metadata.component';
+import { IndexCollection } from './dashboard/metadata/indexes-collection/indexes.component';
+import { MetadataContainerComponent }  from './dashboard/metadata/metadata-container.component';
+import { MetadataComponent }  from './dashboard/query/metadata.component';
+import { QueryContainerComponent }  from './dashboard/query/query-container.component';
+import { InputQueryComponent }  from './dashboard/query/input.component';
+import { InputQueryMetadataComponent }  from './dashboard/metadata/input-metadata.component';
+import { QueryOutputComponent, SafeHtmlPipe }  from './dashboard/query/ouput.component';
+import { AppTabComponent }  from './dashboard/apptab.component';
+import { KeysPipe } from './shared/pipes/keys.pipe';
+import { ObjectTypePipe } from './shared/pipes/objectType.pipe';
+import { ObjectArrayTypePipe } from './shared/pipes/objectArrayType.pipe';
+import { reducers } from './shared/reducers';
+import { SQLService } from './shared/services/async-query.service'
+import { AppCoreService } from './shared/services/app-core.service'
+import { MetadataService } from './shared/services/async-metadata.service'
+import { DBModule } from '@ngrx/db';
+import { FormsModule } from '@angular/forms';
+import { MaterialModule } from './material.module';
+import { NgModule } from '@angular/core';
+import { StoreModule,  } from '@ngrx/store';
+import { StoreDevtoolsModule } from '@ngrx/store-devtools';
+import { schema } from './db';
+import { DataTableModule, SharedModule } from 'primeng/primeng';
+import { TreeModule, TreeNode} from 'primeng/primeng';
+import { DialogCreateDataverse, DialogDropDataverse } from './dashboard/metadata/dataverses-collection/dataverses.component';
+import { DialogCreateDataset, DialogDropDataset } from './dashboard/metadata/datasets-collection/datasets.component';
+import { DialogCreateDatatype, DialogDropDatatype } from './dashboard/metadata/datatypes-collection/datatypes.component';
+import { DialogCreateIndex, DialogDropIndex } from './dashboard/metadata/indexes-collection/indexes.component';
+
+
+
+@NgModule({
+  declarations: [
+    AppComponent,
+    AppBarComponent,
+    InputQueryComponent,
+    InputQueryMetadataComponent,
+		QueryOutputComponent,
+    CodemirrorComponent,
+    CodemirrorMetadataComponent,
+		DataverseCollection,
+		DatasetCollection,
+		DatatypeCollection,
+		IndexCollection,
+    KeysPipe,
+		MetadataContainerComponent,
+    MetadataComponent,
+    QueryContainerComponent,
+		AppTabComponent,
+		ObjectTypePipe,
+    ObjectArrayTypePipe,
+    DialogCreateDataverse,
+    DialogDropDataverse,
+    DialogCreateDataset,
+    DialogDropDataset,
+    DialogCreateDatatype,
+    DialogDropDatatype,
+    DialogCreateIndex,
+    DialogDropIndex,
+    SafeHtmlPipe
+  ],
+  imports: [
+    TreeModule,
+    DataTableModule,
+    SharedModule,
+    FormsModule,
+    BrowserModule,
+		BrowserAnimationsModule,
+		DBModule.provideDB(schema),
+		EffectsModule.forRoot([MetadataEffects, DataverseEffects, DatasetEffects, DatatypeEffects, IndexEffects, SQLQueryEffects]),
+    HttpClientModule,
+    MaterialModule,
+		StoreModule.forRoot(reducers),
+		StoreDevtoolsModule.instrument({
+			maxAge: 10
+		})
+  ],
+  entryComponents: [
+    DialogCreateDataverse, 
+    DialogDropDataverse, 
+    DialogCreateDataset, 
+    DialogDropDataset , 
+    DialogCreateDatatype, 
+    DialogDropDatatype,
+    DialogCreateIndex, 
+    DialogDropIndex 
+  ],
+  providers: [AppCoreService, SQLService, MetadataService],
+  bootstrap: [AppComponent]
+})
+export class AppModule { }
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/appbar.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/appbar.component.html
new file mode 100755
index 0000000..62cf771
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/appbar.component.html
@@ -0,0 +1,45 @@
+<!--/*
+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.
+*/ -->
+<header class="awc-navbar">
+    <nav class="awc-navbar-header">
+      <a mat-button class="awc-button" routerLink="/" aria-label="AsterixDB Web Console">
+      <img class="awc-asterixDB-logo"
+            src="assets/asterixdb_tm.png"
+            alt="AsterixDB">
+            <span>Administration Console</span>
+      </a>
+      <div class="flex-spacer"></div>
+      <a mat-button class="awc-button awc-navbar-hide-small" href="https://asterixDB.apache.org"
+         aria-label="WEBSITE">
+        WEBSITE
+      </a>
+      <a mat-button class="awc-button awc-navbar-hide-small" href="https://issues.apache.org/jira/browse/ASTERIXDB"
+         aria-label="FILE ISSUES">
+        FILE ISSUES
+      </a>
+      <a mat-button class="awc-button awc-navbar-hide-small" href="https://ci.apache.org/projects/asterixdb/index.html"
+         aria-label="DOCUMENTATION">
+        DOCUMENTATION
+      </a>
+      <a mat-button class="awc-button docs-navbar-hide-small" href="https://asterixdb.apache.org/community.html"
+         aria-label="CONTACT">
+        CONTACT
+      </a>
+
+      <a mat-button class="awc-button docs-navbar-hide-small" href="https://github.com/apache/asterixdb/"
+         aria-label="GITHUB">
+        GITHUB
+      </a>
+    </nav>
+</header>
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/appbar.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/appbar.component.scss
new file mode 100755
index 0000000..8a764e6
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/appbar.component.scss
@@ -0,0 +1,62 @@
+/*
+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.
+*/
+.awc-navbar {
+  a {
+    //color: #f0f0f0;
+    text-decoration: none;
+  }
+
+  border-bottom: 1px solid  hsla(0,0%,0%,.10);
+  overflow: hidden;
+}
+
+.awc-navbar-header {
+  display: flex;
+  flex-wrap: wrap;
+  align-items: center;
+  padding: 8px 16px;
+
+  > .mat-button {
+    &:last-child {
+      margin-left: auto;
+    }
+  }
+}
+
+.flex-spacer {
+  flex-grow: 1;
+}
+
+.awc-asterixDB-logo {
+  height: 26px;
+  margin: 0 4px 3px 0;
+  vertical-align: middle;
+}
+
+.awc-github-logo {
+  height: 21px;
+  margin: 0 7px 2px 0;
+  vertical-align: middle;
+}
+
+.awc-navbar-link {
+  text-decoration: inherit;
+  flex: 1;
+}
+
+/*
+* Rules for when the device is detected to be a small screen.
+* Moves content two rows instead of one.
+*/
+//@media (max-width: 720px) {}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/appbar.component.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/appbar.component.ts
new file mode 100755
index 0000000..563ed11
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/appbar.component.ts
@@ -0,0 +1,25 @@
+/*
+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.
+*/
+import { Component } from '@angular/core';
+
+@Component({
+	moduleId: module.id,
+	selector: 'awc-bar',
+  templateUrl: 'appbar.component.html',
+	styleUrls: ['appbar.component.scss']
+})
+
+export class AppBarComponent {
+	constructor() {}
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/apptab.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/apptab.component.html
new file mode 100755
index 0000000..bd5c963
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/apptab.component.html
@@ -0,0 +1,23 @@
+<!--/*
+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.
+*/ -->
+<div class="content">
+  <mat-tab-group class="menu">
+    <mat-tab label=">_ QUERY">
+      <awc-query-container></awc-query-container>
+    </mat-tab>
+    <mat-tab label="METADATA">
+      <awc-metadata-container></awc-metadata-container>
+    </mat-tab>
+  </mat-tab-group>
+</div>
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/apptab.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/apptab.component.scss
new file mode 100755
index 0000000..4d6fb7b
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/apptab.component.scss
@@ -0,0 +1,26 @@
+/*
+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.
+*/
+.content {
+  width:95%;
+  margin: 0 auto;
+}
+
+.menu {    
+  /deep/ .mat-tab-label {
+      font-size: 0.80rem !important;
+      font-weight: 500  !important;
+  }
+}
+
+
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/apptab.component.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/apptab.component.ts
new file mode 100755
index 0000000..b4db7f4
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/apptab.component.ts
@@ -0,0 +1,25 @@
+/*
+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.
+*/
+import { Component } from '@angular/core';
+import { Store } from '@ngrx/store';
+
+@Component({
+  selector: 'awc-tab',
+  templateUrl: 'apptab.component.html',
+  styleUrls: ['apptab.component.scss']
+})
+
+export class AppTabComponent {
+  constructor(private store: Store<any>) {};
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.scss
new file mode 100755
index 0000000..9812ecb
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.scss
@@ -0,0 +1,27 @@
+/*
+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.
+*/
+.textarea-metadata {
+    background-color: red !important;
+    border: 1px solid black !important;
+    padding: 0;
+	margin: 0;
+}
+
+codemirror-metadata {
+    border: 1px solid #eee;
+    height: auto;
+    background-color: blue !important;
+    padding: 0;
+	margin: 0;
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.ts
new file mode 100755
index 0000000..aed6ddf
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/codemirror-metadata.component.ts
@@ -0,0 +1,244 @@
+/*
+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.
+*/
+/**
+ * Integrating codemirror (using ng2-codemirror) with our application
+ *
+ * component from "https://runkit.com/npm/ng2-codemirror"
+ *                "https://www.npmjs.com/package/ng2-codemirror"
+ * copy component from /src/codemirror.component.ts
+ * and modified for custom mode (asterix aql, sql++ code hilighting)
+ *
+ * therefore, actually we don't need to "npm install ng2-codemirror"
+ *
+ * Because on the outside of this component,
+ * It was hard to access the codemirror instance that 'ng-codemirror' use
+ * So, we copied the component in our application and modified it
+ *
+ * 'codemirror.js(^5.23.0)' is included in the 'index.html'
+ * And in this component(codemirror.component.ts)
+ * add statement like "declare var CodeMirror: any;"
+ *
+ * I don't know whether this is right way
+ *
+ * ref 1) usage : https://embed.plnkr.co/8e9gxss9u10VeFrv29Zt/
+ * ref 2) custom mode : http://jsfiddle.net/TcqAf/99/
+ * ref 3) integrating : http://stackoverflow.com/questions/37092142/integrating-codemirror-with-angular2-typescript
+ * ref 3) integrating :  https://medium.com/@s_eschweiler/using-external-libraries-with-angular-2-87e06db8e5d1#.8ok74uvwg
+ */
+import {
+    Component,
+    Input,
+    Output,
+    ElementRef,
+    ViewChild,
+    EventEmitter,
+    forwardRef,
+    AfterViewInit,
+    OnDestroy,
+    ChangeDetectionStrategy
+  } from '@angular/core';
+  import { NG_VALUE_ACCESSOR } from '@angular/forms';
+  import * as CodeMirrorMetadata from 'codemirror';
+ 
+ /**
+  * CodeMirror component
+  * Usage :
+  * <codemirror [(ngModel)]="data" [config]="{...}"></codemirror>
+  */
+ @Component({
+   moduleId: module.id,
+   selector: 'codemirror-metadata',
+   providers: [
+     {
+       provide: NG_VALUE_ACCESSOR,
+       useExisting: forwardRef(() => CodemirrorMetadataComponent),
+       multi: true
+     }
+   ],
+   styleUrls: ['codemirror-metadata.component.scss'],
+   template: `<textarea class="textarea-metadata" #hostMetadata></textarea>`,//,
+ })
+ 
+export class CodemirrorMetadataComponent implements AfterViewInit, OnDestroy {
+  @Input() config;
+  @Output() change = new EventEmitter();
+  @Output() focus = new EventEmitter();
+  @Output() blur = new EventEmitter();
+  @Output() instance = null;
+  @ViewChild('hostMetadata') hostMetadata;
+  _value = '';
+ 
+  /**
+  * Constructor
+  */
+  constructor(){
+      /**
+      * Custom mode for AsterixDB
+      */
+      CodeMirrorMetadata.defineMode("asterix", function(){
+        var KEYWORD_MATCH = [
+              // AQL
+              "drop", "dataverse", "dataset",
+              "if", "exists", "create",
+              "use", "type", "as", "closed",
+              "primary", "key",  "hints", "cardinality",
+              "index", "on", "btree", "rtree", "keyword",
+              "for", "in", "Metadata", "Dataset",
+              "return", "Index", "load", "using", "localfs", "path", "format",
+              // Query (not perfect)
+              "from", "in", "with", "group", "by", "select",
+              "let", "where", "order", "asc", "desc", "limit",
+              "keeping", "offset", "distinct", "or", "and",
+              // Built in functions (TODO)
+              // Built in functions (TODO)
+              // Built in functions (TODO)
+              // Asterix Data Model
+              // Primitive type
+              "boolean",
+              "tinyint", "smallint", "integer", "bigint",
+              "float", "double",
+              "string",
+              "binary", "hex", "base64",
+              "point", "line", "rectangle", "circle", "polygon",
+              "date", "time", "datetime", "duration", "interval", "uuid",
+              // Incomplete information type
+              "null", "missing",
+              // Derived type
+              // object {}, array [], multiset {{}}
+              // SQL++
+              "DROP", "DATAVERSE", "IF", "EXISTS", "CREATE", "USE", "TYPE", "AS", "DATASET", "PRIMARY", "KEY",
+              "INDEX", "SELECT", "VALUE", "INSERT", "INTO", "FROM", "WHERE", "AND", "SOME", "IN", "SATISFIES", "IS", "UNKNOWN", "NOT", "EVERY",
+              "GROUP", "BY", "ORDER", "DESC", "LIMIT", "OR", "SET", "DELETE", "LOAD", "USING",
+          ];
+
+          //"(", ")","{{", "}}", "[", "]",	"{", "}",  ";", ",", ":","?", "=",
+        var VAR_MATCH = /[$][a-zA-Z]+(\d*)/;
+        var DOT_MATCH = /[.](\S)*/;
+        var DOUBLE_QUOTE_MATCH = /["].*["]/;
+        var SINGLE_QUOTE_MATCH = /['].*[']/;
+        var BREAK_POINT = /(\s)/;
+
+        return {
+            startState: function() {return {inString: false};},
+            token: function(stream, state) {
+                if (state.newLine == undefined)state.newLine = true;
+
+                //match variable reference
+                if (stream.match(VAR_MATCH)) {
+                    return "variable";
+                }
+
+                if (stream.match(DOT_MATCH)) {
+                    return "dot-variable";
+                }
+
+                //string variable match
+                if (stream.match(DOUBLE_QUOTE_MATCH)) {
+                    return "string";
+                }
+                if (stream.match(SINGLE_QUOTE_MATCH)) {
+                    return "string";
+                }
+
+                //keyword match
+                for (var i in KEYWORD_MATCH){
+                    if (state.newLine && stream.match(KEYWORD_MATCH[i])){
+                            return "keyword";
+                    }
+                }
+
+                if (stream.peek() === " " || stream.peek() === null){
+                    state.newLine = true;
+                }else{
+                    state.newLine = false;
+                }
+                stream.next();
+                return null;
+            }
+        };
+      });
+   }
+ 
+  get value() { return this._value; };
+ 
+  @Input() set value(v) {
+    if (v !== this._value) {
+      this._value = v;
+      this.onChange(v);
+    }
+  }
+
+  /**
+  * On component destroy
+  */
+  ngOnDestroy() {}
+ 
+   /**
+    * On component view init
+    */
+  ngAfterViewInit() {
+  this.config = this.config || {};
+  this.codemirrorInit(this.config); 
+  }
+
+  /**
+  * Initialize codemirror
+  */
+  codemirrorMetadataConfig = 	{ 	mode: "asterix",
+    //lineNumbers: true,
+    lineWrapping: true,
+    showCursorWhenSelecting: true,
+    autofocus: true
+  };
+
+  codemirrorInit(config){
+    this.instance = CodeMirrorMetadata.fromTextArea(this.hostMetadata.nativeElement, this.codemirrorMetadataConfig);
+    this.instance.setSize("100%" , "100px");
+    this.instance.on('change', () => {
+      this.updateValue(this.instance.getValue());
+    });
+
+    this.instance.on('focus', () => {
+      this.focus.emit();
+    });
+
+    this.instance.on('blur', () => {
+      this.blur.emit();
+    });
+  }
+ 
+  /**
+  * Value update process
+  */
+  updateValue(value){
+    this.value = value;
+    this.onTouched();
+    this.change.emit(value);
+  }
+ 
+  /**
+  * Implements ControlValueAccessor
+  */
+  writeValue(value){
+    this._value = value || '';
+    if (this.instance) {
+      this.instance.setValue(this._value);
+    }
+  }
+ 
+  onChange(_) {}
+  onTouched() {}
+  registerOnChange(fn){this.onChange = fn;}
+  registerOnTouched(fn){this.onTouched = fn;}
+} 
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.html
new file mode 100755
index 0000000..ef88719
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.html
@@ -0,0 +1,14 @@
+<!--/*
+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.
+*/-->
+<!-- Place holder for future expansion -->
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.scss
new file mode 100755
index 0000000..c969489
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-create-dialog.component.scss
@@ -0,0 +1,18 @@
+/*
+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.
+*/
+.dataset-dialog {    
+    font-family: "Roboto Mono", monospace;
+    font-size: 0.80rem;
+    font-weight: 500;
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.html
new file mode 100755
index 0000000..517006c
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.html
@@ -0,0 +1,26 @@
+<!--/*
+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.
+*/-->
+<div class="dataset-dialog">
+    <p mat-dialog-title>DROP DATASET</p>
+    <mat-dialog-content>
+        <p>PLEASE GIVE THE NAME OF THE DATASET TO DROP</p>
+    </mat-dialog-content>
+        <mat-form-field>
+            <input matInput tabindex="0" [(ngModel)]="data.datasetName">
+        </mat-form-field>
+    <mat-dialog-actions>
+        <button mat-button (click)="onClick()" tabindex="1">DROP</button>
+        <button mat-button (click)="onNoClick()" tabindex="2">CANCEL</button>
+    </mat-dialog-actions>
+</div>
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.scss
new file mode 100755
index 0000000..c969489
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/dataset-drop-dialog.component.scss
@@ -0,0 +1,18 @@
+/*
+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.
+*/
+.dataset-dialog {    
+    font-family: "Roboto Mono", monospace;
+    font-size: 0.80rem;
+    font-weight: 500;
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.html
new file mode 100755
index 0000000..f556951
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.html
@@ -0,0 +1,112 @@
+<!--/*
+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.
+*/ -->
+<div class="container" (click)="onClick()">
+  <div class="master">
+      <mat-card class="datasets-card" *ngIf="loaded$ | async as ld">
+        <mat-toolbar color="primary" class="datasets-selector">
+            <mat-icon class="icon">menu</mat-icon>
+            <span>DATASETS - METADATA</span>
+            <span class="spacer"></span>
+        </mat-toolbar>
+        <mat-card-content class="datasets-content">
+            <mat-table #table [dataSource]="dataSource" class="datasets-table">
+                <!-- CompactionPolicy Column -->
+                <ng-container matColumnDef="CompactionPolicy">
+                  <mat-header-cell *matHeaderCellDef class="header-compactionpolicy-cell">Compaction Policy</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-compactionpolicy-cell"> {{element.CompactionPolicy}} </mat-cell>
+                </ng-container>
+    
+                <!-- DatasetId Column -->
+                <ng-container matColumnDef="DatasetId">
+                  <mat-header-cell *matHeaderCellDef class="header-datasetid-cell">Dataset Id</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-datasetid-cell"> {{element.DatasetId}} </mat-cell>
+                </ng-container>
+    
+                <!-- DatasetName Column -->
+                <ng-container matColumnDef="DatasetName">
+                  <mat-header-cell *matHeaderCellDef class="header-datasetname-cell">Dataset Name</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-datasetname-cell"> {{element.DatasetName}} </mat-cell>
+                </ng-container>
+    
+                <!-- DatasetType Column -->
+                <ng-container matColumnDef="DatasetType">
+                  <mat-header-cell *matHeaderCellDef class="header-datasettype-cell">Dataset Type</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-datasettype-cell"> {{element.DatasetType}} </mat-cell>
+                </ng-container>
+    
+                <!-- DatatypeDataverseName Column -->
+                <ng-container matColumnDef="DatatypeDataverseName">
+                  <mat-header-cell *matHeaderCellDef class="header-datatypedataversename-cell">Datatype Dataverse Name</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-datatypedataversename-cell"> {{element.DatatypeDataverseName}} </mat-cell>
+                </ng-container>
+    
+                <!-- DatatypeName Column -->
+                <ng-container matColumnDef="DatatypeName">
+                  <mat-header-cell *matHeaderCellDef class="header-datatypename-cell">Datatype Name</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-datatypename-cell"> {{element.DatatypeName}} </mat-cell>
+                </ng-container>
+    
+                <!-- DataverseName Column -->
+                <ng-container matColumnDef="DataverseName">
+                  <mat-header-cell *matHeaderCellDef class="header-dataversename-cell">Dataverse Name</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-dataversename-cell"> {{element.DataverseName}} </mat-cell>
+                </ng-container>
+    
+                <!-- GroupName Column -->
+                <ng-container matColumnDef="GroupName">
+                  <mat-header-cell *matHeaderCellDef class="header-groupname-cell">Group Name</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-groupname-cell"> {{element.GroupName}} </mat-cell>
+                </ng-container>
+    
+                <!-- PendingOp Column -->
+                <ng-container matColumnDef="PendingOp">
+                  <mat-header-cell *matHeaderCellDef class="header-pendingop-cell">Pending Op</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-pendingop-cell"> {{element.PendingOp}} </mat-cell>
+                </ng-container>
+    
+                <!-- DatasetType Column -->
+                <ng-container matColumnDef="Timestamp">
+                  <mat-header-cell *matHeaderCellDef class="header-timestamp-cell">Timestamp</mat-header-cell>
+                  <mat-cell *matCellDef="let element" class="dataset-timestamp-cell"> {{element.Timestamp}} </mat-cell>
+                </ng-container>
+    
+                <mat-header-row *matHeaderRowDef="['DatasetName', 'DataverseName', 'DatatypeName', 'Timestamp']"></mat-header-row>
+                <mat-row *matRowDef="let row; columns: ['DatasetName', 'DataverseName', 'DatatypeName', 'Timestamp'];"
+                  [ngClass]="{'highlight': selectedRowIndex == row.id}"
+                  (click)="highlight(row)">
+                </mat-row>
+            </mat-table>
+        </mat-card-content>
+        <mat-card-actions class="actions">
+            <button class="refresh-button" mat-button (click)="openDropDatasetDialog()">DROP</button>
+            <span class="error-message">{{errorMessage}}</span>
+            <span class="spacer"></span>
+            <button class="refresh-button" mat-button (click)="getDatasets()">REFRESH</button>
+        </mat-card-actions>
+      </mat-card>
+      <awc-query-metadata #querymetadata class="query"></awc-query-metadata>
+  </div>
+  <div class="detail">
+      <mat-card class="datasets-details-card">
+          <mat-toolbar color="primary" class="datasets-selector">
+              <mat-icon class="icon">menu</mat-icon>
+              <span>DATASET - METADATA - DETAILS</span>
+              <span class="spacer"></span>
+          </mat-toolbar>
+          <mat-card-content class="datasets-content output">
+            <span><pre>{{output}}</pre></span>
+          </mat-card-content>
+        </mat-card>
+  </div>
+</div>
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.scss
new file mode 100755
index 0000000..38a8272
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.scss
@@ -0,0 +1,415 @@
+/*
+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.
+*/
+$datasets-spacing-unit: 8px;
+
+.container {
+  display: flex;
+	flex-flow: row;
+	padding: 0;
+  margin: 0;
+}
+
+.master {
+  width: 60%;
+  overflow: hidden;
+}
+
+.detail {
+  width: 40%;
+  overflow: hidden;
+}
+
+.datasets-card {
+	display: flex;
+	flex-flow: column;
+  padding: 0;
+  margin:0 auto;
+  margin-top: ($datasets-spacing-unit * 2);
+  min-height: 450px;
+  max-height: 450px;
+  //min-width: 98%; //(100vw / 2);
+  //max-width: 98%; // (100vw / 2);
+  width: 95%; // 98%;
+  overflow: hidden;
+}
+
+.datasets-details-card {
+	display: flex;
+	flex-flow: column;
+  padding: 0;
+  margin:0 auto;
+  margin: ($datasets-spacing-unit * 2);
+  min-height: 716px;
+  max-height: 716px;
+  //min-width: 95%; //(100vw / 2);
+  //max-width: 95%; // (100vw / 2);
+  overflow: hidden;
+}
+
+.icon {
+	padding: 0 14px 0 0;
+	margin: 0;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.datasets-selector {
+	min-height: 42px;
+	max-height: 42px;
+	justify-content: center;
+	font-size: 0.80rem;
+  font-weight: 500;
+  background-color: white;
+	border: 1px solid rgba(54, 147, 209, 0.87);
+}
+
+.datasets-content {
+  position:relative;
+  top: 0;
+  left: 0;
+  margin: 0px;
+  padding: 0px;
+  overflow: auto;
+}
+
+.datasets-table {
+  margin: $datasets-spacing-unit !important;
+  height: 330px;
+  overflow: auto;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.example-header {
+  min-height: 64px;
+  display: flex;
+  align-items: center;
+  padding-left: 24px;
+  font-size: 20px;
+}
+
+.mat-table {
+  overflow: auto;
+}
+
+.customWidthClass{
+   flex: 0 0 250px;
+}
+
+.mat-column-DataverseName {
+  text-align: left;
+}
+
+.mat-header-cell.mat-column-DataverseName {
+  text-align: left;
+}
+
+.mat-cell.mat-column-DataverseName {
+  text-align: left;
+}
+
+.header-compactionpolicy-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-compactionpolicy-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.header-datasetid-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-datasetid-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.header-datasetname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-datasetname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.header-datasettype-cell {
+  border: none;
+  font-size: 12px;
+  //letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-datasettype-cell {
+  border: none;
+  font-size: 12px;
+  //letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.header-datatypedataversename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-datatypedataversename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.header-datatypename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-datatypename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.header-dataversename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-dataversename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+
+.header-groupname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-groupname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.header-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.dataset-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datasets-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datasets-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.example-header {
+  min-height: 56px;
+  max-height: 56px;
+  display: flex;
+  align-items: center;
+  padding: 8px 24px 0;
+  font-size: 20px;
+  justify-content: space-between;
+  border-bottom: 1px solid transparent;
+}
+
+.mat-form-field {
+  font-size: 14px;
+  flex-grow: 1;
+  margin-top: 8px;
+}
+
+.example-no-results {
+  display: flex;
+  justify-content: center;
+  padding: 24px;
+  font-size: 12px;
+  font-style: italic;
+}
+
+.actions {
+  display: flex;
+  border-top: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(54, 147, 209, 0.87);
+  padding: $datasets-spacing-unit;
+  margin: 0;
+}
+
+.error-message {
+  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(209, 54, 54, 0.87);
+  padding-top: 10px;  
+  padding-left: 20px;
+  text-overflow: ellipsis;
+}
+
+.output {
+  padding-left: ($datasets-spacing-unit * 2);
+}
+
+
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.ts
new file mode 100755
index 0000000..0fe8c74
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datasets-collection/datasets.component.ts
@@ -0,0 +1,231 @@
+/*
+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.
+*/
+import { Component, ElementRef, ViewChild, Inject, Input } from '@angular/core';
+import { Dataset } from '../../../shared/models/asterixDB.model'
+import { Store } from '@ngrx/store';
+import { Observable } from 'rxjs/Observable';
+import * as datasetActions from '../../../shared/actions/dataset.actions'
+import {DataSource} from '@angular/cdk/collections';
+import {BehaviorSubject} from 'rxjs/BehaviorSubject';
+import { Subscription } from "rxjs/Rx";
+import { State } from '../../../shared/reducers/dataset.reducer';
+import 'rxjs/add/operator/startWith';
+import 'rxjs/add/observable/merge';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/debounceTime';
+import 'rxjs/add/operator/distinctUntilChanged';
+import 'rxjs/add/observable/fromEvent';
+import { MatPaginator } from '@angular/material';
+import { SelectionModel } from '@angular/cdk/collections';
+import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
+
+/**
+ * Root component
+ * Defines our application's layout
+ */
+@Component({
+  selector: 'awc-datasets',
+  templateUrl: 'datasets.component.html',
+  styleUrls: ['datasets.component.scss']
+})
+
+export class DatasetCollection {
+  displayedColumns = "['CompactionPolicy', 'DatasetId', 'DatasetName', 'DatasetType', 'DatatypeDataverseName', 'DatatypeName', 'DataverseName', 'GroupName', 'PendingOp', 'Timestamp']"
+
+/*
+  compactionPolicy: string;
+  compactionPolicyProperties: CompactionPolicyProperties[]; *
+  datasetId: string;
+  datasetName: string;
+  datasetType:string;
+  datatypeDataverseName: string;
+  datatypeName: string;
+  dataverseName: string;
+  groupName:string;
+  hints: string[]; *
+  internalDetails: InternalDetails; *
+  pendingOp: string;
+  timestamp: string; */
+  datasetName: string;  
+  dataSource: DatasetDataSource | null;
+  loaded$: Observable<any>
+  @Input('message') errorMessage: string = ""
+  dsName = "";
+
+  constructor(private store: Store<any>, public dialog: MatDialog) {
+    this.loaded$ = this.store.select('dataset');
+
+    // Watching the name of the latest create dataset
+    this.store.select(s => s.dataset.createDatasetName).subscribe((data: any) => {
+      this.dsName = data;
+    })
+
+    // Watching the name of the latest drop dataset
+    this.store.select(s => s.dataset.dropDatasetName).subscribe((data: any) => {
+      this.dsName = data;
+    })
+
+    // Watching for the if there is a change in the collection
+		this.store.select(s => s.dataset.createDatasetSuccess).subscribe((data: any) => {
+      if (data === true) {
+        this.getDatasets();
+        this.errorMessage = "SUCCEED: CREATE DATASET " + this.dsName;
+      }  
+    })
+
+    // Watching for the if there is a error in a create dataset operation 
+		this.store.select(s => s.dataset.createDatasetError).subscribe((data: any) => {
+      if (data.errors) {
+        this.errorMessage = "ERROR: " + data.errors[0].msg;
+      }  
+    })
+
+
+    // Watching for the success message in a drop dataset operation 
+    this.store.select(s => s.dataset.dropDatasetSuccess).subscribe((data: any) => {
+      if (data === true) {
+        this.getDatasets();
+        this.errorMessage = "SUCCEED: DROP DATASET " + this.dsName;
+      }  
+    })
+
+    // Watching for the if there is a error in a drop dataset operation 
+		this.store.select(s => s.dataset.dropDatasetError).subscribe((data: any) => {
+      if (data.errors) {
+        this.errorMessage = "ERROR: " + data.errors[0].msg;
+      }  
+    })
+  }
+
+  getDatasets() {
+    // Trigger the effect to refresh the dataset
+    this.store.dispatch(new datasetActions.SelectDatasets('-'));
+  }
+
+  ngOnInit() {
+    // Assign the datasource for the table 
+    this.dataSource = new DatasetDataSource(this.store);
+  }
+
+  /* 
+  * opens the create dataverse dialog
+  */
+  openCreateDatasetDialog(): void {
+    let dialogRef = this.dialog.open(DialogCreateDataset, {
+      width: '420px',
+      data: { name: this.datasetName }
+    });
+
+    dialogRef.afterClosed().subscribe(result => {
+      this.datasetName = result;
+    });
+  }
+
+  /* 
+  * opens the drop dataverse dialog
+  */
+  openDropDatasetDialog(): void {
+    let dialogRef = this.dialog.open(DialogDropDataset, {
+      width: '420px',
+      data: { name: this.datasetName }
+    });
+
+    dialogRef.afterClosed().subscribe(result => {
+      this.datasetName = result;
+    });
+  }
+
+  /* 
+  * Clean up the error message on the screen
+  */
+  onClick(): void {
+    this.errorMessage = "";
+  }
+
+  output: any;
+
+  highlight(row){
+    this.output = JSON.stringify(row, null, 2);
+  }
+
+  @ViewChild('querymetadata') inputQuery;
+  
+  /* Cleans up error message */
+  cleanUp() {
+    this.errorMessage = ""; 
+    // Cascading   
+    this.inputQuery.cleanUp(); 
+  }
+}
+
+@Component({
+  selector: 'dataset-create-dialog',
+  templateUrl: 'dataset-create-dialog.component.html',
+  styleUrls: ['dataset-create-dialog.component.scss']
+})
+
+export class DialogCreateDataset {
+  constructor(  private store: Store<any>,
+                public dialogCreateDsRef: MatDialogRef<DialogCreateDataset>,
+                @Inject(MAT_DIALOG_DATA) public data: any) { }
+
+  onClick(): void {
+    this.store.dispatch(new datasetActions.CreateDataset(this.data.datasetName));
+    this.dialogCreateDsRef.close();
+  }
+
+  onNoClick(): void {
+    this.dialogCreateDsRef.close();
+  }
+}
+
+@Component({
+  selector: 'dataset-drop-dialog',
+  templateUrl: 'dataset-drop-dialog.component.html',
+  styleUrls: ['dataset-drop-dialog.component.scss']
+})
+
+export class DialogDropDataset {
+  constructor(  private store: Store<any>,
+                public dialogDropDsRef: MatDialogRef<DialogDropDataset>,
+                @Inject(MAT_DIALOG_DATA) public data: any) { }
+
+  onClick(): void {
+    this.store.dispatch(new datasetActions.DropDataset(this.data.datasetName));
+    this.dialogDropDsRef.close();
+  }
+
+  onNoClick(): void {
+    this.dialogDropDsRef.close();
+  }
+}
+
+export class DatasetDataSource extends DataSource<any> {
+  private datasets$: Observable<any>
+  constructor(private store: Store<any>) {
+    super();
+    this.datasets$ = this.store.select(s => s.dataset.datasets.results);
+  }
+
+  /** Connect function called by the table to retrieve one stream containing the data to render. */
+  connect(): Observable<Dataset[]> {
+      const displayDataChanges = [
+        this.datasets$,
+      ];
+
+    return this.datasets$;
+  }
+
+  disconnect() {}
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.html
new file mode 100755
index 0000000..aca06fd
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.html
@@ -0,0 +1,14 @@
+<!--/*
+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.
+*/-->
+<!-- Place holder for future expansion -->
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.scss
new file mode 100755
index 0000000..9502a7e
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-create-dialog.component.scss
@@ -0,0 +1,18 @@
+/*
+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.
+*/
+.datatype-dialog {    
+    font-family: "Roboto Mono", monospace;
+    font-size: 0.80rem;
+    font-weight: 500;
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.html
new file mode 100755
index 0000000..1157261
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.html
@@ -0,0 +1,26 @@
+<!--/*
+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.
+*/-->
+<div class="datatype-dialog">
+    <p mat-dialog-title>DROP DATATYPE</p>
+    <mat-dialog-content>
+        <p>PLEASE GIVE THE NAME OF THE DATATYPE TO DROP</p>
+    </mat-dialog-content>
+        <mat-form-field>
+            <input matInput tabindex="0" [(ngModel)]="data.datatypeName">
+        </mat-form-field>
+    <mat-dialog-actions>
+        <button mat-button (click)="onClick()" tabindex="1">DROP</button>
+        <button mat-button (click)="onNoClick()" tabindex="2">CANCEL</button>
+    </mat-dialog-actions>
+</div>
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.scss
new file mode 100755
index 0000000..9502a7e
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatype-drop-dialog.component.scss
@@ -0,0 +1,18 @@
+/*
+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.
+*/
+.datatype-dialog {    
+    font-family: "Roboto Mono", monospace;
+    font-size: 0.80rem;
+    font-weight: 500;
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.html
new file mode 100755
index 0000000..e580a54
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.html
@@ -0,0 +1,70 @@
+<!--/*
+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.
+*/ -->
+<div class="container" (click)="onClick()">
+  <div class="master">
+   <mat-card class="datatypes-card" *ngIf="loaded$ | async as ld">
+      <mat-toolbar color="primary" class="datatypes-selector">
+          <mat-icon class="icon">menu</mat-icon>
+          <span>DATATYPES - METADATA</span>
+          <span class="spacer"></span>
+      </mat-toolbar>
+      <mat-card-content class="datatypes-content">
+        <mat-table #table [dataSource]="dataSource" class="datatypes-table" role="treegrid">
+            <!-- Datatype Name -->
+            <ng-container matColumnDef="DatatypeName">
+              <mat-header-cell *matHeaderCellDef class="header-datatypename-cell">Datatype Name</mat-header-cell>
+              <mat-cell *matCellDef="let element" class="datatypes-datatypename-cell">{{element.DatatypeName}} </mat-cell>
+            </ng-container>
+
+            <!-- Data Type Dataverse Name -->
+            <ng-container matColumnDef="DataverseName">
+              <mat-header-cell *matHeaderCellDef class="header-dataversename-cell">Dataverse Name </mat-header-cell>
+              <mat-cell *matCellDef="let element" class="datatypes-dataversename-cell">{{element.DataverseName}} </mat-cell>
+            </ng-container>
+
+            <!-- Timestamp Column -->
+            <ng-container matColumnDef="Timestamp">
+              <mat-header-cell *matHeaderCellDef class="header-timestamp-cell">Timestamp</mat-header-cell>
+              <mat-cell *matCellDef="let element" class="datatypes-timestamp-cell">{{element.Timestamp}}</mat-cell>
+            </ng-container>
+
+            <mat-header-row *matHeaderRowDef="['DatatypeName', 'DataverseName', 'Timestamp']"></mat-header-row>
+            <mat-row *matRowDef="let row; columns: ['DatatypeName', 'DataverseName', 'Timestamp'];"
+                [ngClass]="{'highlight': selectedRowIndex == row.id}"
+                (click)="highlight(row)">
+            </mat-row>
+        </mat-table>
+      </mat-card-content>
+      <mat-card-actions class="actions">
+          <button class="refresh-button" mat-button (click)="openDropDatatypeDialog()">DROP</button>
+          <span class="error-message">{{errorMessage}}</span>
+          <span class="spacer"></span>
+          <button class="refresh-button" mat-button (click)="getDatatypes()">REFRESH</button>
+      </mat-card-actions>
+    </mat-card> 
+    <awc-query-metadata #querymetadata class="query"></awc-query-metadata>
+  </div>
+  <div class="detail">
+      <mat-card class="datatypes-details-card">
+          <mat-toolbar color="primary" class="datatypes-selector">
+              <mat-icon class="icon">menu</mat-icon>
+              <span>DATATYPE - METADATA - DETAILS</span>
+              <span class="spacer"></span>
+          </mat-toolbar>
+          <mat-card-content class="datatypes-content output">
+            <span><pre>{{output}}</pre></span>
+          </mat-card-content>
+        </mat-card>
+  </div>
+</div>
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.scss
new file mode 100755
index 0000000..d4aeffc
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.scss
@@ -0,0 +1,267 @@
+/*
+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.
+*/
+$datatypes-spacing-unit: 8px;
+
+.container {
+  display: flex;
+	flex-flow: row;
+	padding: 0;
+  margin: 0;
+}
+
+.master {
+  width: 60%;
+  overflow: hidden;
+}
+
+.detail {
+  width: 40%;
+  overflow: hidden;
+}
+
+.datatypes-card {
+	display: flex;
+	flex-flow: column;
+  padding: 0;
+  margin:0 auto;
+  margin-top: ($datatypes-spacing-unit * 2);
+  min-height: 450px;
+  max-height: 450px;
+  //min-width: 98%; //(100vw / 2);
+  //max-width: 98%; // (100vw / 2);
+  width: 95%; // 98%;
+  overflow: hidden;
+}
+
+.datatypes-details-card {
+	display: flex;
+	flex-flow: column;
+  padding: 0;
+  margin:0 auto;
+  margin: ($datatypes-spacing-unit * 2);
+  min-height: 716px;
+  max-height: 716px;
+  //min-width: 95%; //(100vw / 2);
+  //max-width: 95%; // (100vw / 2);
+  overflow: hidden;
+}
+
+.icon {
+	padding: 0 14px 0 0;
+	margin: 0;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.datatypes-selector {
+	min-height: 42px;
+	max-height: 42px;
+	justify-content: center;
+	//align-items: center;
+	font-size: 0.80rem;
+  font-weight: 500;
+  background-color: white;
+	border: 1px solid rgba(54, 147, 209, 0.87);
+}
+
+.datatypes-content {
+  position:relative;
+  top: 0;
+  left: 0;
+  margin: 0px;
+  padding: 0px;
+  overflow: auto;
+}
+
+.datatypes-table {
+  margin: $datatypes-spacing-unit !important;
+  height: 330px;
+  overflow: auto;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.datatypes-toolbar {
+	display: block;
+  min-height: 56px;
+	height: 56px;
+//	width: 250px;
+  font-size: 12px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+	letter-spacing: 1px;
+	font-weight: 400;
+	background: rgba(0,0,1, .80);
+}
+
+.example-header {
+  min-height: 64px;
+  display: flex;
+  align-items: center;
+  padding-left: 24px;
+  font-size: 20px;
+}
+
+.mat-table {
+  overflow: auto;
+}
+
+.customWidthClass{
+   flex: 0 0 75px;
+}
+
+.mat-column-DataverseName {
+  text-align: left;
+}
+
+.mat-header-cell.mat-column-DataverseName {
+  text-align: left;
+}
+
+.mat-cell.mat-column-DataverseName {
+  text-align: left;
+}
+
+.header-datatypename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datatypes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datatypes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 400px;
+}
+
+.datatypes-datatypename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datatypes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datatypes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 400px;
+}
+
+.header-dataversename-cell {
+  display: flex;
+  justify-content: center;
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datatypes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datatypes-spacing-unit * 2);
+  text-align: center;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.datatypes-dataversename-cell {
+  display: flex;
+  justify-content: center;
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datatypes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datatypes-spacing-unit * 2);
+  flex: 0 0 250px;
+}
+
+.header-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datatypes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datatypes-spacing-unit * 2);
+  text-align: center;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.datatypes-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $datatypes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($datatypes-spacing-unit * 2);
+  text-align: center;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.example-header {
+  min-height: 56px;
+  max-height: 56px;
+  display: flex;
+  align-items: center;
+  padding: 8px 24px 0;
+  font-size: 20px;
+  justify-content: space-between;
+  border-bottom: 1px solid transparent;
+}
+
+.mat-form-field {
+  font-size: 14px;
+  flex-grow: 1;
+  margin-top: 8px;
+}
+
+.example-no-results {
+  display: flex;
+  justify-content: center;
+  padding: 24px;
+  font-size: 12px;
+  font-style: italic;
+}
+
+.actions {
+  display: flex;
+  border-top: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(54, 147, 209, 0.87);
+  padding: $datatypes-spacing-unit;
+  margin: 0;
+}
+
+.error-message {
+  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(209, 54, 54, 0.87);
+  padding-top: 10px;  
+  padding-left: 20px;
+  text-overflow: ellipsis;
+}
+
+.output {
+  padding-left: ($datatypes-spacing-unit * 2);
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.ts
new file mode 100755
index 0000000..953a27e
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/datatypes-collection/datatypes.component.ts
@@ -0,0 +1,220 @@
+/*
+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.
+*/
+import { Component, ChangeDetectionStrategy, Inject, Input } from '@angular/core';
+import { Datatype } from '../../../shared/models/asterixDB.model'
+import { Store } from '@ngrx/store';
+import { Observable } from 'rxjs/Observable';
+import * as datatypeActions from '../../../shared/actions/datatype.actions'
+import { ElementRef, ViewChild} from '@angular/core';
+import {DataSource} from '@angular/cdk/collections';
+import {BehaviorSubject} from 'rxjs/BehaviorSubject';
+import 'rxjs/add/operator/startWith';
+import 'rxjs/add/observable/merge';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/debounceTime';
+import 'rxjs/add/operator/distinctUntilChanged';
+import 'rxjs/add/observable/fromEvent';
+import { Subscription } from "rxjs/Rx";
+import { State } from '../../../shared/reducers/datatype.reducer';
+import { MatPaginator } from '@angular/material';
+import { SelectionModel } from '@angular/cdk/collections';
+import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
+
+@Component({
+  selector: 'awc-datatypes',
+  templateUrl: 'datatypes.component.html',
+  styleUrls: ['datatypes.component.scss']
+})
+
+export class DatatypeCollection {
+  displayedColumns = "['datatypeName', 'dataverseName', 'timeStamp']"
+  /*
+  datatypeName: string;
+  dataverseName: string;
+  derived: DatatypeDerived;
+  timeStamp: string;
+  */
+  datatypeName: string;
+  dataSource: DatatypeDataSource | null;
+  loaded$: Observable<any>;
+  @ViewChild(MatPaginator) paginator: MatPaginator;
+  @ViewChild('filter') filter: ElementRef;
+  selection = new SelectionModel<string>(true, []);
+  @Input('message') errorMessage: string = ""
+  dtName = "";
+  
+  constructor(private store: Store<any>, public dialog: MatDialog) {
+    this.loaded$ = this.store.select('datatype');
+    // Watching the name of the latest create datatype
+    this.store.select(s => s.datatype.createDatatypeName).subscribe((data: any) => {
+      this.dtName = data;
+    })
+
+    // Watching the name of the latest drop datatype
+    this.store.select(s => s.datatype.dropDatatypeName).subscribe((data: any) => {
+      this.dtName = data;
+    })
+
+    // Watching for the if there is a change in the collection
+		this.store.select(s => s.datatype.createDatatypeSuccess).subscribe((data: any) => {
+      if (data === true) {
+        this.getDatatypes();
+        this.errorMessage = "SUCCEED: CREATE DATATYPE " + this.dtName;
+      }  
+    })
+
+    // Watching for the if there is a error in a create datatype operation 
+		this.store.select(s => s.datatype.createDatatypeError).subscribe((data: any) => {
+      if (data.errors) {
+        this.errorMessage = "ERROR: " + data.errors[0].msg;
+      }  
+    })
+
+    // Watching for the success message in a drop datatype operation 
+    this.store.select(s => s.datatype.dropDatatypeSuccess).subscribe((data: any) => {
+      if (data === true) {
+        this.getDatatypes();
+        this.errorMessage = "SUCCEED: DROP DATATYPE " + this.dtName;
+      }  
+    })
+
+    // Watching for the if there is a error in a drop datatype operation 
+		this.store.select(s => s.datatype.dropDatatypeError).subscribe((data: any) => {
+      if (data.errors) {
+        this.errorMessage = "ERROR: " + data.errors[0].msg;
+      }  
+    })
+  }
+
+  getDatatypes() {
+    // Triggers the effect to refresg the datatypes
+    this.store.dispatch(new datatypeActions.SelectDatatypes('-'));
+  }
+
+  ngOnInit() {
+    // Assign the datasource for the table 
+    this.dataSource = new DatatypeDataSource(this.store);
+  }
+
+   /* 
+  * opens the create datatype dialog
+  */
+  openCreateDatatypeDialog(): void {
+    let dialogRef = this.dialog.open(DialogCreateDatatype, {
+      width: '420px',
+      data: { name: this.datatypeName }
+    });
+
+    dialogRef.afterClosed().subscribe(result => {
+      this.datatypeName = result;
+    });
+  }
+
+  /* 
+  * opens the drop datatype dialog
+  */
+  openDropDatatypeDialog(): void {
+    let dialogRef = this.dialog.open(DialogDropDatatype, {
+      width: '420px',
+      data: { name: this.datatypeName }
+    });
+
+    dialogRef.afterClosed().subscribe(result => {
+      this.datatypeName = result;
+    });
+  }
+
+  onClick(): void {
+    this.errorMessage = "";
+  }
+
+  /* Showing all the datatype metadata information */
+  output: any;
+  
+  highlight(row){
+    this.output = JSON.stringify(row, null, 2);
+  }
+
+  @ViewChild('querymetadata') inputQuery;
+
+  /* Cleans up error message */
+  cleanUp() {
+    this.errorMessage = ""; 
+    // Cascading   
+    this.inputQuery.cleanUp();    
+  }
+}
+
+@Component({
+  selector: 'datatype-create-dialog',
+  templateUrl: 'datatype-create-dialog.component.html',
+  styleUrls: ['datatype-create-dialog.component.scss']
+})
+
+export class DialogCreateDatatype {
+  constructor(  private store: Store<any>,
+                public dialogCreateDtRef: MatDialogRef<DialogCreateDatatype>,
+                @Inject(MAT_DIALOG_DATA) public data: any) { }
+
+  onClick(): void {
+    this.store.dispatch(new datatypeActions.CreateDatatype(this.data.datasetName));
+    this.dialogCreateDtRef.close();
+  }
+
+  onNoClick(): void {
+    this.dialogCreateDtRef.close();
+  }
+}
+
+@Component({
+  selector: 'datatypes-drop-dialog',
+  templateUrl: 'datatype-drop-dialog.component.html',
+  styleUrls: ['datatype-drop-dialog.component.scss']
+})
+
+export class DialogDropDatatype {
+  constructor(  private store: Store<any>,
+                public dialogDropDtRef: MatDialogRef<DialogDropDatatype>,
+                @Inject(MAT_DIALOG_DATA) public data: any) { }
+
+  onClick(): void {
+    this.store.dispatch(new datatypeActions.DropDatatype(this.data.datatypeName));
+    this.dialogDropDtRef.close();
+  }
+
+  onNoClick(): void {
+    this.dialogDropDtRef.close();
+  }
+}
+
+export class DatatypeDataSource extends DataSource<any> {
+    private datatypes$: Observable<any>
+
+    constructor(private store: Store<any>) {
+      super();
+      this.datatypes$ = this.store.select(s => s.datatype.datatypes.results);
+    }
+
+    /** Connect function called by the table to retrieve one stream containing the data to render. */
+    connect(): Observable<Datatype[]> {
+        const displayDataChanges = [
+          this.datatypes$,
+        //  this._filterChange,
+        ];
+
+      return this.datatypes$;
+    }
+
+    disconnect() {}
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.html
new file mode 100755
index 0000000..5159e38
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.html
@@ -0,0 +1,27 @@
+<!--/*
+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.
+*/-->
+<div class="dataverse-dialog">
+    <p mat-dialog-title>CREATE DATAVERSE</p>
+    <mat-dialog-content>
+        <p>GIVE A NAME TO THE NEW DATAVERSE</p>
+    </mat-dialog-content>
+    <mat-form-field>
+        <input matInput tabindex="0" [(ngModel)]="data.dataverseName">
+    </mat-form-field>
+    </div>
+    <div mat-dialog-actions>
+    <button mat-button [mat-dialog-close]="data.dataverseName" (click)="onClick()" tabindex="1">CREATE</button>
+    <button mat-button (click)="onNoClick()" tabindex="2">CANCEL</button>
+</div>
+
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.scss
new file mode 100755
index 0000000..6371068
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-create-dialog.component.scss
@@ -0,0 +1,18 @@
+/*
+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.
+*/
+.dataverse-dialog {    
+    font-family: "Roboto Mono", monospace;
+    font-size: 0.80rem;
+    font-weight: 500;
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.html
new file mode 100755
index 0000000..b546a70
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.html
@@ -0,0 +1,26 @@
+<!--/*
+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.
+*/-->
+<div class="dataverse-dialog">
+    <p mat-dialog-title>DROP DATAVERSE</p>
+    <mat-dialog-content>
+        <p>PLEASE GIVE THE NAME OF THE DATAVERSE TO DROP</p>
+    </mat-dialog-content>
+        <mat-form-field>
+            <input matInput tabindex="0" [(ngModel)]="data.dataverseName">
+        </mat-form-field>
+    <mat-dialog-actions>
+        <button mat-button (click)="onClick()" tabindex="1">DROP</button>
+        <button mat-button (click)="onNoClick()" tabindex="2">CANCEL</button>
+    </mat-dialog-actions>
+</div>
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.scss
new file mode 100755
index 0000000..6371068
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses-drop-dialog.component.scss
@@ -0,0 +1,18 @@
+/*
+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.
+*/
+.dataverse-dialog {    
+    font-family: "Roboto Mono", monospace;
+    font-size: 0.80rem;
+    font-weight: 500;
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.html
new file mode 100755
index 0000000..4099704
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.html
@@ -0,0 +1,77 @@
+<!--/*
+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.
+*/ -->
+<div class="container" (click)="onClick()">
+  <div class="master">
+    <mat-card class="dataverses-card">
+      <mat-toolbar color="primary" class="dataverses-selector">
+          <mat-icon class="icon">menu</mat-icon>
+          <span>DATAVERSES - METADATA</span>
+          <span class="spacer"></span>
+      </mat-toolbar>
+      <mat-card-content class="dataverses-content">
+        <mat-table #table [dataSource]="dataSource" class="dataverses-table" *ngIf="loaded$ | async as ld">
+            <!-- Dataverse Name Column -->
+            <ng-container matColumnDef="DataverseName">
+              <mat-header-cell *matHeaderCellDef class="header-name-cell">Dataverse Name</mat-header-cell>
+              <mat-cell *matCellDef="let element" class="dataverse-name-cell">{{element.DataverseName}}</mat-cell>
+            </ng-container>
+
+            <!-- Data Format Column -->
+            <ng-container matColumnDef="DataFormat">
+              <mat-header-cell *matHeaderCellDef class="header-dataformat-cell">Data Format</mat-header-cell>
+              <mat-cell *matCellDef="let element" class="dataverse-dataformat-cell">{{element.DataFormat}}</mat-cell>
+            </ng-container>
+
+            <!-- Pending Ops -->
+            <ng-container matColumnDef="PendingOp">
+              <mat-header-cell *matHeaderCellDef class="header-pendingop-cell">Pending Ops</mat-header-cell>
+              <mat-cell *matCellDef="let element" class="dataverse-pendingop-cell">{{element.PendingOp}}</mat-cell>
+            </ng-container>
+
+            <!-- Timestamp Column -->
+            <ng-container matColumnDef="Timestamp">
+              <mat-header-cell *matHeaderCellDef class="header-timestamp-cell">Timestamp</mat-header-cell>
+              <mat-cell *matCellDef="let element" class="dataverse-timestamp-cell">{{element.Timestamp}}</mat-cell>
+            </ng-container>
+
+            <mat-header-row *matHeaderRowDef="['DataverseName',  'DataFormat', 'Timestamp']"></mat-header-row>
+            <mat-row *matRowDef="let row; columns: ['DataverseName', 'DataFormat', 'Timestamp'];"
+              [ngClass]="{'highlight': selectedRowIndex == row.id}"
+              (click)="highlight(row)">
+            </mat-row>
+        </mat-table>
+      </mat-card-content>
+      <mat-card-actions class="actions">
+          <button class="refresh-button" mat-button (click)="openCreateDataverseDialog()">CREATE</button>
+          <button class="refresh-button" mat-button (click)="openDropDataverseDialog()">DROP</button>
+          <span class="error-message">{{errorMessage}}</span>
+          <span class="spacer"></span>
+          <button class="refresh-button" mat-button (click)="getDataverse()">REFRESH</button>
+      </mat-card-actions>
+    </mat-card>
+  <awc-query-metadata #querymetadata class="query"></awc-query-metadata>  
+  </div>
+  <div class="detail">
+      <mat-card class="dataverses-details-card">
+          <mat-toolbar color="primary" class="dataverses-selector">
+              <mat-icon class="icon">menu</mat-icon>
+              <span>DATAVERSE - METADATA - DETAILS</span>
+              <span class="spacer"></span>
+          </mat-toolbar>
+          <mat-card-content class="dataverses-content output">
+            <span><pre>{{output}}</pre></span>
+          </mat-card-content>
+        </mat-card>
+  </div>
+</div>
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.scss
new file mode 100755
index 0000000..2821766
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.scss
@@ -0,0 +1,259 @@
+/*
+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.
+*/
+$dataverses-spacing-unit: 8px;
+
+.container {
+  display: flex;
+	flex-flow: row;
+	padding: 0;
+  margin: 0;
+}
+
+.master {
+  width: 60%;
+}
+
+.detail {
+  width: 40%;
+}
+
+.dataverses-card {
+  display: flex;
+	flex-flow: column;
+  padding: 0;
+  margin:0 auto;
+  margin-top: ($dataverses-spacing-unit * 2);
+  min-height: 450px;
+  max-height: 450px;
+  //min-width: 98%; //(100vw / 2);
+  //max-width: 98%; // (100vw / 2);
+  width: 95%; // 98%;
+  overflow: hidden;
+}
+
+.dataverses-details-card {
+	display: flex;
+	flex-flow: column;
+  padding: 0;
+  margin:0 auto;
+  margin: ($dataverses-spacing-unit * 2);
+  min-height: 716px;
+  max-height: 716px;
+  //min-width: 95%; //(100vw / 2);
+  //max-width: 95%; // (100vw / 2);
+  overflow: hidden;
+}
+
+.icon {
+	padding: 0 14px 0 0;
+	margin: 0;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.dataverses-selector {
+	min-height: 42px;
+	max-height: 42px;
+	justify-content: center;
+	font-size: 0.80rem;
+  font-weight: 500;
+  background-color: white;
+	border: 1px solid rgba(54, 147, 209, 0.87);
+}
+
+//.metadata-content-area {
+//	padding: ($dataverses-spacing-unit * 2);
+//	margin: 0;
+//	overflow: auto;
+//}
+
+
+.dataverses-content {
+  position:relative;
+  top: 0;
+  left: 0;
+  margin: 0px;
+  padding: 0px;
+  overflow: auto;
+}
+
+.dataverses-table {
+  margin: $dataverses-spacing-unit !important;
+  height: 330px;
+  overflow: auto;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.example-header {
+  min-height: 64px;
+  display: flex;
+  align-items: center;
+  padding-left: 24px;
+  font-size: 20px;
+}
+
+.mat-table {
+  overflow: auto;
+}
+
+.customWidthClass{
+   flex: 0 0 75px;
+}
+
+.mat-column-DataverseName {
+  text-align: left;
+}
+
+.mat-header-cell.mat-column-DataverseName {
+  text-align: left;
+}
+
+.mat-cell.mat-column-DataverseName {
+  text-align: left;
+}
+
+.header-name-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $dataverses-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($dataverses-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+  text-transform: uppercase;
+}
+
+.header-dataformat-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $dataverses-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($dataverses-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 400px;
+  text-transform: uppercase;
+}
+
+.header-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $dataverses-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($dataverses-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+  text-transform: uppercase;
+}
+
+.dataverse-name-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $dataverses-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($dataverses-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+}
+
+.dataverse-dataformat-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $dataverses-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($dataverses-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 400px;
+}
+
+.dataverse-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $dataverses-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($dataverses-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.example-header {
+  min-height: 56px;
+  max-height: 56px;
+  display: flex;
+  align-items: center;
+  padding: 8px 24px 0;
+  font-size: 20px;
+  justify-content: space-between;
+  border-bottom: 1px solid transparent;
+}
+
+.mat-form-field {
+  font-size: 14px;
+  flex-grow: 1;
+  margin-top: 8px;
+}
+
+.example-no-results {
+  display: flex;
+  justify-content: center;
+  padding: 24px;
+  font-size: 12px;
+  font-style: italic;
+}
+
+.actions {
+  display: flex;
+  border-top: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(54, 147, 209, 0.87);
+  padding: $dataverses-spacing-unit;
+  margin: 0;
+}
+
+.error-message {
+  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(209, 54, 54, 0.87);
+  padding-top: 10px;  
+  padding-left: 20px;
+  text-overflow: ellipsis;
+}
+
+.highlight{
+  background: #42A948; /* green */
+}
+
+.output {
+  padding-left: ($dataverses-spacing-unit * 2);
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.ts
new file mode 100755
index 0000000..981f029
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/dataverses-collection/dataverses.component.ts
@@ -0,0 +1,234 @@
+/*
+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.
+*/
+import { Component, ChangeDetectionStrategy, Inject, OnInit, AfterViewChecked, AfterViewInit, Input} from '@angular/core';
+import { Dataverse } from '../../../shared/models/asterixDB.model'
+import { Store } from '@ngrx/store';
+import { Observable } from 'rxjs/Observable';
+import * as dataverseActions from '../../../shared/actions/dataverse.actions'
+import { ElementRef, ViewChild} from '@angular/core';
+import { DataSource } from '@angular/cdk/collections';
+import { BehaviorSubject } from 'rxjs/BehaviorSubject';
+import 'rxjs/add/operator/startWith';
+import 'rxjs/add/observable/merge';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/debounceTime';
+import 'rxjs/add/operator/distinctUntilChanged';
+import 'rxjs/add/observable/fromEvent';
+import { Subscription } from "rxjs/Rx";
+import * as fromRoot from '../../../shared/reducers/dataverse.reducer';
+import { State } from '../../../shared/reducers/dataverse.reducer';
+import { MatPaginator } from '@angular/material';
+import { SelectionModel } from '@angular/cdk/collections';
+import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
+
+@Component({
+  selector: 'awc-dataverses',
+  templateUrl: 'dataverses.component.html',
+  styleUrls: ['dataverses.component.scss'],
+})
+
+export class DataverseCollection implements OnInit, AfterViewChecked, AfterViewInit {
+  dataverseName: string;
+  displayedColumns = ['DataverseName', 'Dataformat', 'Timestamp', 'PendingOp'];
+  dataSource: DataversesDataSource | null;
+  loaded$: Observable<any>;
+  selection = new SelectionModel<string>(true, []);
+  @Input('message') errorMessage: string = ""
+  dvName = "";
+
+  constructor(private store: Store<any>, public dialog: MatDialog) {
+    this.loaded$ = this.store.select('dataverse');
+    
+    // Watching the name of the latest created dataset
+    this.store.select(s => s.dataverse.createDataverseName).subscribe((data: any) => {
+      this.dvName = data;
+    })
+
+    // Watching for the success message in a drop dataset operation 
+    this.store.select(s => s.dataverse.dropDataverseName).subscribe((data: any) => {
+      this.dvName = data;
+    })
+
+    // Watching for the if there is a change in the collection
+		this.store.select(s => s.dataverse.createDataverseSuccess).subscribe((data: any) => {
+      if (data === true) {
+        this.getDataverse();
+        this.errorMessage = "SUCCEED: CREATED DATAVERSE " + this.dvName + " ";
+      }  
+    })
+
+    // Watching for the if there is a error in a create dataverse operation 
+		this.store.select(s => s.dataverse.createDataverseError).subscribe((data: any) => {
+      if (data.errors) {
+        this.errorMessage = "ERROR: " + data.errors[0].msg;
+      }  
+    })
+
+    // Watching for the if there is a change in the collection
+		this.store.select(s => s.dataverse.dropDataverseSuccess).subscribe((data: any) => {
+      if (data === true) {
+        this.getDataverse();
+        this.errorMessage = "SUCCEED: DROP DATAVERSE " + this.dvName;
+      }  
+    })
+
+    // Watching for the if there is a error in a drop dataverse operation 
+		this.store.select(s => s.dataverse.dropDataverseError).subscribe((data: any) => {
+      if (data.errors) {
+        this.errorMessage = "ERROR: " + data.errors[0].msg;
+      }  
+    })
+  }
+
+  getDataverse() {
+    // Triggers the effect to refresg the dataverse
+    this.store.dispatch(new dataverseActions.SelectDataverses('-'));
+  }
+
+  ngOnInit() {
+    // Assign the datasource for the table 
+    this.dataSource = new DataversesDataSource(this.store);
+  }
+
+  ngAfterViewChecked() {}
+
+  ngAfterViewInit() {}
+
+
+  /* 
+  * opens the create dataverse dialog
+  */
+  openCreateDataverseDialog(): void {
+    let dialogRef = this.dialog.open(DialogCreateDataverse, {
+      width: '420px',
+      data: { name: this.dataverseName }
+    });
+
+    dialogRef.afterClosed().subscribe(result => {
+      //reference code
+      //this.dvName = result;
+    });
+  }
+
+  /* 
+  * opens the drop dataverse dialog
+  */
+  openDropDataverseDialog(): void {
+    let dialogRef = this.dialog.open(DialogDropDataverse, {
+      width: '420px',
+      data: { name: this.dataverseName }
+    });
+
+    dialogRef.afterClosed().subscribe(result => {
+      this.dataverseName = result;
+    });
+  }
+
+   /* 
+  * Clean up the error message on the screen
+  */
+  onClick(): void {
+    this.errorMessage = "";
+  }
+
+  selectedRowIndex: number = -1;
+
+  /* Showing all the datatype metadata information */
+  output: any;
+  
+  highlight(row){
+    this.output = JSON.stringify(row, null, 2);
+  }
+
+  @ViewChild('querymetadata') inputQuery;
+
+  /* Cleans up error message */
+  cleanUp() {
+    this.errorMessage = "";   
+    // Cascading   
+    this.inputQuery.cleanUp();  
+  }
+}
+
+@Component({
+  selector: 'dataverse-create-dialog',
+  templateUrl: 'dataverses-create-dialog.component.html',
+  styleUrls: ['dataverses-create-dialog.component.scss']
+})
+
+export class DialogCreateDataverse {
+  constructor(  private store: Store<any>,
+                public dialogCreateDvRef: MatDialogRef<DialogCreateDataverse>,
+                @Inject(MAT_DIALOG_DATA) public data: any) { }
+
+  onClick(): void {
+    this.store.dispatch(new dataverseActions.CreateDataverse(this.data.dataverseName));
+    this.dialogCreateDvRef.close(this.data.dataverseName);
+  }
+
+  onNoClick(): void {
+    this.dialogCreateDvRef.close();
+  }
+}
+
+@Component({
+  selector: 'dataverse-drop-dialog',
+  templateUrl: 'dataverses-drop-dialog.component.html',
+  styleUrls: ['dataverses-drop-dialog.component.scss']
+})
+
+export class DialogDropDataverse {
+  constructor(  private store: Store<any>,
+                public dialogDropDvRef: MatDialogRef<DialogDropDataverse>,
+                @Inject(MAT_DIALOG_DATA) public data: any) { }
+
+  onClick(): void {
+    this.store.dispatch(new dataverseActions.DropDataverse(this.data.dataverseName));
+    this.dialogDropDvRef.close(this.data.dataverseName);
+  }
+
+  onNoClick(): void {
+    this.dialogDropDvRef.close();
+  }
+}
+
+/**
+ * Data source to provide what data should be rendered in the table. Note that the data source
+ * can retrieve its data in any way. In this case, the data source is provided a reference
+ * to a common data base, ExampleDatabase. It is not the data source's responsibility to manage
+ * the underlying data. Instead, it only needs to take the data and send the table exactly what
+ * should be rendered.
+ */
+ export class DataversesDataSource extends DataSource<any> {
+    dataverse$: Observable<any>
+    _filterChange = new BehaviorSubject('');
+    get filter(): string { return this._filterChange.value; }
+    set filter(filter: string) { this._filterChange.next(filter); }
+
+    constructor(private store: Store<any>) {
+      super();
+      this.dataverse$ = this.store.select(s => s.dataverse.dataverses.results);
+    }
+
+    /** Connect function called by the table to retrieve one stream containing the data to render. */
+    connect(): Observable<Dataverse[]> {
+        const displayDataChanges = [
+          this.dataverse$,
+        ];
+
+      return this.dataverse$;
+    }
+
+    disconnect() {}
+  }
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.html
new file mode 100755
index 0000000..aca06fd
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.html
@@ -0,0 +1,14 @@
+<!--/*
+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.
+*/-->
+<!-- Place holder for future expansion -->
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.scss
new file mode 100755
index 0000000..039dcf1
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-create-dialog.component.scss
@@ -0,0 +1,18 @@
+/*
+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.
+*/
+.index-dialog {    
+    font-family: "Roboto Mono", monospace;
+    font-size: 0.80rem;
+    font-weight: 500;
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.html
new file mode 100755
index 0000000..5e675d8
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.html
@@ -0,0 +1,26 @@
+<!--/*
+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.
+*/-->
+<div class="index-dialog">
+    <p mat-dialog-title>DROP INDEX</p>
+    <mat-dialog-content>
+        <p>PLEASE GIVE THE DATAVERSENAME.INDEXNAME OF THE INDEX TO DROP</p>
+    </mat-dialog-content>
+        <mat-form-field>
+            <input matInput tabindex="0" [(ngModel)]="data.indexName">
+        </mat-form-field>
+    <mat-dialog-actions>
+        <button mat-button (click)="onClick()" tabindex="1">DROP</button>
+        <button mat-button (click)="onNoClick()" tabindex="2">CANCEL</button>
+    </mat-dialog-actions>
+</div>
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.scss
new file mode 100755
index 0000000..039dcf1
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/index-drop-dialog.component.scss
@@ -0,0 +1,18 @@
+/*
+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.
+*/
+.index-dialog {    
+    font-family: "Roboto Mono", monospace;
+    font-size: 0.80rem;
+    font-weight: 500;
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.html
new file mode 100755
index 0000000..c63b254
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.html
@@ -0,0 +1,94 @@
+<!--/*
+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.
+*/ -->
+<div class="container"  (click)="onClick()">
+  <div class="master">
+    <mat-card class="indexes-card" *ngIf="loaded$ | async as ld">
+      <mat-toolbar color="primary" class="indexes-selector">
+          <mat-icon class="icon">menu</mat-icon>
+          <span>INDEXES - METADATA</span>
+          <span class="spacer"></span>
+      </mat-toolbar>
+      <mat-card-content class="indexes-content">
+        <mat-table #table [dataSource]="dataSource" class="indexes-table">
+            <!-- Dataverse Name -->
+            <ng-container matColumnDef="DataverseName">
+              <mat-header-cell *matHeaderCellDef class="header-dataversename-cell"> Dataverse Name </mat-header-cell>
+              <mat-cell *matCellDef="let element" class="indexes-dataversename-cell"> {{element.DataverseName}} </mat-cell>
+            </ng-container>
+
+            <!-- Dataset Name -->
+            <ng-container matColumnDef="DatasetName">
+              <mat-header-cell *matHeaderCellDef class="header-datasetname-cell"> Dataset Name </mat-header-cell>
+              <mat-cell *matCellDef="let element" class="indexes-datasetname-cell"> {{element.DatasetName}} </mat-cell>
+            </ng-container>
+
+            <!-- Index Name -->
+            <ng-container matColumnDef="IndexName">
+              <mat-header-cell *matHeaderCellDef class="header-indexname-cell"> Index Name </mat-header-cell>
+              <mat-cell *matCellDef="let element" class="indexes-indexname-cell"> {{element.IndexName}} </mat-cell>
+            </ng-container>
+
+            <!-- Index Structure -->
+            <ng-container matColumnDef="IndexStructure">
+              <mat-header-cell *matHeaderCellDef class="header-indexestructure-cell"> Index Structure </mat-header-cell>
+              <mat-cell *matCellDef="let element" class="indexes-indexstructure-cell"> {{element.IndexStructure}} </mat-cell>
+            </ng-container>
+
+            <!-- IsPrimary  -->
+            <ng-container matColumnDef="IsPrimary">
+              <mat-header-cell *matHeaderCellDef class="header-isprimary-cell"> Is Primary </mat-header-cell>
+              <mat-cell *matCellDef="let element" class="indexes-isprimary-cell"> {{element.IsPrimary}} </mat-cell>
+            </ng-container>
+
+            <!-- Timestamp Column -->
+            <ng-container matColumnDef="Timestamp">
+              <mat-header-cell *matHeaderCellDef class="header-timestamp-cell"> Timestamp </mat-header-cell>
+              <mat-cell *matCellDef="let element" class="indexes-timestamp-cell"> {{element.Timestamp}} </mat-cell>
+            </ng-container>
+
+            <!-- Pending Op Column -->
+            <ng-container matColumnDef="PendingOp">
+              <mat-header-cell *matHeaderCellDef class="header-pendingop-cell"> PendingOp </mat-header-cell>
+              <mat-cell *matCellDef="let element" class="indexes-dataverse-cell"> {{element.PendingOp}} </mat-cell>
+            </ng-container>
+
+            <mat-header-row *matHeaderRowDef="['IndexName', 'DatasetName', 'DataverseName', 'IndexStructure', 'IsPrimary', 'Timestamp']"></mat-header-row>
+            <mat-row *matRowDef="let row; columns: ['IndexName', 'DatasetName', 'DataverseName', 'IndexStructure', 'IsPrimary', 'Timestamp'];"
+              [ngClass]="{'highlight': selectedRowIndex == row.id}"
+              (click)="highlight(row)">
+            </mat-row>
+        </mat-table>
+      </mat-card-content>
+      <mat-card-actions class="actions">
+          <button class="refresh-button" mat-button (click)="openDropIndexDialog()">DROP</button>
+          <span class="error-message">{{errorMessage}}</span>
+          <span class="spacer"></span>
+          <button class="refresh-button" mat-button (click)="getIndexes()">REFRESH</button>
+      </mat-card-actions>
+    </mat-card>
+    <awc-query-metadata #querymetadata class="query"></awc-query-metadata>  
+  </div>
+  <div class="detail">
+      <mat-card class="indexes-details-card">
+          <mat-toolbar color="primary" class="indexes-selector">
+              <mat-icon class="icon">menu</mat-icon>
+              <span>INDEX - METADATA - DETAILS</span>
+              <span class="spacer"></span>
+          </mat-toolbar>
+          <mat-card-content class="indexes-content output">
+            <span><pre>{{output}}</pre></span>
+          </mat-card-content>
+        </mat-card>
+  </div>
+</div>
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.scss
new file mode 100755
index 0000000..15b364a
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.scss
@@ -0,0 +1,398 @@
+/*
+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.
+*/
+$indexes-spacing-unit: 8px;
+
+.container {
+  display: flex;
+	flex-flow: row;
+	padding: 0;
+  margin: 0;
+}
+
+.master {
+  width: 60%;
+}
+
+.detail {
+  width: 40%;
+}
+
+.indexes-card {
+	display: flex;
+	flex-flow: column;
+  padding: 0;
+  margin:0 auto;
+  margin-top: ($indexes-spacing-unit * 2);
+  min-height: 450px;
+  max-height: 450px;
+  //min-width: 98%; //(100vw / 2);
+  //max-width: 98%; // (100vw / 2);
+  width: 95%; // 98%;
+  overflow: hidden;
+}
+
+.indexes-details-card {
+	display: flex;
+	flex-flow: column;
+  padding: 0;
+  margin:0 auto;
+  margin: ($indexes-spacing-unit * 2);
+  min-height: 716px;
+  max-height: 716px;
+  //min-width: 95%; //(100vw / 2);
+  //max-width: 95%; // (100vw / 2);
+  overflow: hidden;
+}
+
+.icon {
+	padding: 0 14px 0 0;
+	margin: 0;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.indexes-selector {
+	min-height: 42px;
+	max-height: 42px;
+	justify-content: center;
+	//align-items: center;
+	font-size: 0.80rem;
+  font-weight: 500;
+  background-color: white;
+	border: 1px solid rgba(54, 147, 209, 0.87);
+}
+
+.indexes-content {
+  position:relative;
+  top: 0;
+  left: 0;
+  margin: 0px;
+  padding: 0px;
+  overflow: auto;
+}
+
+.indexes-table {
+  margin: $indexes-spacing-unit !important;
+  height: 330px;
+  overflow: auto;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+//.indexes-toolbar {
+//	display: block;
+//  min-height: 56px;
+//	height: 56px;
+	//width: 250px;
+//  font-size: 12px;
+//  white-space: nowrap;
+//  overflow: hidden;
+//  text-overflow: ellipsis;
+//	letter-spacing: 1px;
+//	font-weight: 400;
+//	background: rgba(0,0,1, .80);
+//}
+
+.example-header {
+  min-height: 64px;
+  display: flex;
+  align-items: center;
+  padding-left: 24px;
+  font-size: 20px;
+}
+
+.mat-table {
+  overflow: auto;
+}
+
+.customWidthClass{
+   flex: 0 0 75px;
+}
+
+.mat-column-DataverseName {
+  text-align: left;
+}
+
+.mat-header-cell.mat-column-DataverseName {
+  text-align: left;
+}
+
+.mat-cell.mat-column-DataverseName {
+  text-align: left;
+}
+
+.header-dataversename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 150px;
+}
+
+.indexes-dataversename-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+}
+
+.header-datasetname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 150px;
+}
+
+.indexes-datasetname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+}
+
+.header-indexname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 150px;
+}
+
+.indexes-indexname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+}
+
+.header-indexestructure-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: center;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 150px;
+}
+
+.indexes-indexstructure-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: center;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+}
+
+.header-isprimary-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: center;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 150px;
+}
+
+.indexes-isprimary-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: center;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+}
+
+.header-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 150px;
+}
+
+.indexes-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+}
+
+.header-groupname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 150px;
+}
+
+.indexes-groupname-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 150px;
+}
+
+.header-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  text-transform: uppercase;
+  flex: 0 0 250px;
+}
+
+.indexes-timestamp-cell {
+  border: none;
+  font-size: 12px;
+  letter-spacing: 1px;
+  line-height: $indexes-spacing-unit * 3;
+  font-weight: 400;
+  margin: 0;
+  padding: 0 ($indexes-spacing-unit * 2);
+  text-align: left;
+  color: hsla(0,0%,0%,.87);
+  flex: 0 0 250px;
+}
+
+.example-header {
+  min-height: 56px;
+  max-height: 56px;
+  display: flex;
+  align-items: center;
+  padding: 8px 24px 0;
+  font-size: 20px;
+  justify-content: space-between;
+  border-bottom: 1px solid transparent;
+}
+
+.mat-form-field {
+  font-size: 14px;
+  flex-grow: 1;
+  margin-top: 8px;
+}
+
+.example-no-results {
+  display: flex;
+  justify-content: center;
+  padding: 24px;
+  font-size: 12px;
+  font-style: italic;
+}
+
+.actions {
+  display: flex;
+  border-top: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(54, 147, 209, 0.87);
+  padding: $indexes-spacing-unit;
+  margin: 0;
+}
+
+.error-message {
+  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(209, 54, 54, 0.87);
+  padding-top: 10px;  
+  padding-left: 20px;
+  text-overflow: ellipsis;
+}
+
+.output {
+  padding-left: ($indexes-spacing-unit * 2);
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.ts
new file mode 100755
index 0000000..2913470
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/indexes-collection/indexes.component.ts
@@ -0,0 +1,230 @@
+/*
+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.
+*/
+import { Component, Inject, Input } from '@angular/core';
+import { Index } from '../../../shared/models/asterixDB.model'
+import { Store } from '@ngrx/store';
+import { Observable } from 'rxjs/Observable';
+import * as indexActions from '../../../shared/actions/index.actions'
+import { ElementRef, ViewChild} from '@angular/core';
+import {DataSource} from '@angular/cdk/collections';
+import {BehaviorSubject} from 'rxjs/BehaviorSubject';
+import 'rxjs/add/operator/startWith';
+import 'rxjs/add/observable/merge';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/debounceTime';
+import 'rxjs/add/operator/distinctUntilChanged';
+import 'rxjs/add/observable/fromEvent';
+import { Subscription } from "rxjs/Rx";
+import { State } from '../../../shared/reducers/index.reducer';
+import { MatPaginator } from '@angular/material';
+import { SelectionModel } from '@angular/cdk/collections';
+import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
+
+/**
+ * Root component
+ * Defines our application's layout
+ */
+@Component({
+  selector: 'awc-indexes',
+  templateUrl: 'indexes.component.html',
+  styleUrls: ['indexes.component.scss']
+})
+
+export class IndexCollection {
+  displayedColumns = "['dataverseName', 'datasetName', 'indexName', 'indexStructure', 'isPrimary', 'timestamp', 'pendingOp']"
+  /*
+  dataverseName: string;
+  datasetName: string;
+  indexName: string;
+  indexStructure: string;
+  searchKey: string[];
+  isPrimary: boolean;
+  timestamp: string;
+  pendingOp: string;
+  */
+  indexName: string;
+  dataSource: IndexDataSource | null;
+  loaded$: Observable<any>;
+  @Input('message') errorMessage: string = ""
+  
+  idxName = "";
+
+  constructor(private store: Store<any>, public dialog: MatDialog) {
+    this.loaded$ = this.store.select('index');
+    // Watching the name of the latest create index
+    this.store.select(s => s.index.createIndexName).subscribe((data: any) => {
+      this.idxName = data;
+    })
+
+    // Watching the name of the latest drop index
+    this.store.select(s => s.index.dropIndexName).subscribe((data: any) => {
+      this.idxName = data;
+    })
+
+    // Watching for the if there is a change in the collection
+		this.store.select(s => s.index.createIndexSuccess).subscribe((data: any) => {
+      if (data === true) {
+        this.getIndexes();
+        this.errorMessage = "SUCCEED: CREATE INDEX " + this.idxName;
+      }  
+    })
+
+    // Watching for the if there is a error in a create index operation 
+		this.store.select(s => s.index.createIndexError).subscribe((data: any) => {
+      if (data.errors) {
+        this.errorMessage = "ERROR: " + data.errors[0].msg;
+      }  
+    })
+
+    // Watching for the success message in a drop index operation 
+    this.store.select(s => s.index.dropIndexSuccess).subscribe((data: any) => {
+      if (data === true) {
+        this.getIndexes();
+        this.errorMessage = "SUCCEED: DROP INDEX " + this.idxName;
+      }  
+    })
+
+    // Watching for the if there is a error in a drop index operation 
+		this.store.select(s => s.index.dropIndexError).subscribe((data: any) => {
+      if (data.errors) {
+        this.errorMessage = "ERROR: " + data.errors[0].msg;
+      }  
+    })
+  }
+
+  getIndexes() {
+    // Triggers the effect to refresg the indexes
+    this.store.dispatch(new indexActions.SelectIndexes('-'));
+  }
+
+  ngOnInit() {
+    // Assign the datasource for the table 
+    this.dataSource = new IndexDataSource(this.store);
+  }  
+
+  /* 
+  * opens the create index dialog
+  */
+  openCreateIndexDialog(): void {
+    let dialogRef = this.dialog.open(DialogCreateIndex, {
+      width: '420px',
+      data: { name: this.indexName }
+    });
+
+    dialogRef.afterClosed().subscribe(result => {
+      this.indexName = result;
+    });
+  }
+
+
+   /* 
+  * opens the drop index dialog
+  */
+  openDropIndexDialog(): void {
+    let dialogRef = this.dialog.open(DialogDropIndex, {
+      width: '420px',
+      data: { name: this.indexName }
+    });
+
+    dialogRef.afterClosed().subscribe(result => {
+      this.indexName = result;
+    });
+  }
+
+  /* 
+  * Clean up the error message on the screen
+  */
+  onClick(): void {
+    this.errorMessage = "";
+  }
+
+   /* Showing all the index metadata information */
+   output: any;
+   
+   highlight(row){
+     this.output = JSON.stringify(row, null, 2);
+   }
+
+  @ViewChild('querymetadata') inputQuery;
+
+  /* Cleans up error message */
+  cleanUp() {
+    this.errorMessage = ""; 
+    // Cascading   
+    this.inputQuery.cleanUp(); 
+  }
+}
+
+@Component({
+  selector: 'index-create-dialog',
+  templateUrl: 'index-create-dialog.component.html',
+  styleUrls: ['index-create-dialog.component.scss']
+})
+
+export class DialogCreateIndex {
+  constructor(  private store: Store<any>,
+                public dialogCreateIdxRef: MatDialogRef<DialogCreateIndex>,
+                @Inject(MAT_DIALOG_DATA) public data: any) { }
+
+  onClick(): void {
+    this.store.dispatch(new indexActions.CreateIndex(this.data.indexName));
+    this.dialogCreateIdxRef.close();
+  }
+
+  onNoClick(): void {
+    this.dialogCreateIdxRef.close();
+  }
+}
+
+@Component({
+  selector: 'index-drop-dialog',
+  templateUrl: 'index-drop-dialog.component.html',
+  styleUrls: ['index-drop-dialog.component.scss']
+})
+
+export class DialogDropIndex {
+  constructor(  private store: Store<any>,
+                public dialogDropIdxRef: MatDialogRef<DialogDropIndex>,
+                @Inject(MAT_DIALOG_DATA) public data: any) { }
+
+  onClick(): void {
+    console.log(this.data.indexName)
+    this.store.dispatch(new indexActions.DropIndex(this.data.indexName));
+    this.dialogDropIdxRef.close();
+  }
+
+  onNoClick(): void {
+    this.dialogDropIdxRef.close();
+  }
+}
+
+export class IndexDataSource extends DataSource<any> {
+  private indexes$: Observable<any>
+
+  constructor(private store: Store<any>) {
+    super();
+    this.indexes$ = this.store.select(s => s.index.indexes.results);
+  }
+
+  /** Connect function called by the table to retrieve one stream containing the data to render. */
+  connect(): Observable<Index[]> {
+      const displayDataChanges = [
+        this.indexes$,
+      ];
+
+    return this.indexes$;
+  }
+
+  disconnect() {}
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.html
new file mode 100755
index 0000000..939ab06
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.html
@@ -0,0 +1,31 @@
+<!--/*
+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.
+*/ -->
+<mat-card class="input-card" (click)="onClick()">
+    <mat-toolbar color="primary" class="input-selector">
+            <mat-icon class="toolbar-icon">menu</mat-icon>
+            <span>INPUT: SQL++</span>	
+            <span class="spacer"></span>
+    </mat-toolbar>
+    <mat-card-content class="content-area">
+        <div class="codemirror-container">
+           <codemirror-metadata class="code" [(ngModel)]="queryMetadataString" [config]="codemirrorMetadataConfig">
+            </codemirror-metadata>  
+        </div>
+    </mat-card-content>
+    <mat-card-actions class="actions">
+        <button mat-button class="query-button" (click)="executeQuery()">RUN</button>
+        <span class="error-message">{{errorMessage}}</span>
+        <span class="spacer"></span>
+    </mat-card-actions>
+</mat-card>
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.scss
new file mode 100755
index 0000000..b98080c
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.scss
@@ -0,0 +1,78 @@
+/*
+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.
+*/
+$query-spacing-unit: 8px;
+
+.input-card {
+	display: flex;
+	flex-flow: column;
+	padding: 0;
+	margin: 0 auto;
+	margin-top: $query-spacing-unit;
+	height: 250px;
+	width: 95%;
+	overflow: hidden;
+}
+  
+.toolbar-icon {
+	padding: 0 14px 0 0;	
+	margin: 0;
+}
+
+.spacer {
+	flex: 1 1 auto;
+}
+  
+.input-selector {
+	max-height: 42px;
+	min-height: 42px;
+	justify-content: center;
+	//align-items: center;
+	font-size: 0.80rem;
+	font-weight: 500;
+	background-color: white;
+	border: 1px solid rgba(54, 147, 209, 0.87);
+}
+
+.content-area {
+	position: relative;
+	color: hsla(0,0%,0%,.87);
+	height: 120px;
+	padding: 0;
+	margin: $query-spacing-unit * 2;
+	overflow: none;
+}
+
+.codemirror-container {
+	width: 100%;
+	height: 100%;
+	padding: 0;
+	margin: 0;
+	font-size: 14px;
+	line-height: 1.8;
+}
+
+.actions {
+	border-top: 1px solid rgba(0, 0, 0, 0.1);
+	color: rgba(54, 147, 209, 0.87);
+	padding: $query-spacing-unit;
+	margin: 0;
+}
+
+.error-message {
+	border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+	color: rgba(209, 54, 54, 0.87);
+	padding-top: 10px;  
+	padding-left: 20px;
+	text-overflow: ellipsis;
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.ts
new file mode 100755
index 0000000..06b9375
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/input-metadata.component.ts
@@ -0,0 +1,111 @@
+/*
+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.
+*/
+import { Component, ViewChild, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
+import { Observable } from 'rxjs/Observable';
+import { Store } from '@ngrx/store';
+import * as sqlQueryActions from '../../shared/actions/query.actions'
+import * as dataverseActions from '../../shared/actions/dataverse.actions'
+import * as datasetActions from '../../shared/actions/dataset.actions'
+import * as datatypeActions from '../../shared/actions/datatype.actions'
+import * as indexActions from '../../shared/actions/index.actions'
+
+
+import * as CodeMirror from 'codemirror';
+
+/*
+ * Query metadata component
+ * has editor (codemirror) for writing some query
+ */
+@Component({
+	moduleId: module.id,
+	selector: 'awc-query-metadata',
+	templateUrl:'input-metadata.component.html',
+	styleUrls: ['input-metadata.component.scss'],
+})
+
+export class InputQueryMetadataComponent {
+	private dataverses$: Observable<any>;
+	private datatypes$: Observable<any>;
+	private datasets$: Observable<any>;
+	private indexes$: Observable<any>;
+	dataverses = [];
+	datatypes = [];
+	datasets = [];
+	indexes = [];
+	queryMetadataString: string = "";
+	loaded$: Observable<any>;
+	errorMessage: string = "";
+
+  /**
+  * Initialize codemirror
+  */
+  codemirrorMetadataConfig = 	{ 	mode: "asterix",
+    //lineNumbers: true,
+    lineWrapping: true,
+    showCursorWhenSelecting: true,
+    autofocus: true
+  };
+
+	constructor(private store: Store<any>, private changeDetector: ChangeDetectorRef) {
+		this.store.select("sqlMetadataQuery").subscribe((data: any) => {
+			if (data.success === false){
+				if (data.sqlQueryMetadataError.errors){
+					this.errorMessage = "ERROR: " + data.sqlQueryMetadataError.errors[0].msg
+					this.changeDetector.detectChanges();
+				}
+			} else {
+				this.errorMessage = "SUCCEED";
+
+				// Refresh the tables automatically
+				let stringQuery = data.sqlQueryMetadataString;
+				stringQuery = stringQuery.toUpperCase();
+
+				if (stringQuery.includes("CREATE DATAVERSE") || stringQuery.includes("DROP DATAVERSE") ){
+    				this.store.dispatch(new dataverseActions.SelectDataverses('-'));
+				}
+				else if (stringQuery.includes("CREATE DATASET") || stringQuery.includes("DROP DATASET")){
+    				this.store.dispatch(new datasetActions.SelectDatasets('-'));
+				}
+				else if (stringQuery.includes("CREATE TYPE") || stringQuery.includes("DROP TYPE")){
+    				this.store.dispatch(new datatypeActions.SelectDatatypes('-'));
+				}
+				else if (stringQuery.includes("CREATE INDEX") || stringQuery.includes("DROP INDEX")){
+    				this.store.dispatch(new indexActions.SelectIndexes('-'));
+				}
+
+				this.changeDetector.detectChanges();
+			}
+
+		})
+	}
+
+	getQueryResults(queryMetadataString: string) {
+    	this.store.dispatch(new sqlQueryActions.ExecuteMetadataQuery(queryMetadataString));
+	  }
+
+	executeQuery() {
+		this.getQueryResults(this.queryMetadataString.replace(/\n/g, " "));
+		// Component View Refresh
+
+	}
+
+	onClick() {
+		this.errorMessage = "";
+	}
+
+	/* Cleans up error message */
+	cleanUp() {
+		this.errorMessage = "";
+	}
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.html
new file mode 100755
index 0000000..a2f3a73
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.html
@@ -0,0 +1,36 @@
+<!--/*
+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.
+*/ -->
+<mat-tab-group class="metadata-menu" (selectedTabChange)="tabChange()">
+    <mat-tab label="DATAVERSES" class="submenu">
+        <div class="dataverses">
+            <awc-dataverses #dataverses [message]="message" class="dataverses"></awc-dataverses>
+        </div>
+    </mat-tab>
+    <mat-tab label="DATASETS">
+        <div class="datasets">
+            <awc-datasets #datasets [message]="message" class="datasets"></awc-datasets>
+        </div>  
+    </mat-tab>
+    <mat-tab label="DATATYPES">
+        <div class="datatypes">
+            <awc-datatypes #datatypes [message]="message" class="datatypes"></awc-datatypes>
+        </div>
+    </mat-tab>
+    <mat-tab label="INDEXES" class="indexes">
+        <div class="indexes">
+            <awc-indexes #indexes [message]="message" class="indexes"></awc-indexes>
+        </div>
+    </mat-tab>
+</mat-tab-group>
+
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.scss
new file mode 100755
index 0000000..3857d74
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.scss
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+ .dataverses {
+    margin: 0;
+    min-height: 750px;
+    max-height: 750px;
+    width: 100%;
+    overflow: hidden;
+ }
+
+.datasets {
+    margin: 0;
+    min-height: 750px;
+    max-height: 750px;
+    width: 100%;
+    overflow: hidden;
+}
+
+.datatypes {
+    margin: 0;
+    min-height: 750px;
+    max-height: 750px;
+    width: 100%;
+    overflow: hidden;
+}
+
+.indexes {
+    margin: 0;
+    min-height: 750px;
+    max-height: 750px;
+    width: 100%;
+    overflow: hidden;
+}
+
+.metadata-menu {    
+    /deep/ .mat-tab-label {
+        font-size: 0.80rem !important;
+        font-weight: 500  !important;
+    }
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.ts
new file mode 100755
index 0000000..c8382cf
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/metadata/metadata-container.component.ts
@@ -0,0 +1,41 @@
+/*
+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.
+*/
+import { Component, ViewChild } from '@angular/core';
+
+@Component({
+	moduleId: module.id,
+	selector: 'awc-metadata-container',
+	templateUrl: 'metadata-container.component.html',
+	styleUrls: ['metadata-container.component.scss']
+})
+
+export class MetadataContainerComponent {
+
+	@ViewChild('dataverses') dataverses ;
+	@ViewChild('datasets') datasets ;
+	@ViewChild('datatypes') datatypes ;
+	@ViewChild('indexes') indexes ;
+	message = "";
+
+	constructor() {}
+
+	tabChange() {
+		this.indexes.cleanUp();
+		this.datasets.cleanUp();
+		this.datatypes.cleanUp();
+		this.dataverses.cleanUp();
+	}
+
+	
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.scss
new file mode 100755
index 0000000..ba795c2
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.scss
@@ -0,0 +1,23 @@
+/*
+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.
+*/
+/* -- Place holder for future expansion --> */
+code {
+	width: 100%;
+	height: 100%;
+	padding: 10%;
+    margin: 0; 
+    overflow-wrap: break-word;
+    word-break: break-all;
+    background-color: pink;
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.ts
new file mode 100755
index 0000000..91b711d
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/codemirror.component.ts
@@ -0,0 +1,237 @@
+/*
+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.
+*/
+/**
+ * Integrating codemirror (using ng2-codemirror) with our application
+ *
+ * component from "https://runkit.com/npm/ng2-codemirror"
+ *                "https://www.npmjs.com/package/ng2-codemirror"
+ * copy component from /src/codemirror.component.ts
+ * and modified for custom mode (asterix aql, sql++ code hilighting)
+ *
+ * therefore, actually we don't need to "npm install ng2-codemirror"
+ *
+ * Because on the outside of this component,
+ * It was hard to access the codemirror instance that 'ng-codemirror' use
+ * So, we copied the component in our application and modified it
+ *
+ * 'codemirror.js(^5.23.0)' is included in the 'index.html'
+ * And in this component(codemirror.component.ts)
+ * add statement like "declare var CodeMirror: any;"
+ *
+ * I don't know whether this is right way
+ *
+ * ref 1) usage : https://embed.plnkr.co/8e9gxss9u10VeFrv29Zt/
+ * ref 2) custom mode : http://jsfiddle.net/TcqAf/99/
+ * ref 3) integrating : http://stackoverflow.com/questions/37092142/integrating-codemirror-with-angular2-typescript
+ * ref 3) integrating :  https://medium.com/@s_eschweiler/using-external-libraries-with-angular-2-87e06db8e5d1#.8ok74uvwg
+ */
+ import {
+   Component,
+   Input,
+   Output,
+   ElementRef,
+   ViewChild,
+   EventEmitter,
+   forwardRef,
+   AfterViewInit,
+   OnDestroy
+ } from '@angular/core';
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
+ import * as CodeMirror from 'codemirror';
+
+/**
+ * CodeMirror component
+ * Usage :
+ * <codemirror [(ngModel)]="data" [config]="{...}"></codemirror>
+ */
+@Component({
+  moduleId: module.id,
+  selector: 'codemirror',
+  providers: [
+    {
+      provide: NG_VALUE_ACCESSOR,
+      useExisting: forwardRef(() => CodemirrorComponent),
+      multi: true
+    }
+  ],
+  styleUrls: ['codemirror.component.scss'],
+  template: `<textarea class="code" #host></textarea>`,//,
+})
+
+export class CodemirrorComponent implements AfterViewInit, OnDestroy {
+  @Input() config;
+  @Output() change = new EventEmitter();
+  @Output() focus = new EventEmitter();
+  @Output() blur = new EventEmitter();
+  @Output() instance = null;
+  @ViewChild('host') host;
+  _value = '';
+
+  /**
+   * Constructor
+   */
+  constructor(){
+		/**
+		 * Custom mode for AsterixDB
+		 */
+		CodeMirror.defineMode("asterix", function(){
+		  var KEYWORD_MATCH = [
+				// AQL
+				"drop", "dataverse", "dataset",
+				"if", "exists", "create",
+				"use", "type", "as", "closed",
+				"primary", "key",  "hints", "cardinality",
+				"index", "on", "btree", "rtree", "keyword",
+				"for", "in", "Metadata", "Dataset",
+				"return", "Index", "load", "using", "localfs", "path", "format",
+				// Query (not perfect)
+				"from", "in", "with", "group", "by", "select",
+				"let", "where", "order", "asc", "desc", "limit",
+				"keeping", "offset", "distinct", "or", "and",
+				// Built in functions (TODO)
+				// Built in functions (TODO)
+				// Built in functions (TODO)
+				// Asterix Data Model
+				// Primitive type
+				"boolean",
+				"tinyint", "smallint", "integer", "bigint",
+				"float", "double",
+				"string",
+				"binary", "hex", "base64",
+				"point", "line", "rectangle", "circle", "polygon",
+				"date", "time", "datetime", "duration", "interval", "uuid",
+				// Incomplete information type
+				"null", "missing",
+				// Derived type
+				// object {}, array [], multiset {{}}
+				// SQL++
+				"DROP", "DATAVERSE", "IF", "EXISTS", "CREATE", "USE", "TYPE", "AS", "DATASET", "PRIMARY", "KEY",
+				"INDEX", "SELECT", "VALUE", "INSERT", "INTO", "FROM", "WHERE", "AND", "SOME", "IN", "SATISFIES", "IS", "UNKNOWN", "NOT", "EVERY",
+				"GROUP", "BY", "ORDER", "DESC", "LIMIT", "OR", "SET", "DELETE", "LOAD", "USING",
+			];
+
+			//"(", ")","{{", "}}", "[", "]",	"{", "}",  ";", ",", ":","?", "=",
+      var VAR_MATCH = /[$][a-zA-Z]+(\d*)/;
+			var DOT_MATCH = /[.](\S)*/;
+			var DOUBLE_QUOTE_MATCH = /["].*["]/;
+			var SINGLE_QUOTE_MATCH = /['].*[']/;
+			var BREAK_POINT = /(\s)/;
+
+			return {
+				startState: function() {return {inString: false};},
+				token: function(stream, state) {
+					if (state.newLine == undefined)state.newLine = true;
+
+					//match variable reference
+					if (stream.match(VAR_MATCH)) {
+						return "variable";
+					}
+
+					if (stream.match(DOT_MATCH)) {
+						return "dot-variable";
+					}
+
+					//string variable match
+					if (stream.match(DOUBLE_QUOTE_MATCH)) {
+						return "string";
+					}
+					if (stream.match(SINGLE_QUOTE_MATCH)) {
+						return "string";
+					}
+
+					//keyword match
+					for (var i in KEYWORD_MATCH){
+						if (state.newLine && stream.match(KEYWORD_MATCH[i])){
+								return "keyword";
+						 }
+					}
+
+					if (stream.peek() === " " || stream.peek() === null){
+						state.newLine = true;
+					}else{
+						state.newLine = false;
+					}
+					stream.next();
+					return null;
+				}
+			};
+		});
+	}
+
+  get value() { return this._value; };
+
+  @Input() set value(v) {
+    if (v !== this._value) {
+      this._value = v;
+      this.onChange(v);
+    }
+  }
+
+  /**
+   * On component destroy
+   */
+  ngOnDestroy() {}
+
+  /**
+   * On component view init
+   */
+  ngAfterViewInit() {
+    this.config = this.config || {};
+    this.codemirrorInit(this.config);
+  }
+
+  /**
+   * Initialize codemirror
+   */
+  codemirrorInit(config){
+    this.instance = CodeMirror.fromTextArea(this.host.nativeElement, config);
+    this.instance.setValue(this._value);
+    this.instance.setSize(null, 90);
+    this.instance.on('change', () => {
+      this.updateValue(this.instance.getValue());
+    });
+
+    this.instance.on('focus', () => {
+      this.focus.emit();
+    });
+
+    this.instance.on('blur', () => {
+      this.blur.emit();
+    });
+  }
+
+  /**
+   * Value update process
+   */
+  updateValue(value){
+    this.value = value;
+    this.onTouched();
+    this.change.emit(value);
+  }
+
+  /**
+   * Implements ControlValueAccessor
+   */
+  writeValue(value){
+    this._value = value || '';
+    if (this.instance) {
+      this.instance.setValue(this._value);
+    }
+  }
+
+  onChange(_) {}
+  onTouched() {}
+  registerOnChange(fn){this.onChange = fn;}
+  registerOnTouched(fn){this.onTouched = fn;}
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/input.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/input.component.html
new file mode 100755
index 0000000..2eec6b7
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/input.component.html
@@ -0,0 +1,28 @@
+<!--/*
+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.
+*/ -->
+<mat-card class="input-card">
+	 <mat-toolbar color="primary" class="input-selector">
+			<mat-icon class="toolbar-icon">menu</mat-icon>
+			<span>INPUT: SQL++</span>	
+			<span class="spacer"></span>
+	</mat-toolbar>
+	<mat-card-content class="content-area">
+		<div class="codemirror-container">
+			<codemirror class="code" #host [(ngModel)]="queryString" [config]="codemirrorConfig"></codemirror>
+		</div>
+	</mat-card-content>
+	<mat-card-actions class="actions">
+		<button mat-button class="query-button" (click)="onClick()">RUN</button>
+	</mat-card-actions>
+</mat-card>
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/input.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/input.component.scss
new file mode 100755
index 0000000..437ff58
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/input.component.scss
@@ -0,0 +1,82 @@
+/*
+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.
+*/
+$query-spacing-unit: 5px;
+
+.input-card {
+	display: flex;
+	flex-flow: column;
+	padding: 0;
+	margin: ($query-spacing-unit * 2);
+	height: 200px;
+	width: 100%;
+	min-height: 150px; 
+
+	//background-color: orange;
+}
+  
+.toolbar-icon {
+	padding: 0 14px 0 0;	
+	margin: 0;
+}
+
+.spacer {
+	flex: 1 1 auto;
+}
+  
+.input-selector {
+	max-height: 42px;
+	min-height: 42px;
+	justify-content: center;
+	//align-items: center;
+	font-size: 0.80rem;
+	font-weight: 500;
+	background-color: white;
+	border: 1px solid rgba(54, 147, 209, 0.87);
+}
+
+.content-area {
+	//position: relative;
+	color: hsla(0,0%,0%,.87);
+	//height: 102px;
+	padding: 0;
+	margin: 0;
+	overflow: none;
+  }
+
+.codemirror-container {
+	width: 95%;
+	height: 98%;
+	padding: 0; // ($query-spacing-unit * 2);
+	margin: 0 auto;
+	font-size: 14px;
+	//letter-spacing: 3px;
+	line-height: 1.8;
+	background-color: red;
+}
+
+//.code {
+//	width: 100%;
+//	height: 100%;
+//	padding: 0;
+//	margin: 0; 
+//	overflow-wrap: break-word;
+//	word-break: break-all;
+//}
+
+.actions {
+	border-top: 1px solid rgba(0, 0, 0, 0.1);
+	color: rgba(54, 147, 209, 0.87);
+	padding-left: $query-spacing-unit;
+	margin: 0;
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/input.component.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/input.component.ts
new file mode 100755
index 0000000..9be9bd9
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/input.component.ts
@@ -0,0 +1,90 @@
+/*
+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.
+*/
+import { Component, ViewChild } from '@angular/core';
+import { Observable } from 'rxjs/Observable';
+import { Store } from '@ngrx/store';
+import * as sqlQueryActions from '../../shared/actions/query.actions'
+import * as CodeMirror from 'codemirror';
+
+/*
+ * query component
+ * has editor (codemirror) for writing some query
+ */
+@Component({
+	moduleId: module.id,
+	selector: 'awc-query',
+	templateUrl:'input.component.html',
+	styleUrls: ['input.component.scss']
+})
+
+export class InputQueryComponent {
+	private guideSelectedDataset$: Observable<any>;		
+	private dataverses$: Observable<any>;	
+	private datatypes$: Observable<any>;
+	private datasets$: Observable<any>;	
+	private indexes$: Observable<any>;	
+	dataverses = [];
+	datatypes = [];
+	datasets = [];
+	indexes = [];
+	datasetName = "";
+	dataverseName = "";
+	queryString: string = ""
+	
+	/* Codemirror configuration
+	*/
+	codemirrorConfig = 	{ 	mode: "asterix",
+							lineWrapping: true,
+							showCursorWhenSelecting: true,
+							autofocus: true
+						}	;
+
+	loaded$: Observable<any>
+
+	constructor(private store: Store<any>) {
+		// Watching for guide selected or clicked dataset
+		this.guideSelectedDataset$ = this.store.select(s => s.dataset.guideSelectsDataset);
+		this.guideSelectedDataset$.subscribe((data: any) => {
+			if (data) {
+				this.datasetName = data;
+				for (let i = 0; i < this.datasets.length; i++) {
+					if ( this.datasets[i]['DatasetName'] === this.datasetName ) {
+						this.dataverseName = this.datasets[i]['DataverseName'];
+					}
+				}
+				this.queryString = "USE " + this.dataverseName + "; SELECT * FROM " + this.datasetName;
+			}
+		});
+
+		// Watching for Datatypes
+		this.dataverses$ = this.store.select(s => s.dataverse.dataverses.results);
+		this.dataverses$.subscribe((data: any[]) => {
+			this.dataverses = data;
+		});
+
+		// Watching for Datasets
+		this.datasets$ = this.store.select(s => s.dataset.datasets.results);
+		this.datasets$.subscribe((data: any[]) => {
+			this.datasets = data;
+		});
+	}
+
+	getQueryResults(queryString: string) {
+    	this.store.dispatch(new sqlQueryActions.ExecuteQuery(queryString));
+  	}
+
+	onClick() {
+		this.getQueryResults(this.queryString.replace(/\n/g, " "));
+	}
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.html
new file mode 100755
index 0000000..4641426
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.html
@@ -0,0 +1,44 @@
+<!--/*
+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.
+*/ -->
+<mat-card class="metadata-card">
+  <mat-toolbar color="primary" class="metadata-selector">
+    <mat-icon class="example-icon">menu</mat-icon>
+    <span>METADATA GUIDE</span>
+    <span class="spacer"></span>
+  </mat-toolbar>
+    <div class="metadata-content-area">
+    <div class="metadata-tree">
+      <div class="metadata-all">
+          <p-tree [style]="{'width':'100%', 'border': 'none', 'font-family': 'Roboto Mono', 'font-size': '0.80rem',
+          'font-weight': '500'}" selectionMode="single" [value]="nodesAll" (onNodeSelect)="nodeSelectAll($event)"></p-tree>
+      </div>
+      <div class="metadata-datasets">
+          <p-tree [style]="{'width':'100%', 'border': 'none', 'font-family': 'Roboto Mono', 'font-size': '0.80rem',
+          'font-weight': '500'}" selectionMode="single" [value]="nodesDatasets" (onNodeSelect)="nodeSelectDataset($event)"></p-tree>
+      </div>
+      <div class="metadata-datatypes">
+          <p-tree [style]="{'width':'100%', 'border': 'none', 'font-family': 'Roboto Mono', 'font-size': '0.80rem',
+          'font-weight': '500'}" selectionMode="single" [value]="nodesDatatypes"></p-tree>
+      </div>
+      <div class="metadata-index">
+          <p-tree [style]="{'width':'100%', 'border': 'none', 'font-family': 'Roboto Mono', 'font-size': '0.80rem',
+          'font-weight': '500'}" selectionMode="single" [value]="nodesIndexes"></p-tree>
+      </div>
+
+    </div>
+  </div>
+  <!--<mat-card-actions class="actions">
+     <button mat-button class="refresh-button" (click)="menuRefresh()">COLLAPSE</button>
+  </mat-card-actions> -->
+</mat-card>
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.scss
new file mode 100755
index 0000000..4ee2339
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.scss
@@ -0,0 +1,97 @@
+/*
+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.
+*/
+$metadata-spacing-unit: 5px;
+
+.metadata-card {
+	display: flex;
+	flex-flow: column;
+	padding: 0;
+	margin: 0 auto; //($metadata-spacing-unit * 2);
+	margin-top: ($metadata-spacing-unit * 2);
+	margin-bottom: ($metadata-spacing-unit * 2);
+	min-height: 150px;
+	box-shadow: none !important;
+	width: 92%;
+	overflow: hidden;
+}
+
+.example-icon {
+	padding: 0 14px 0 0;
+	margin: 0;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.metadata-selector {
+	min-height: 42px;
+	max-height: 42px;
+	justify-content: center;
+	//align-items: center;
+	font-size: 0.80rem;
+	font-weight: 500;
+	background-color: white;
+	border: 1px solid rgba(54, 147, 209, 0.87);
+}
+
+.metadata-content-area {
+	padding: ($metadata-spacing-unit * 2);
+	margin: 0;
+}
+
+.metadata-tree {
+	min-height: 30px;
+	font-size: 0.80rem;
+	font-weight: 500;
+}
+
+.metadata-datasets {
+	margin-top: ($metadata-spacing-unit * 2);
+	margin-bottom: ($metadata-spacing-unit * 2);
+}
+
+.metadata-datatypes {
+	margin-top: ($metadata-spacing-unit * 2);
+	margin-bottom: ($metadata-spacing-unit * 2);
+}
+
+.metadata-dataindexes {
+	margin-top: ($metadata-spacing-unit * 2);
+	margin-bottom: ($metadata-spacing-unit * 2);
+}
+
+
+.metadata-tree.ui-tree {
+	//width: 260px !important;
+	font-size: 0.80rem;
+	font-weight: 500;
+	border: none !important;
+	background-color: red;
+}
+
+.refresh-button {
+	float: left;
+	margin-top: $metadata-spacing-unit;
+}
+
+.actions {
+	border-top: 1px solid rgba(0, 0, 0, 0.1);
+	color: rgba(54, 147, 209, 0.87);
+	padding: $metadata-spacing-unit;
+	margin: 0;
+}
+
+
+
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.ts
new file mode 100755
index 0000000..e60c9de
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/metadata.component.ts
@@ -0,0 +1,209 @@
+/*
+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.
+*/
+import { Component, OnInit, ChangeDetectorRef } from '@angular/core';
+import { Router } from '@angular/router';
+import { Dataverse } from '../../shared/models/asterixDB.model';
+import { Store } from '@ngrx/store';
+import { Observable } from 'rxjs/Observable';
+import * as dataverseActions from '../../shared/actions/dataverse.actions';
+import * as datasetActions from '../../shared/actions/dataset.actions';
+import * as datatypesActions from '../../shared/actions/datatype.actions';
+import * as indexesActions from '../../shared/actions/index.actions';
+import * as metadataActions from '../../shared/actions/metadata.actions';
+import * as datasetsActions from '../../shared/actions/dataset.actions';
+import { ElementRef, ViewChild} from '@angular/core';
+import {DataSource} from '@angular/cdk/collections';
+import {BehaviorSubject} from 'rxjs/BehaviorSubject';
+import 'rxjs/add/operator/startWith';
+import 'rxjs/add/observable/merge';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/debounceTime';
+import 'rxjs/add/operator/distinctUntilChanged';
+import 'rxjs/add/observable/fromEvent';
+import { Subscription } from 'rxjs/Rx';
+import * as fromRoot from '../../shared/reducers/dataverse.reducer';
+import { State } from '../../shared/reducers/dataverse.reducer';
+import { TreeModule, TreeNode} from 'primeng/primeng';
+
+
+/**
+ * query component
+ * has editor (codemirror) for writing some query
+ */
+@Component({
+	moduleId: module.id,
+	selector: 'awc-metadata',
+	templateUrl: 'metadata.component.html',
+	styleUrls: ['metadata.component.scss']
+})
+
+export class MetadataComponent implements OnInit {
+	nodesAll = [];
+	nodesDatasets = [];
+	nodesDatatypes = [];
+	nodesIndexes = [];
+
+	constructor(private store: Store<any>, private changeDetector: ChangeDetectorRef) {}
+
+	ngOnInit(): void {
+
+		// Watching for the metadata tree
+		this.store.select(s => s.metadata.tree).subscribe((data: any[]) => {
+			
+			this.nodesAll = [];
+			this.nodesDatasets = [];
+			this.nodesDatatypes = [];
+			this.nodesIndexes = [];
+			const indexesMenu = [];
+			const datatypesMenu = [];
+			const datasetsMenu = [];
+			const dataversesRoot = { label: '', children: []};
+			dataversesRoot.label = 'DATAVERSES';
+			dataversesRoot.children = [];
+
+			for (let i = 0; i < data.length; i++) {
+
+				// Don't want to show metadata system datasets, datatypes or indexes
+			// if (data[i]['DataverseName'] && data[i]['DataverseName'] !== "Metadata" )
+			//	{
+					// Counting dataverses to align the menu identifiers
+			    	const dataverse = { label: '', children: [] }; 
+					dataverse.label = data[i]['DataverseName'];
+					dataversesRoot.children.push(dataverse);
+
+					// Adding the datasets to correspondent dataverse
+					if (data[i]['Datasets'].length) {
+						const datasetRoot = { label: '', children: [] }; 
+						datasetRoot.label = 'DATASETS';
+						dataverse.children.push(datasetRoot);
+						for (let j = 0; j < data[i]['Datasets'].length; j++) {
+							const dataset = { label: '', children: [] }; 
+							dataset.label = data[i]['Datasets'][j]['DatasetName'];
+
+							//
+							// Adding the datatype to correspondent dataset
+							//
+							if (data[i]['Datasets'][j]['Datatype']) {
+								const datatypeRoot = { label: '', children: [] };
+								datatypeRoot.label = 'Datatype: ' + data[i]['Datasets'][j]['Datatype']['DatatypeName'];
+								//
+								// Looking for the datatype fields
+								//
+								if (data[i]['Datasets'][j]['Datatype']['Derived']) {
+									if (data[i]['Datasets'][j]['Datatype']['Derived']['Record']) { 
+										const datatypeFieldsRoot = { label: '', leaf: true, expanded: true, children: [] };
+										datatypeFieldsRoot.label = 'FIELDS';
+										for (let k = 0; k < data[i]['Datasets'][j]['Datatype']['Derived']['Record']['Fields'].length; k++) {
+											const datatypeField = { label: '', children: [] }; 
+											datatypeField.label = data[i]['Datasets'][j]['Datatype']['Derived']['Record']['Fields'][k]['FieldName'] + ": " + data[i]['Datasets'][j]['Datatype']['Derived']['Record']['Fields'][k]['FieldType'];
+											datatypeFieldsRoot.children.push(datatypeField);
+										}
+										datatypeRoot.children.push(datatypeFieldsRoot);
+
+									}
+								}
+								dataset.children.push(datatypeRoot);
+
+								datatypeRoot.label = data[i]['Datasets'][j]['Datatype']['DatatypeName'];
+								datatypesMenu.push(datatypeRoot);
+							}
+
+							//
+							// Adding the indexes to correspondent dataset
+							//
+							if (data[i]['Datasets'][j]['Indexes'].length) {
+								const indexRoot = { label: '', children: [] }; 
+								indexRoot.label = 'INDEXES';
+								
+								for (let k = 0; k < data[i]['Datasets'][j]['Indexes'].length; k++) {
+									const indexChild = { label: '', children: [] }; 
+									indexChild.label = data[i]['Datasets'][j]['Indexes'][k]['IndexName'];
+
+									// is Primary
+									const indexIsPrimaryRoot = { label: '', children: [] };
+									indexIsPrimaryRoot.label = 'isPrimary' + ': ' + data[i]['Datasets'][j]['Indexes'][k]['IsPrimary'];
+									indexChild.children.push(indexIsPrimaryRoot);
+								
+									// SearchKey
+									if (data[i]['Datasets'][j]['Indexes'][k]['SearchKey']) {
+										const indexSearchKeyRoot = { label: '', children: [] };
+										indexSearchKeyRoot.label = 'SEARCH KEY';
+										for (let l = 0; l < data[i]['Datasets'][j]['Indexes'][k]['SearchKey'].length; l++) {
+											const indexsearchKeyField = { label: '', children: [] };
+											indexsearchKeyField.label = data[i]['Datasets'][j]['Indexes'][k]['SearchKey'][l]
+											indexSearchKeyRoot.children.push(indexsearchKeyField);
+										}
+
+										indexChild.children.push(indexSearchKeyRoot);
+										indexesMenu.push(indexChild);
+									}
+
+									indexRoot.children.push(indexChild);
+								}
+
+								dataset.children.push(indexRoot);
+								datasetRoot.children.push(dataset);
+								datasetsMenu.push(dataset);
+							}
+						}
+					}
+			//	}
+			}
+			
+			this.nodesAll.push(dataversesRoot);
+
+			/*
+			* Making the rest of the stand alone submenus
+			*/
+
+			// Adding the DATASET stand alone submenu
+			const datasetMenuRoot = { label: '', children: [] };
+			datasetMenuRoot.label = 'DATASETS';
+			datasetMenuRoot.children = datasetsMenu;
+			this.nodesDatasets.push(datasetMenuRoot);
+
+			// Adding the DATATYPES stand alone submenu
+			const datatypeMenuRoot = { label: '', children: [] };
+			datatypeMenuRoot.label = 'DATATYPES';
+			datatypeMenuRoot.children = datatypesMenu;
+			this.nodesDatatypes.push(datatypeMenuRoot);
+
+			// Adding the DATATYPE stand alone submenu
+			const indexesMenuRoot = { label: '', children: [] };
+			indexesMenuRoot.label = 'INDEXES';
+			indexesMenuRoot.children = indexesMenu;
+			this.nodesIndexes.push(indexesMenuRoot);
+
+			// Component View Refresh
+			this.changeDetector.detectChanges();
+		});
+	}
+
+	/*
+	* UI helpers to select dataverses from the guide menu
+	*/
+	nodeSelectAll(event) {
+		if (event.node.parent && event.node.parent.label === 'DATASETS') {
+			const datasetName = event.node.label.replace(/-;-/g);
+			this.store.dispatch(new datasetsActions.GuideSelectDatasets(datasetName));
+		}
+	}
+	
+	nodeSelectDataset(event) {
+		if (event.node.parent && event.node.parent.label === 'DATASETS') {
+			const datasetName = event.node.label.replace(/-;-/g);
+			this.store.dispatch(new datasetsActions.GuideSelectDatasets(datasetName));
+		}
+	}
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/ouput.component.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/ouput.component.ts
new file mode 100755
index 0000000..fcfc235
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/ouput.component.ts
@@ -0,0 +1,278 @@
+/*
+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.
+*/
+import { Component, OnInit, ViewChild,  AfterViewInit, ChangeDetectorRef, Pipe, PipeTransform } from '@angular/core';
+import { Observable } from 'rxjs/Observable';
+import { Store } from '@ngrx/store';
+import * as sqlQueryActions from '../../shared/actions/query.actions'
+import { saveAs } from 'file-saver';
+import { DomSanitizer } from '@angular/platform-browser';
+import {TreeModule,TreeNode} from 'primeng/primeng';
+
+/**
+ * query component
+ * has editor (codemirror) for writing some query
+ */
+
+@Pipe({ name: 'safeHtml'})
+export class SafeHtmlPipe implements PipeTransform  {
+  constructor(private sanitized: DomSanitizer) {}
+  transform(value) {
+    return this.sanitized.bypassSecurityTrustHtml(value);
+  }
+}
+
+@Component({
+	moduleId: module.id,
+	selector: 'awc-results',
+	templateUrl:'output.component.html',
+	styleUrls: ['output.component.scss']
+})
+
+
+export class QueryOutputComponent implements OnInit {
+	queryMessage: string;
+	treeData = [];
+	flattenData = [];
+	dataColumns = [];
+	query_message: string;
+	execution_time: number;
+	loaded$: Observable<any>
+	data: any[];
+	loading: Boolean;
+	jsonOutput = "";
+	selectedOutputView = "NONE";
+	outputQueryString = "";
+	toogleExpand = "EXPAND TREE"
+	
+	/* Codemirror configuration */
+	codemirrorConfig = 	{ 	mode: "asterix",
+		lineWrapping: true,
+		showCursorWhenSelecting: true
+	};
+
+	generateTreeMenu(node, rootMenu): any {
+
+		// Check in case the root object is not defined properly
+		if (rootMenu === undefined) {
+			rootMenu = { label: '', children: []};
+		}
+
+		let nodeArray = [];
+		
+		// Going through all the keys in a node looking for objects or array of key values
+		// and create a sub menu if is an object.
+		Object.keys(node).map((k) => {		
+
+			if (typeof node[k] === 'object') {
+				let nodeObject = { label: '', children: []};
+				nodeObject = { label: '', children: []};
+				nodeObject.label = k;
+				// if this is an object then a new node is created and
+				// recursive call to find and fill with the nested elements
+				let newNodeObject = this.generateTreeMenu(node[k], nodeObject);
+
+				// if this is the first node, then will become the root.
+				if (rootMenu.children) {
+					rootMenu.children.push(newNodeObject)
+				} else {
+					rootMenu = newNodeObject
+				}
+			}
+			else {
+				// Array of key values converted into a unique string with a : separator 
+				let nodeKeyValue = { label: '', children: []};
+				nodeKeyValue.label = k + " : " + node[k]
+				nodeArray.push(nodeKeyValue);
+			}
+		})
+
+		// The array will be added as value to a parent key.
+		if (nodeArray.length > 0) {
+			rootMenu.children = nodeArray.concat(rootMenu.children)
+		}
+		
+		return rootMenu 
+	}
+
+	constructor(private store: Store<any>, private changeDetector: ChangeDetectorRef) {
+		this.loaded$ = this.store.select(s => s.sqlQuery.loaded);
+		this.store.select("sqlQuery").subscribe((data: any) => {
+			// Set the output toolbar query string and default view settings
+			if (data.loaded) {
+				this.selectedOutputView = "TABLE";
+				this.loading = true;
+				this.data = data.sqlQueryResult.results;
+				this.treeData = [];
+				let stringQuery = data.sqlQueryString;
+	
+				// Preparing the toolbar 
+				if (stringQuery.length > 150) {
+					this.outputQueryString = ": " + stringQuery.slice(0, 150) + " (..)"
+				} else {
+					this.outputQueryString = ": " + stringQuery;
+				}
+
+				// Processing the results 
+				if (data.sqlQueryResult.results && data.sqlQueryResult.results.length > 0 && this.data[0]) {
+
+					/* Removing the root object, disabled for the time being 
+					var resultKeyList = Object.keys(this.data[0]);
+					var resultKey: string = resultKeyList[0]; 
+					*/
+
+					for (let i = 0; i < this.data.length; i++) {
+
+						/* Removing the root object, disabled for the time being 
+						if (this.data[i][resultKey] instanceof Object) {	
+							this.data[i] = this.data[i][resultKey];
+						}*/	
+
+						let nodeContent = { label:"[" + i + "]" , children: []};
+						this.treeData.push(this.generateTreeMenu(this.data[i], nodeContent))
+					}
+
+					this.loading = false;
+				} 
+	
+				// JSON OUTPUT
+				// Making into a JSON String for JSON String Output
+				this.jsonOutput = JSON.stringify(data.sqlQueryResult.results, null, 2)
+				
+				// TABLE OUTPUT
+				if (this.data && this.data.length > 0) {
+
+					this.collapseAll();
+					// Normalize the data ( removing the first key if is an object )
+					// TODO: Move it into a recursive function.
+					this.dataColumns = [];
+
+					var resultKeyList = Object.keys(this.data[0]);
+					var resultKey: string = resultKeyList[0]; 
+					if (this.data[0][resultKey] instanceof Object) {	
+						// is a SQL++ Query Results 
+						var nestedKeyList = Object.keys(this.data[0][resultKey]);
+						for (let i = 0; i < nestedKeyList.length; i++) {
+							if (typeof this.data[0][resultKey][nestedKeyList[i]] === 'object') {
+								// Creating a key to display a nested type
+								this.dataColumns.push({field: 'nestedString' + i, header: nestedKeyList[i]})
+								 				
+							} else {
+								this.dataColumns.push({field: nestedKeyList[i], header: nestedKeyList[i] })
+							}
+							
+						}
+					}
+					else { // is a SQL++ Metadata Results and there is an Array
+						for (let i = 0; i < resultKeyList.length; i++) {
+							this.dataColumns.push({field: resultKeyList[i], header: resultKeyList[i] })
+						}
+					}
+
+					// Now prepare the data ( SQL++ Query, Metatada Queries no need to change anything ).
+					// TODO: Move it into a recursive function.
+					if (this.data[0][resultKey] instanceof Object) {	
+						// is a SQL++ Query Results 
+						for (let i = 0; i < this.data.length; i++) {
+
+							// // is a SQL++ Query Results 
+							var nestedKeyList = Object.keys(this.data[i][resultKey]);
+							for (let k = 0; k < nestedKeyList.length; k++) {
+								if ( typeof this.data[i][resultKey][nestedKeyList[k]] === 'object' ){
+										// Creating a display value to for a nested type JSON.stringify(jsObj, 
+										var nestedObjectStr = JSON.stringify(this.data[i][resultKey][nestedKeyList[k]], null, '\n');
+										var nestedKey = 'nestedString' + k;
+										this.data[i][resultKey][nestedKey] = nestedObjectStr; 				
+								} 
+							}
+
+							this.data[i] = this.data[i][resultKey];
+						}	
+					}
+				}
+			}
+      	});
+	}
+
+	/* 
+	* Subscribing to store values
+	*/
+	ngOnInit(): void {
+		this.loaded$ = this.store.select('sqlQuery');
+		this.store.select("sqlQuery").subscribe((data: any) => {
+			if (data.sqlQueryError.errors){
+				this.queryMessage = data.sqlQueryError.errors[0].msg
+			}else{
+				this.queryMessage = ""
+			}
+		})
+	}
+
+	/* 
+	* Changes view mode [ TABLE, TREE, JSON VIEW ]
+	*/
+	onSelect(value: any) {
+		this.selectedOutputView = value;		
+	}
+
+	/* 
+	* Export to CSV 
+	*/
+    exportToCSV(){
+		var blob = new Blob([this.jsonOutput], {type: "text/csv;charset=utf-8"});
+		saveAs(blob, "Asterix-results.csv");
+	}
+	
+	/*
+	*  Export to plain text
+	*/
+    exportToText(){
+		var exportOutput = this.jsonOutput;
+		var blob = new Blob([exportOutput], {type: "text/plain;charset=utf-8"});
+		saveAs(blob, "Asterix-results.txt");
+	}
+	
+	/*
+	*  Expand/Collapse Tree
+	*/
+    expandTree(){
+		if (this.toogleExpand === "EXPAND TREE"){
+			this.expandAll();
+		} else {
+			this.collapseAll();
+		}
+	}
+	
+	expandAll(){
+		this.toogleExpand = "TREE COLLAPSE";
+        this.treeData.forEach( node => {
+            this.expandRecursive(node, true);
+        } );
+    }
+
+    collapseAll(){
+		this.toogleExpand = "EXPAND TREE";
+        this.treeData.forEach( node => {
+            this.expandRecursive(node, false);
+        } );
+    }
+    
+    private expandRecursive(node:TreeNode, isExpand:boolean){
+        node.expanded = isExpand;
+        if(node.children){
+            node.children.forEach( childNode => {
+                this.expandRecursive(childNode, isExpand);
+            } );
+        }
+    }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/output.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/output.component.html
new file mode 100755
index 0000000..f7c4b43
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/output.component.html
@@ -0,0 +1,68 @@
+<!--/*
+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.
+*/ -->
+<mat-card class="sql-results-card">
+	<mat-toolbar color="primary" class="results-selector">
+		<mat-icon class="toolbar-icon">menu</mat-icon>
+	    <span class="output-query-string">OUTPUT{{outputQueryString}}</span>
+		<span class="spacer"></span>
+	</mat-toolbar>
+  	<mat-card-content class="content-area">
+		<div *ngIf="loaded$ | async as ld">
+			<div *ngIf="selectedOutputView=='TABLE'">				
+				<p-dataTable [style]="{'width':'100%', 'overflow':'hidden'}" id='review-table' [responsive]="true" [hidden]="loading" [value]="data" [rows]="20" [paginator]="true" [pageLinks]="3" [rowsPerPageOptions]="[5,10,20, 30, 40, 50]" >
+					<p-column [style]="{'text-align':'left',
+					'text-overflow': 'ellipsis', 'word-wrap': 'break-word', 'word-break': 'break-all'}"
+					
+					[footerStyle]="{'color':'blue'}" [headerStyleClass]="datatable-header" *ngFor="let node of dataColumns;" [field]="node.field" 
+					[header]="node.header" [sortable]="true">
+					</p-column>
+				</p-dataTable>
+			</div>
+		</div>
+		<div *ngIf="loaded$ | async as ld">	
+			<div *ngIf="ld.sqlQueryError.metrics" class="queryErrorMessage">
+				<span>ERROR:</span>
+				<span>{{queryMessage}}</span>
+			</div>	
+			 <div [hidden]="selectedOutputView!='TREE'" class="data-viewer-container">
+				<button mat-button class="button-expand" (click)="expandTree()">{{toogleExpand}}</button>
+				<p-tree [style]="{'width':'100%', 'border': 'none', 'font-family': 'Roboto Mono', 'font-size': '0.80rem',
+					'font-weight': '500'}" [value]="treeData"></p-tree>
+			</div>
+			<div *ngIf="loaded$ | async as ld">	
+				<div *ngIf="selectedOutputView=='JSON'" class="data-viewer-container">
+					<button mat-button class="button-export" (click)="exportToText()">EXPORT</button>
+					<pre class="json-output">{{jsonOutput}}</pre>
+				</div>
+			</div>
+		</div>
+	</mat-card-content>
+	<mat-card-actions class="actions">
+		<div *ngIf="loaded$ | async as ld">
+			<span *ngIf="ld.sqlQueryResult.metrics" class="metrics">
+				<span class="span-results">SUCCESS:</span>
+				<span class="span-results">Count: {{ld.sqlQueryResult.metrics.resultCount}}</span>
+				<span class="span-results">Size: {{ld.sqlQueryResult.metrics.resultSize}}</span>
+				<span class="span-results">Elapsed time: {{ld.sqlQueryResult.metrics.elapsedTime}}</span>
+				<span class="span-results">Execution time: {{ld.sqlQueryResult.metrics.executionTime}}</span>
+				<span class="spacer"></span>
+				<mat-button-toggle-group #group="matButtonToggleGroup" class="output-group" value={{selectedOutput}} (change)="onSelect(group.value)">
+					<mat-button-toggle mat-button  value="TABLE">TABLE</mat-button-toggle>
+					<mat-button-toggle mat-button  value="TREE">TREE</mat-button-toggle>
+					<mat-button-toggle mat-button  value="JSON">JSON</mat-button-toggle>
+				</mat-button-toggle-group>
+			</span>
+		</div>
+	</mat-card-actions>
+</mat-card>
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/output.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/output.component.scss
new file mode 100755
index 0000000..099ca87
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/output.component.scss
@@ -0,0 +1,169 @@
+/*
+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.
+*/
+$results-spacing-unit: 5px;
+
+.sql-results-card {
+  display: flex;
+	flex-flow: column;
+  padding: 0;
+  height: 600px;
+  width: 100%; // 1350px;
+	margin: ($results-spacing-unit * 2);
+	min-height: 150px; 
+}
+
+.toolbar-icon {
+  padding: 0 14px 0 0;
+  margin: 0;
+}
+
+.spacer {
+  flex: 1 1 auto;
+}
+
+.results-selector {
+	max-height: 42px;
+  min-height: 42px;
+  justify-content: center;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  font-size: 0.80rem;
+  font-weight: 500;
+  background-color: white;
+  border: 1px solid rgba(54, 147, 209, 0.87);
+  overflow-wrap: break-word;
+	word-break: break-all;
+}
+
+.content-area {
+  position: relative;
+  color: hsla(0,0%,0%,.87);
+  height: 500px;
+  padding: 0;
+  margin: 0;
+  overflow: auto;
+  font-size: 0.80rem;
+  font-weight: 500;
+  font-family: "Roboto", monospace;
+}
+
+.root-closed {
+  list-style-type:none;
+}
+
+.root-open {
+  list-style-type:none;
+}
+
+.leaf-list-open {
+  list-style-type:none;
+  // padding-top: ($results-spacing-unit) * 2;
+  padding-left: 25px;
+  color: red;
+}
+
+.leaf-list-open.div
+//.leaf-list-open.ul
+.leaf-list-open.li {
+  margin-left: ($results-spacing-unit * 10) !important;
+  color: green;
+}
+
+.leaf {
+  color: blue;
+}
+
+.leaf-list-closed {
+  list-style-type:none;
+  display: none;
+}
+
+ul > .root-closed::before {
+  content:'+'
+}
+
+ul > .root-open::before {
+  content:'-'
+}
+
+.queryErrorMessage {
+  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(209, 54, 54, 0.87);
+  padding: $results-spacing-unit;
+  padding-left: ($results-spacing-unit * 2);
+}
+
+.metrics {
+  display: flex;
+  color: rgba(54, 147, 209, 0.87);
+  font-size: 0.80rem;
+  font-weight: 500;
+}
+
+.span-results {
+  padding-top: ($results-spacing-unit * 2);
+  padding-left: ($results-spacing-unit * 2);
+}
+
+.actions {
+  border-top: 1px solid rgba(0, 0, 0, 0.1);
+  color: rgba(54, 147, 209, 0.87);
+  margin: 0;
+}
+
+//someID\:review-table
+th {
+  text-align: left !important;
+}
+
+.datatable-header {
+  color: red !important;
+  background-color: blue;
+}
+
+.data-viewer-container {
+  padding: ($results-spacing-unit * 4);
+  padding-bottom: ($results-spacing-unit * 8);
+  height: 100%;
+  overflow: hidden;
+}
+
+.output-group {
+  margin-right: ($results-spacing-unit * 4);
+}
+
+.menu-export {
+  font-size: 0.80rem !important;
+  font-weight: 500 !important;
+}
+
+.button-export {
+  margin-right: ($results-spacing-unit * 4);
+  color: rgba(54, 147, 209, 0.87);
+}
+
+.button-expand {
+  margin-right: ($results-spacing-unit * 4);
+  color: rgba(54, 147, 209, 0.87);
+}
+
+.ui-datatable-data> tr> td {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  max-width: 150px;
+  color: red;
+}
+
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.html
new file mode 100755
index 0000000..6dd3ef3
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.html
@@ -0,0 +1,24 @@
+<!--/*
+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.
+*/ -->
+
+<div class="query-container">
+  <div class="metadata">   
+    <awc-metadata class="metadata-card"></awc-metadata>
+  </div>
+  <div class="vertical">
+    <awc-query class="query-card"></awc-query>
+    <awc-results class="output-card"></awc-results>
+  </div>
+</div> 
+
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.scss
new file mode 100755
index 0000000..d6b530b
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.scss
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+ .query-container {
+    display: flex;
+    flex-direction: row;
+    //background-color: red;
+    width: 100%; 
+    margin:0;
+    padding:0;
+    overflow: hidden;
+ }
+
+.metadata {
+    display: flex;
+    flex-direction: row;
+    width: 20%;
+   // background-color: rgb(0, 255, 42);
+    margin:0;
+    padding: 0;
+   // padding-right: 10px;
+    border-right: 1px solid hsla(0,0%,0%,.20);
+}
+
+.vertical {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    width: 80%;
+    overflow: hidden;
+    margin:0;
+    padding: 1px0;
+   // background-color: rgb(38, 0, 255);
+}
+
+.metadata-card {
+    display: flex;
+    flex-direction: row;
+    justify-content: center;     
+    width: 100%;
+    overflow: hidden;
+    margin:0;
+    padding: 0;
+   // background-color: green;
+}
+
+.query-card {
+    display: flex;
+    flex-direction: row;
+    justify-content: center;     
+    width: 100%;
+    overflow: hidden;
+    margin:0;
+    padding: 0;
+    //background-color: green;
+}
+
+.output-card {
+    display: flex;
+    flex-direction: row;
+    justify-content: center;     
+    width: 100%;
+    overflow: hidden;
+    margin:0;
+    padding: 0;
+    //background-color: yellow;
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.ts
new file mode 100755
index 0000000..776e184
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/dashboard/query/query-container.component.ts
@@ -0,0 +1,74 @@
+/*
+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.
+*/
+import { Component, OnInit } from '@angular/core';
+import { Router } from '@angular/router';
+import { Dataverse } from '../../shared/models/asterixDB.model'
+import { Store } from '@ngrx/store';
+import { Observable } from 'rxjs/Observable';
+import * as dataverseActions from '../../shared/actions/dataverse.actions'
+import * as datasetActions from '../../shared/actions/dataset.actions'
+import * as datatypesActions from '../../shared/actions/datatype.actions'
+import * as indexesActions from '../../shared/actions/index.actions'
+import * as metadataActions from '../../shared/actions/metadata.actions'
+import { ElementRef, ViewChild} from '@angular/core';
+import {DataSource} from '@angular/cdk/collections';
+import {BehaviorSubject} from 'rxjs/BehaviorSubject';
+import 'rxjs/add/operator/startWith';
+import 'rxjs/add/observable/merge';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/debounceTime';
+import 'rxjs/add/operator/distinctUntilChanged';
+import 'rxjs/add/observable/fromEvent';
+import { Subscription } from "rxjs/Rx";
+import * as fromRoot from '../../shared/reducers/dataverse.reducer';
+import { State } from '../../shared/reducers/dataverse.reducer';
+import * as sqlQueryActions from '../../shared/actions/query.actions'
+/*
+ * query component
+ * has editor (codemirror) for writing some query
+ */
+@Component({
+	moduleId: module.id,
+	selector: 'awc-query-container',
+	templateUrl:'query-container.component.html',
+	styleUrls: ['query-container.component.scss']
+})
+
+export class QueryContainerComponent {
+	nodes = []
+	constructor(private store: Store<any>) {
+
+		this.store.select(s => s.metadata.tree).subscribe((data: any[]) => {
+			this.nodes = []
+			for (let i = 0; i < data.length; i++) {
+				if (data[i]['DataverseName']) {
+				    let node = { id: 0, name:"", children:[] };
+				    node.id = i;
+				    node.name = data[i]['DataverseName'];
+						for (let j = 0; j < data[i]['Datasets'].length; j++) {
+							let children = { id: 0, name:"", children:[] };
+							children.id = j
+							children.name = data[i]['Datasets'][j]['DatasetName'];
+							node.children.push(children)
+						}
+						this.nodes.push(node)
+				}
+			}
+		});
+	}
+
+	treeCalc() {
+		this.store.dispatch(new metadataActions.UpdateMetadataTree());
+	}
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/db.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/db.ts
new file mode 100755
index 0000000..8f51b00
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/db.ts
@@ -0,0 +1,23 @@
+/*
+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.
+*/
+import { DBSchema } from '@ngrx/db';
+
+/*
+* Persistent storage capability to the dashboard in case is needed.
+*/
+export const schema: DBSchema = {
+  version: 1,
+  name: 'asterixDB_app',
+  stores: {},
+};
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/material.module.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/material.module.ts
new file mode 100755
index 0000000..3bb67d9
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/material.module.ts
@@ -0,0 +1,105 @@
+/*
+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.
+*/
+import {NgModule} from '@angular/core';
+import {
+  MatAutocompleteModule,
+  MatButtonModule,
+  MatButtonToggleModule,
+  MatCardModule,
+  MatCheckboxModule,
+  MatChipsModule,
+  MatDatepickerModule,
+  MatDialogModule,
+  MatExpansionModule,
+  MatFormFieldModule,
+  MatGridListModule,
+  MatIconModule,
+  MatInputModule,
+  MatListModule,
+  MatMenuModule,
+  MatPaginatorModule,
+  MatProgressBarModule,
+  MatProgressSpinnerModule,
+  MatRadioModule,
+  MatSelectModule,
+  MatSidenavModule,
+  MatSliderModule,
+  MatSlideToggleModule,
+  MatSnackBarModule,
+  MatSortModule,
+  MatTableModule,
+  MatTabsModule,
+  MatToolbarModule,
+  MatTooltipModule,
+  MatStepperModule,
+} from '@angular/material';
+import {MatNativeDateModule, MatRippleModule} from '@angular/material';
+import {CdkTableModule} from '@angular/cdk/table';
+//import {CdkAccordionModule} from '@angular/cdk/accordion';
+import {A11yModule} from '@angular/cdk/a11y';
+import {BidiModule} from '@angular/cdk/bidi';
+import {OverlayModule} from '@angular/cdk/overlay';
+import {PlatformModule} from '@angular/cdk/platform';
+import {ObserversModule} from '@angular/cdk/observers';
+import {PortalModule} from '@angular/cdk/portal';
+
+/*
+* NgModule that includes all Material modules that are required to
+* serve AsterixDB Dashboard
+*/
+@NgModule({
+  exports: [
+    MatAutocompleteModule,
+    MatButtonModule,
+    MatButtonToggleModule,
+    MatCardModule,
+    MatCheckboxModule,
+    MatChipsModule,
+    MatTableModule,
+    MatDatepickerModule,
+    MatDialogModule,
+    MatExpansionModule,
+    MatFormFieldModule,
+    MatGridListModule,
+    MatIconModule,
+    MatInputModule,
+    MatListModule,
+    MatMenuModule,
+    MatPaginatorModule,
+    MatProgressBarModule,
+    MatProgressSpinnerModule,
+    MatRadioModule,
+    MatRippleModule,
+    MatSelectModule,
+    MatSidenavModule,
+    MatSlideToggleModule,
+    MatSliderModule,
+    MatSnackBarModule,
+    MatSortModule,
+    MatStepperModule,
+    MatTabsModule,
+    MatToolbarModule,
+    MatTooltipModule,
+    MatNativeDateModule,
+    CdkTableModule,
+    A11yModule,
+    BidiModule,
+  //  CdkAccordionModule,
+    ObserversModule,
+    OverlayModule,
+    PlatformModule,
+    PortalModule,
+  ]
+})
+export class MaterialModule {}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/app.actions.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/app.actions.ts
new file mode 100755
index 0000000..29da05f
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/app.actions.ts
@@ -0,0 +1,33 @@
+/*
+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.
+*/
+import { Action } from '@ngrx/store';
+import { AsterixDBQueryMessage, Dataset } from '../models/asterixDB.model';
+
+/*
+* Definition of App Actions
+*/
+export const APP_MODE_CHANGE = '[App State] App Mode Change';
+
+/*
+* Guide Select Datasets for UI Helpers
+*/
+export class ChangeMode implements Action {
+  readonly type = APP_MODE_CHANGE;
+  constructor(public payload: string) {}
+}
+
+/*
+* Exports of datasets actions
+*/
+export type All = ChangeMode;
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/dataset.actions.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/dataset.actions.ts
new file mode 100755
index 0000000..a49e07c
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/dataset.actions.ts
@@ -0,0 +1,130 @@
+/*
+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.
+*/
+import { Action } from '@ngrx/store';
+import { AsterixDBQueryMessage, Dataset } from '../models/asterixDB.model';
+
+/*
+* Definition of Datasets Actions
+*/
+export const SELECT_DATASETS          = '[Dataset Collection] Select Dataset';
+export const SELECT_DATASETS_SUCCESS  = '[Dataset Collection] Select Dataset Success';
+export const SELECT_DATASETS_FAIL     = '[Dataset Collection] Select Dataset Fail';
+export const CREATE_DATASET           = '[Dataset Collection] Create Dataset';
+export const CREATE_DATASET_SUCCESS   = '[Dataset Collection] Create Dataset Success';
+export const CREATE_DATASET_FAIL      = '[Dataset Collection] Create Dataset Fail';
+export const UPDATE_DATASET           = '[Dataset Collection] Update Dataset';
+export const UPDATE_DATASET_SUCCESS   = '[Dataset Collection] Update Dataset Success';
+export const UPDATE_DATASET_FAIL      = '[Dataset Collection] Update Dataset Fail';
+export const DROP_DATASET             = '[Dataset Collection] Drop Dataset';
+export const DROP_DATASET_SUCCESS     = '[Dataset Collection] Drop Dataset Success';
+export const DROP_DATASET_FAIL        = '[Dataset Collection] Drop Dataset Fail';
+export const GUIDE_SELECT_DATASET     = '[Dataset Collection] Guide Select Dataset';
+
+
+/*
+* Guide Select Datasets for UI Helpers
+*/
+export class GuideSelectDatasets implements Action {
+  readonly type = GUIDE_SELECT_DATASET;
+  constructor(public payload: string) {}
+}
+
+/*
+* Select Datasets
+*/
+export class SelectDatasets implements Action {
+  readonly type = SELECT_DATASETS;
+  constructor(public payload: string) {}
+}
+
+export class SelectDatasetsSuccess implements Action {
+  readonly type = SELECT_DATASETS_SUCCESS;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+export class SelectDatasetsFail implements Action {
+  readonly type = SELECT_DATASETS_FAIL;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+/*
+* Create Dataset
+*/
+export class CreateDataset implements Action {
+  readonly type = CREATE_DATASET;
+  constructor(public payload: string) {}
+}
+
+export class CreateDatasetSuccess implements Action {
+  readonly type = CREATE_DATASET_SUCCESS;
+  constructor(public payload: Dataset[]) {}
+}
+
+export class CreateDatasetFail implements Action {
+  readonly type = CREATE_DATASET_FAIL;
+  constructor(public payload: Dataset) {}
+}
+
+/*
+* Update Dataset
+*/
+export class UpdateDataset implements Action {
+  readonly type = UPDATE_DATASET;
+  constructor(public payload: Dataset) {}
+}
+
+export class UpdateDatasetSuccess implements Action {
+  readonly type = UPDATE_DATASET_SUCCESS;
+  constructor(public payload: Dataset[]) {}
+}
+
+export class UpdateDatasetFail implements Action {
+  readonly type = UPDATE_DATASET_FAIL;
+  constructor(public payload: Dataset) {}
+}
+
+/*
+* Drop Dataset
+*/
+export class DropDataset implements Action {
+  readonly type = DROP_DATASET;
+  constructor(public payload: string) {}
+}
+
+export class DropDatasetSuccess implements Action {
+  readonly type = DROP_DATASET_SUCCESS;
+  constructor(public payload: Dataset[]) {}
+}
+
+export class DropDatasetFail implements Action {
+  readonly type = DROP_DATASET_FAIL;
+  constructor(public payload: Dataset) {}
+}
+
+/*
+* Exports of datasets actions
+*/
+export type All = SelectDatasets |
+  SelectDatasetsSuccess |
+  SelectDatasetsFail |
+  CreateDataset |
+  CreateDatasetSuccess |
+  CreateDatasetFail |
+  UpdateDataset |
+  UpdateDatasetSuccess |
+  UpdateDatasetFail |
+  DropDataset |
+  DropDatasetSuccess |
+  DropDatasetFail | 
+  GuideSelectDatasets;
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/datatype.actions.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/datatype.actions.ts
new file mode 100755
index 0000000..5543a7a
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/datatype.actions.ts
@@ -0,0 +1,122 @@
+/*
+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.
+*/
+import { Action } from '@ngrx/store';
+import { AsterixDBQueryMessage, Datatype } from '../models/asterixDB.model';
+
+/*
+* Definition of Datatypes Actions
+*/
+export const SELECT_DATATYPES         = '[Datatype Collection] Select Datatypes';
+export const SELECT_DATATYPES_SUCCESS = '[Datatype Collection] Select Datatypes Success';
+export const SELECT_DATATYPES_FAIL    = '[Datatype Collection] Select Datatypes Fail';
+export const CREATE_DATATYPE          = '[Datatype Collection] Create Datatypes';
+export const CREATE_DATATYPE_SUCCESS  = '[Datatype Collection] Create Datatypes Success';
+export const CREATE_DATATYPE_FAIL     = '[Datatype Collection] Create Datatypes Fail';
+export const UPDATE_DATATYPE          = '[Datatype Collection] Update Datatype';
+export const UPDATE_DATATYPE_SUCCESS  = '[Datatype Collection] Update Datatype Success';
+export const UPDATE_DATATYPE_FAIL     = '[Datatype Collection] Update Datatype Fail';
+export const DROP_DATATYPE            = '[Datatype Collection] Drop Datatypes';
+export const DROP_DATATYPE_SUCCESS    = '[Datatype Collection] Drop Datatypes Success';
+export const DROP_DATATYPE_FAIL       = '[Datatype Collection] Drop Datatypes Fail';
+
+/*
+* Select Datatypes
+*/
+export class SelectDatatypes implements Action {
+  readonly type = SELECT_DATATYPES;
+  constructor(public payload: string) {}
+}
+
+export class SelectDatatypesSuccess implements Action {
+  readonly type = SELECT_DATATYPES_SUCCESS;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+export class SelectDatatypesFail implements Action {
+  readonly type = SELECT_DATATYPES_FAIL;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+/*
+* Create Datatype
+*/
+export class CreateDatatype implements Action {
+  readonly type = CREATE_DATATYPE;
+  constructor(public payload: string) {}
+}
+
+export class CreateDatatypeSuccess implements Action {
+  readonly type = CREATE_DATATYPE_SUCCESS;
+  constructor(public payload: Datatype[]) {}
+}
+
+export class CreateDatatypeFail implements Action {
+  readonly type = CREATE_DATATYPE_FAIL;
+  constructor(public payload: Datatype) {}
+}
+
+/*
+* Update Datatype
+*/
+export class UpdateDatatype implements Action {
+  readonly type = UPDATE_DATATYPE;
+  constructor(public payload: Datatype) {}
+}
+
+export class UpdateDatatypeSuccess implements Action {
+  readonly type = UPDATE_DATATYPE_SUCCESS;
+  constructor(public payload: Datatype[]) {}
+}
+
+export class UpdateDatatypeFail implements Action {
+  readonly type = UPDATE_DATATYPE_FAIL;
+  constructor(public payload: Datatype) {}
+}
+
+/*
+* Drop Datatype
+*/
+export class DropDatatype implements Action {
+  readonly type = DROP_DATATYPE;
+
+  constructor(public payload: string) {}
+}
+
+export class DropDatatypeSuccess implements Action {
+  readonly type = DROP_DATATYPE_SUCCESS;
+
+  constructor(public payload: Datatype[]) {}
+}
+
+export class DropDatatypeFail implements Action {
+  readonly type = DROP_DATATYPE_FAIL;
+
+  constructor(public payload: Datatype) {}
+}
+
+/*
+* Exports of datastypes actions
+*/
+export type All = SelectDatatypes |
+  SelectDatatypesSuccess |
+  SelectDatatypesFail |
+  CreateDatatype |
+  CreateDatatypeSuccess |
+  CreateDatatypeFail |
+  UpdateDatatype |
+  UpdateDatatypeSuccess |
+  UpdateDatatypeFail |
+  DropDatatype |
+  DropDatatypeSuccess |
+  DropDatatypeFail;
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/dataverse.actions.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/dataverse.actions.ts
new file mode 100755
index 0000000..dc33c0a
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/dataverse.actions.ts
@@ -0,0 +1,119 @@
+/*
+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.
+*/
+import { Action } from '@ngrx/store';
+import { AsterixDBQueryMessage, Dataverse } from '../models/asterixDB.model';
+
+/*
+* Definition of Dataverses Actions
+*/
+export const SELECT_DATAVERSES          = '[Dataverse Collection] Select Dataverses';
+export const SELECT_DATAVERSES_SUCCESS  = '[Dataverse Collection] Select Dataverses Success';
+export const SELECT_DATAVERSES_FAIL     = '[Dataverse Collection] Select Dataverses Fail';
+export const CREATE_DATAVERSE           = '[Dataverse Collection] Create Dataverse';
+export const CREATE_DATAVERSE_SUCCESS   = '[Dataverse Collection] Create Dataverse Success';
+export const CREATE_DATAVERSE_FAIL      = '[Dataverse Collection] Create Dataverse Fail';
+export const UPDATE_DATAVERSE           = '[Dataverse Collection] Update Dataverse';
+export const UPDATE_DATAVERSE_SUCCESS   = '[Dataverse Collection] Update Dataverse Success';
+export const UPDATE_DATAVERSE_FAIL      = '[Dataverse Collection] Update Dataverse Fail';
+export const DROP_DATAVERSE             = '[Dataverse Collection] Drop Dataverses';
+export const DROP_DATAVERSE_SUCCESS     = '[Dataverse Collection] Drop Dataverses Success';
+export const DROP_DATAVERSE_FAIL        = '[Dataverse Collection] Drop Dataverses Fail';
+
+/*
+* Select Dataverses
+*/
+export class SelectDataverses implements Action {
+  readonly type = SELECT_DATAVERSES;
+  constructor(public payload: string) {}
+}
+
+export class SelectDataversesSuccess implements Action {
+  readonly type = SELECT_DATAVERSES_SUCCESS;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+export class SelectDataversesFail implements Action {
+  readonly type = SELECT_DATAVERSES_FAIL;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+/*
+* Create Dataverse
+*/
+export class CreateDataverse implements Action {
+  readonly type = CREATE_DATAVERSE;
+  constructor(public payload: string) {}
+}
+
+export class CreateDataverseSuccess implements Action {
+  readonly type = CREATE_DATAVERSE_SUCCESS;
+  constructor(public payload: Dataverse[]) {}
+}
+
+export class CreateDataverseFail implements Action {
+  readonly type = CREATE_DATAVERSE_FAIL;
+  constructor(public payload: Dataverse) {}
+}
+
+/*
+* Update Dataverse
+*/
+export class UpdateDataverse implements Action {
+  readonly type = UPDATE_DATAVERSE;
+  constructor(public payload: Dataverse) {}
+}
+
+export class UpdateDataverseSuccess implements Action {
+  readonly type = UPDATE_DATAVERSE_SUCCESS;
+  constructor(public payload: Dataverse[]) {}
+}
+
+export class UpdateDataverseFail implements Action {
+  readonly type = UPDATE_DATAVERSE_FAIL;
+  constructor(public payload: Dataverse) {}
+}
+
+/*
+* Drop Dataverse
+*/
+export class DropDataverse implements Action {
+  readonly type = DROP_DATAVERSE;
+  constructor(public payload: string) {}
+}
+
+export class DropDataverseSuccess implements Action {
+  readonly type = DROP_DATAVERSE_SUCCESS;
+  constructor(public payload: Dataverse[]) {}
+}
+
+export class DropDataverseFail implements Action {
+  readonly type = DROP_DATAVERSE_FAIL;
+  constructor(public payload: Dataverse) {}
+}
+
+/*
+* Exports of datasverses actions
+*/
+export type All = SelectDataverses |
+  SelectDataversesSuccess |
+  SelectDataversesFail |
+  CreateDataverse |
+  CreateDataverseSuccess |
+  CreateDataverseFail |
+  UpdateDataverse |
+  UpdateDataverseSuccess |
+  UpdateDataverseFail |
+  DropDataverse |
+  DropDataverseSuccess |
+  DropDataverseFail;
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/index.actions.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/index.actions.ts
new file mode 100755
index 0000000..1304644
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/index.actions.ts
@@ -0,0 +1,119 @@
+/*
+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.
+*/
+import { Action } from '@ngrx/store';
+import { Index } from '../models/asterixDB.model';
+
+/*
+* Definition of Index Actions
+*/
+export const SELECT_INDEXES         = '[Index Collection] Select Indexes';
+export const SELECT_INDEXES_SUCCESS = '[Index Collection] Select Indexes Success';
+export const SELECT_INDEXES_FAIL    = '[Index Collection] Select Indexes Fail';
+export const CREATE_INDEX           = '[Index Collection] Create Index';
+export const CREATE_INDEX_SUCCESS   = '[Index Collection] Create Index Success';
+export const CREATE_INDEX_FAIL      = '[Index Collection] Create Index Fail';
+export const UPDATE_INDEX           = '[Index Collection] Update Index';
+export const UPDATE_INDEX_SUCCESS   = '[Index Collection] Update Index Success';
+export const UPDATE_INDEX_FAIL      = '[Index Collection] Update Index Fail';
+export const DROP_INDEX             = '[Index Collection] Drop Indexes';
+export const DROP_INDEX_SUCCESS     = '[Index Collection] Drop Indexes Success';
+export const DROP_INDEX_FAIL        = '[Index Collection] Drop Indexes Fail';
+
+/*
+* Select Indexes
+*/
+export class SelectIndexes implements Action {
+  readonly type = SELECT_INDEXES;
+  constructor(public payload: string) {}
+}
+
+export class SelectIndexesSuccess implements Action {
+  readonly type = SELECT_INDEXES_SUCCESS;
+  constructor(public payload: Index[]) {}
+}
+
+export class SelectIndexesFail implements Action {
+  readonly type = SELECT_INDEXES_FAIL;
+  constructor(public payload: Index[]) {}
+}
+
+/*
+* Create Index
+*/
+export class CreateIndex implements Action {
+  readonly type = CREATE_INDEX;
+  constructor(public payload: string) {}
+}
+
+export class CreateIndexSuccess implements Action {
+  readonly type = CREATE_INDEX_SUCCESS;
+  constructor(public payload: Index[]) {}
+}
+
+export class CreateIndexFail implements Action {
+  readonly type = CREATE_INDEX_FAIL;
+  constructor(public payload: Index) {}
+}
+
+/*
+* Update Index
+*/
+export class UpdateIndex implements Action {
+  readonly type = UPDATE_INDEX;
+  constructor(public payload: Index) {}
+}
+
+export class UpdateIndexSuccess implements Action {
+  readonly type = UPDATE_INDEX_SUCCESS;
+  constructor(public payload: Index[]) {}
+}
+
+export class UpdateIndexFail implements Action {
+  readonly type = UPDATE_INDEX_FAIL;
+  constructor(public payload: Index) {}
+}
+
+/*
+* Remove Index
+*/
+export class DropIndex implements Action {
+  readonly type = DROP_INDEX;
+  constructor(public payload: string) {}
+}
+
+export class DropIndexSuccess implements Action {
+  readonly type = DROP_INDEX_SUCCESS;
+  constructor(public payload: Index[]) {}
+}
+
+export class DropIndexFail implements Action {
+  readonly type = DROP_INDEX_FAIL;
+  constructor(public payload: Index) {}
+}
+
+/*
+* Exports of indexes actions
+*/
+export type All = SelectIndexes |
+  SelectIndexesSuccess |
+  SelectIndexesFail |
+  CreateIndex |
+  CreateIndexSuccess |
+  CreateIndexFail |
+  UpdateIndex |
+  UpdateIndexSuccess |
+  UpdateIndexFail |
+  DropIndex |
+  DropIndexSuccess |
+  DropIndexFail;
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/metadata.actions.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/metadata.actions.ts
new file mode 100755
index 0000000..4a3c125
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/metadata.actions.ts
@@ -0,0 +1,46 @@
+/*
+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.
+*/
+import { Action } from '@ngrx/store';
+
+/*
+* Definition of Metadata Tree Actions
+*/
+export const UPDATE_METADATA_TREE         = '[Metadata Tree Query] UPDATE Metadata tree';
+export const UPDATE_METADATA_TREE_SUCCESS = '[Metadata Tree Query] UPDATE Metadata tree Success';
+export const UPDATE_METADATA_TREE_FAIL    = '[Metadata Tree Query] UPDATE Metadata tree Fail';
+
+/*
+* Construct Metadata Tree Actions
+*/
+export class UpdateMetadataTree implements Action {
+  readonly type = UPDATE_METADATA_TREE
+  constructor() {}
+}
+
+export class UpdateMetadataTreeSuccess implements Action {
+  readonly type = UPDATE_METADATA_TREE_SUCCESS;
+  constructor(public payload: any) {}
+}
+
+export class UpdateMetadataTreeFail implements Action {
+  readonly type = UPDATE_METADATA_TREE_FAIL;
+  constructor(public payload: any) {}
+}
+
+/*
+* Exports of Metatada Tree actions
+*/
+export type All = UpdateMetadataTree |
+    UpdateMetadataTreeSuccess |
+    UpdateMetadataTreeFail;
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/query.actions.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/query.actions.ts
new file mode 100755
index 0000000..866b3e9
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/actions/query.actions.ts
@@ -0,0 +1,71 @@
+/*
+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.
+*/
+import { Action } from '@ngrx/store';
+import { AsterixDBQueryMessage } from '../models/asterixDB.model';
+
+/*
+* Definition of SQL++ Actions
+*/
+export const EXECUTE_QUERY                  = '[Query] Execute SQL++ Query';
+export const EXECUTE_QUERY_SUCCESS          = '[Query] Execute SQL++ Query Success';
+export const EXECUTE_QUERY_FAIL             = '[Query] Execute SQL++ Query Fail';
+export const EXECUTE_METADATA_QUERY         = '[Query] Execute Metadata SQL++ Query';
+export const EXECUTE_METADATA_QUERY_SUCCESS = '[Query] Execute Metadata SQL++ Query Success';
+export const EXECUTE_METADATA_QUERY_FAIL     = '[Query] Execute Metadata SQL++ Query Fail';
+
+/*
+* Execute SQL++ Query
+*/
+export class ExecuteQuery implements Action {
+  readonly type = EXECUTE_QUERY;
+  constructor(public payload: string) {} // the AsterixDB Query String
+}
+
+export class ExecuteQuerySuccess implements Action {
+  readonly type = EXECUTE_QUERY_SUCCESS;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+export class ExecuteQueryFail implements Action {
+  readonly type = EXECUTE_QUERY_FAIL;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+/*
+* Execute Metadata SQL++ Query
+*/
+export class ExecuteMetadataQuery implements Action {
+  readonly type = EXECUTE_METADATA_QUERY;
+  constructor(public payload: string) {} // the AsterixDB Query String
+}
+
+export class ExecuteMetadataQuerySuccess implements Action {
+  readonly type = EXECUTE_METADATA_QUERY_SUCCESS;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+export class ExecuteMetadataQueryFail implements Action {
+  readonly type = EXECUTE_METADATA_QUERY_FAIL;
+  constructor(public payload: AsterixDBQueryMessage[]) {}
+}
+
+/*
+* Exports of SQL++ actions
+*/
+export type All = ExecuteQuery |
+  ExecuteQuerySuccess |
+  ExecuteQueryFail |
+  ExecuteMetadataQuery |
+  ExecuteMetadataQuerySuccess |
+  ExecuteMetadataQueryFail;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/dataset.effects.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/dataset.effects.ts
new file mode 100755
index 0000000..b5624a4
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/dataset.effects.ts
@@ -0,0 +1,65 @@
+/*
+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.
+*/
+import { Injectable } from '@angular/core';
+import { Action } from '@ngrx/store';
+import { Effect, Actions } from '@ngrx/effects';
+import { Observable } from 'rxjs/Observable';
+import { of } from 'rxjs/observable/of';
+import * as datasetActions from '../actions/dataset.actions';
+import { SQLService } from '../services/async-query.service';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/switchMap';
+import 'rxjs/add/operator/catch';
+
+export type Action = datasetActions.All
+
+@Injectable()
+export class DatasetEffects {
+    constructor(private actions: Actions,
+        private sqlService: SQLService) {}
+
+    /* Effect to load a collection of all Datasets from AsterixDB
+    */
+    @Effect()
+    selectDatasets$: Observable<Action> = this.actions
+        .ofType(datasetActions.SELECT_DATASETS)
+        .switchMap(query => {
+            return this.sqlService.selectDatasets()
+            .map(dataset => new datasetActions.SelectDatasetsSuccess(dataset))
+            .catch(err => of(new datasetActions.SelectDatasetsFail(err)));
+    });
+
+    /* Effect to create a Datasets from AsterixDB
+    */
+    @Effect()
+    createDatasets$: Observable<Action> = this.actions
+        .ofType(datasetActions.CREATE_DATASET)
+        .switchMap(dataset => {
+            return this.sqlService.createDataset((dataset as any).payload)
+            .map(dataset => new datasetActions.CreateDatasetSuccess(dataset))
+            .catch(err => of(new datasetActions.CreateDatasetFail(err)));
+    });
+
+    /* Effect to drop a Datasets from AsterixDB
+    */
+    @Effect()
+    dropDatasets$: Observable<Action> = this.actions
+        .ofType(datasetActions.DROP_DATASET)
+        .switchMap(dataset => {
+            console.log((dataset as any).payload)
+            return this.sqlService.dropDataset((dataset as any).payload)
+            .map(dataset => new datasetActions.DropDatasetSuccess(dataset))
+            .catch(err => of(new datasetActions.DropDatasetFail(err)));
+    });
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/datatype.effects.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/datatype.effects.ts
new file mode 100755
index 0000000..4fa187f
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/datatype.effects.ts
@@ -0,0 +1,63 @@
+/*
+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.
+*/
+import { Injectable } from '@angular/core';
+import { Effect, Actions } from '@ngrx/effects';
+import { Observable } from 'rxjs/Observable';
+import { of } from 'rxjs/observable/of';
+import * as datatypeActions from '../actions/datatype.actions';
+import { SQLService } from '../services/async-query.service';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/switchMap';
+import 'rxjs/add/operator/catch';
+
+export type Action = datatypeActions.All
+
+@Injectable()
+export class DatatypeEffects {
+  constructor(private actions: Actions,
+      private sqlService: SQLService) {}
+
+  /* Effect to load a collection of all Datatypes from AsterixDB
+  */
+  @Effect()
+  selectDatatypes$: Observable<Action> = this.actions
+    .ofType(datatypeActions.SELECT_DATATYPES)
+    .switchMap(query => {
+        return this.sqlService.selectDatatypes()
+           .map(datatype => new datatypeActions.SelectDatatypesSuccess(datatype))
+           .catch(err => of(new datatypeActions.SelectDatatypesFail(err)));
+  });
+
+  /* Effect to create a Datatype from AsterixDB
+  */
+  @Effect()
+  createDatatypes$: Observable<Action> = this.actions
+    .ofType(datatypeActions.CREATE_DATATYPE)
+    .switchMap(datatype => {
+        return this.sqlService.createDatatype((datatype as any).payload)
+           .map(datatype => new datatypeActions.CreateDatatypeSuccess(datatype))
+           .catch(err => of(new datatypeActions.CreateDatatypeFail(err)));
+  });
+
+  /* Effect to drop a Datatype from AsterixDB
+  */
+  @Effect()
+  dropDatatypes$: Observable<Action> = this.actions
+    .ofType(datatypeActions.DROP_DATATYPE)
+    .switchMap(datatype => {
+        return this.sqlService.dropDatatype((datatype as any).payload)
+           .map(datatype => new datatypeActions.DropDatatypeSuccess(datatype))
+           .catch(err => of(new datatypeActions.DropDatatypeFail(err)));
+  });
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/dataverse.effects.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/dataverse.effects.ts
new file mode 100755
index 0000000..d917420
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/dataverse.effects.ts
@@ -0,0 +1,63 @@
+/*
+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.
+*/
+import { Injectable } from '@angular/core';
+import { Effect, Actions } from '@ngrx/effects';
+import { Observable } from 'rxjs/Observable';
+import { of } from 'rxjs/observable/of';
+import * as dataverseActions from '../actions/dataverse.actions';
+import { SQLService } from '../services/async-query.service';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/switchMap';
+import 'rxjs/add/operator/catch';
+
+export type Action = dataverseActions.All
+
+@Injectable()
+export class DataverseEffects {
+  constructor(private actions: Actions,
+      private sqlService: SQLService) {}
+
+  /* Effect to load a collection of all Dataverses from AsterixDB
+  */
+  @Effect()
+    selectDataverses$: Observable<Action> = this.actions
+        .ofType(dataverseActions.SELECT_DATAVERSES)
+        .switchMap(query => {
+            return this.sqlService.selectDataverses()
+            .map(dataverse => new dataverseActions.SelectDataversesSuccess(dataverse))
+            .catch(err => of(new dataverseActions.SelectDataversesFail(err)));
+    });
+
+    /* Effect to create Dataverse from AsterixDB
+    */
+    @Effect()
+    createDataverses$: Observable<Action> = this.actions
+        .ofType(dataverseActions.CREATE_DATAVERSE)
+        .switchMap(dataverseName => {
+            return this.sqlService.createDataverse((dataverseName as any).payload)
+            .map(dataverse => new dataverseActions.CreateDataverseSuccess(dataverse))
+            .catch(err => of(new dataverseActions.CreateDataverseFail(err)));
+    });
+
+    /* Effect to drop a Dataverse from AsterixDB
+    */
+    @Effect()
+    dropDataverses$: Observable<Action> = this.actions
+        .ofType(dataverseActions.DROP_DATAVERSE)
+        .switchMap(dataverseName => {
+            return this.sqlService.dropDataverse((dataverseName as any).payload)
+            .map(dataverse => new dataverseActions.DropDataverseSuccess(dataverse))
+            .catch(err => of(new dataverseActions.DropDataverseFail(err)));
+    });
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/index.effects.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/index.effects.ts
new file mode 100755
index 0000000..8491392
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/index.effects.ts
@@ -0,0 +1,63 @@
+/*
+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.
+*/
+import { Injectable } from '@angular/core';
+import { Effect, Actions } from '@ngrx/effects';
+import { Observable } from 'rxjs/Observable';
+import { of } from 'rxjs/observable/of';
+import * as indexActions from '../actions/index.actions';
+import { SQLService } from '../services/async-query.service';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/switchMap';
+import 'rxjs/add/operator/catch';
+
+export type Action = indexActions.All
+
+@Injectable()
+export class IndexEffects {
+  constructor(private actions: Actions,
+      private sqlService: SQLService) {}
+
+  /* Effect to load a collection of all Index from AsterixDB
+  */
+  @Effect()
+  selectIndexes$: Observable<Action> = this.actions
+    .ofType(indexActions.SELECT_INDEXES)
+    .switchMap(query => {
+        return this.sqlService.selectIndexes()
+           .map(index => new indexActions.SelectIndexesSuccess(index))
+           .catch(err => of(new indexActions.SelectIndexesFail(err)));
+  });
+
+  /* Effect to create a Index
+  */
+  @Effect()
+  createIndexes$: Observable<Action> = this.actions
+    .ofType(indexActions.CREATE_INDEX)
+    .switchMap(index => {
+        return this.sqlService.createIndex((index as any).payload)
+           .map(index => new indexActions.CreateIndexSuccess(index))
+           .catch(err => of(new indexActions.CreateIndexFail(err)));
+  });
+
+  /* Effect to drop a Index
+  */
+  @Effect()
+  dropIndexes$: Observable<Action> = this.actions
+    .ofType(indexActions.DROP_INDEX)
+    .switchMap(index => {
+        return this.sqlService.dropIndex((index as any).payload)
+           .map(index => new indexActions.DropIndexSuccess(index))
+           .catch(err => of(new indexActions.DropIndexFail(err)));
+  });
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/metadata.effects.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/metadata.effects.ts
new file mode 100755
index 0000000..ddcdb27
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/metadata.effects.ts
@@ -0,0 +1,41 @@
+/*
+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.
+*/
+import { Injectable } from '@angular/core';
+import { Action } from '@ngrx/store';
+import { Effect, Actions } from '@ngrx/effects';
+import { Observable } from 'rxjs/Observable';
+import { of } from 'rxjs/observable/of';
+import { MetadataService } from '../services/async-metadata.service';
+import * as metadataActions from '../actions/metadata.actions';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/switchMap';
+import 'rxjs/add/operator/catch';
+
+export type Action = metadataActions.All
+
+@Injectable()
+export class MetadataEffects {
+  constructor(private actions: Actions,
+      private metadataService: MetadataService) {}
+
+  /* Effect to update and retrieve the Metadata Tree
+  */
+  @Effect()
+  calculateDBTree$: Observable<Action> = this.actions
+    .ofType(metadataActions.UPDATE_METADATA_TREE)
+    .switchMap(() => {
+        return this.metadataService.getMetadataTree()
+          .map(tree => new metadataActions.UpdateMetadataTreeSuccess(tree))
+    });
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/query.effects.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/query.effects.ts
new file mode 100755
index 0000000..cb78255
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/effects/query.effects.ts
@@ -0,0 +1,53 @@
+/*
+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.
+*/
+import { Injectable } from '@angular/core';
+import { Action } from '@ngrx/store';
+import { Effect, Actions } from '@ngrx/effects';
+import { Observable } from 'rxjs/Observable';
+import { of } from 'rxjs/observable/of';
+import { SQLService } from '../services/async-query.service';
+import * as sqlQueryActions from '../actions/query.actions';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/switchMap';
+import 'rxjs/add/operator/catch';
+
+export type Action = sqlQueryActions.All
+
+@Injectable()
+export class SQLQueryEffects {
+  constructor(private actions: Actions,
+      private sqlService: SQLService) {}
+
+  /* Effect to Execute an SQL++ Query against the AsterixDB
+  */
+  @Effect()
+  executeQuery$: Observable<Action> = this.actions
+    .ofType(sqlQueryActions.EXECUTE_QUERY)
+    .switchMap(query => {
+        return this.sqlService.executeSQLQuery((query as any).payload)
+           .map(sqlQueryResult => new sqlQueryActions.ExecuteQuerySuccess(sqlQueryResult))
+           .catch(sqlQueryError => of(new sqlQueryActions.ExecuteQueryFail(sqlQueryError)));
+  });
+
+  /* Effect to Execute an SQL++ Metadata Query against the AsterixDB
+  */
+  @Effect()
+  executeMetadataQuery$: Observable<Action> = this.actions
+    .ofType(sqlQueryActions.EXECUTE_METADATA_QUERY)
+    .switchMap(query => {
+        return this.sqlService.executeSQLQuery((query as any).payload)
+           .map(sqlMetadataQueryResult => new sqlQueryActions.ExecuteMetadataQuerySuccess(sqlMetadataQueryResult))
+           .catch(sqlMetadataQueryError => of(new sqlQueryActions.ExecuteMetadataQueryFail(sqlMetadataQueryError)));
+  });
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/models/asterixDB.model.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/models/asterixDB.model.ts
new file mode 100755
index 0000000..bbdabe2
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/models/asterixDB.model.ts
@@ -0,0 +1,112 @@
+/*
+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.
+*/
+/*
+* Interfaces representing AsterixDB data model structures.
+*/
+
+export interface Dataverse {
+  dataFormat: string;
+  dataverseName: string;
+  pendingOp: string;
+  timeStamp: string;
+};
+
+export interface ResultsM {
+  dataFormat: string;
+  dataverseName: string;
+  pendingOp: string;
+  timeStamp: string;
+};
+
+export interface Dataset {
+  compactionPolicy: string;
+  compactionPolicyProperties: CompactionPolicyProperties[];
+  datasetId: string;
+  datasetName: string;
+  datasetType:string;
+  datatypeDataverseName: string;
+  datatypeName: string;
+  dataverseName: string;
+  groupName:string;
+  hints: string[];
+  internalDetails: InternalDetails;
+  pendingOp: string;
+  timestamp: string;
+};
+
+export interface CompactionPolicyProperties {
+  name: string;
+  value: string;
+};
+
+export interface InternalDetails {
+  autogenerated: string;
+  fileStructure: string;
+  partitioningKey: string;
+  partitioningStrategy: string;
+  primaryKey: string[];
+};
+
+// Message format coming back from AsterixDB REST API
+export interface AsterixDBQueryMessage {
+  metrics: Metrics;
+  requestId: string;
+  results: any[];
+  signature: string;
+  status: string;
+};
+
+export interface Metrics {
+  elapsedTime: string;
+  executionTime: string;
+  resultCount: string;
+  resultSize: string;
+};
+
+// Datatype Data Model comming from AsterixDB REST API
+export interface Datatype {
+  datatypeName: string;
+  dataverseName: string;
+  derived: DatatypeDerived;
+  timeStamp: string;
+};
+
+export interface DatatypeDerived {
+  isAnonymous: boolean;
+  record: DatatypeDerivedRecord;
+  tag: string;
+};
+
+export interface DatatypeDerivedRecord {
+  Fields: DatatypeDerivedRecordField[];
+  isOpen: boolean;
+};
+
+export interface DatatypeDerivedRecordField {
+  fieldName: string;
+  fieldType: "string";
+  isNullable: boolean;
+}
+
+// Index Data Model comming from AsterixDB REST API
+export interface Index {
+  dataverseName: string;
+  datasetName: string;
+  indexName: string;
+  indexStructure: string;
+  searchKey: string[];
+  isPrimary: boolean;
+  timestamp: string;
+  pendingOp: string;
+};
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/keys.pipe.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/keys.pipe.ts
new file mode 100755
index 0000000..77cac5a
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/keys.pipe.ts
@@ -0,0 +1,25 @@
+/*
+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.
+*/
+import { PipeTransform, Pipe } from '@angular/core';
+
+@Pipe({name: 'keys'})
+export class KeysPipe implements PipeTransform {
+  transform(value, args:string[]) : any {
+    let keys = [];
+    for (let key in value) {
+      keys.push(key);
+    }
+    return keys;
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/objectArrayType.pipe.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/objectArrayType.pipe.ts
new file mode 100755
index 0000000..220b53c
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/objectArrayType.pipe.ts
@@ -0,0 +1,23 @@
+/*
+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.
+*/
+// Detecting if an object is an array
+import { PipeTransform, Pipe } from '@angular/core';
+
+@Pipe({name: 'isObjectArray'})
+export class ObjectArrayTypePipe implements PipeTransform {
+  transform(value, args:string[]) : any {
+		return value && (value.constructor.toString().indexOf("Array") != -1)
+					&& value[0] && (value[0].constructor.toString().indexOf("Object") != -1);
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/objectType.pipe.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/objectType.pipe.ts
new file mode 100755
index 0000000..5b8f795
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/pipes/objectType.pipe.ts
@@ -0,0 +1,21 @@
+/*
+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.
+*/
+import { PipeTransform, Pipe } from '@angular/core';
+
+@Pipe({name: 'isObject'})
+export class ObjectTypePipe implements PipeTransform {
+  transform(value, args:string[]) : any {
+		return value && (value.constructor.toString().indexOf("Object") != -1);
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/app.reducer.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/app.reducer.ts
new file mode 100755
index 0000000..01c65ac
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/app.reducer.ts
@@ -0,0 +1,73 @@
+/*
+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.
+*/
+import { AsterixDBQueryMessage } from '../models/asterixDB.model';
+import * as appActions from '../actions/app.actions';
+
+export type Action = appActions.All;
+
+/*
+** Interfaces for app state in store/state
+*/
+export interface State {
+  loading: boolean,
+  loaded: boolean,
+  success: boolean,
+  sqlQueryString: string,
+  sqlQueryResult: AsterixDBQueryMessage[],
+  sqlQueryError: AsterixDBQueryMessage[],
+  sqlMetadataQueryString: string,
+  sqlMetadataQueryResult: AsterixDBQueryMessage[],
+  sqlMetadataQueryError: AsterixDBQueryMessage[]
+};
+
+const initialState: State = {
+  loading: false,
+  loaded: false,
+  success: false,
+  sqlQueryString: "",
+  sqlQueryResult: [],
+  sqlQueryError: [],
+  sqlMetadataQueryString: "",
+  sqlMetadataQueryResult: [],
+  sqlMetadataQueryError: [],
+};
+
+/*
+** Reducer function for app state in store/state
+*/
+export function appReducer(state = initialState, action: Action) {
+  switch (action.type) {
+
+    /*
+    * Change the load state to true, and clear previous results
+    * to signaling that a EXECUTE a SQL++ Query is ongoing
+    */
+    case appActions.APP_MODE_CHANGE: {
+      return Object.assign({}, state, {
+        loading: false,
+        loaded: true,
+        success: false,
+        sqlQueryString: action.payload,
+        sqlQueryResult: [],
+        sqlQueryError: []
+      });
+    }
+    
+    /*
+    * Just returns the current store/state object
+    */
+    default:
+      return state;
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/dataset.reducer.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/dataset.reducer.ts
new file mode 100755
index 0000000..25d09b9
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/dataset.reducer.ts
@@ -0,0 +1,177 @@
+/*
+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.
+*/
+import { Dataset } from '../models/asterixDB.model';
+import * as DatasetAction from '../actions/dataset.actions';
+
+export type Action = DatasetAction.All;
+
+/*
+** Interfaces for datasets in store/state
+*/
+export interface State {
+  loaded: boolean,
+  loading: boolean,
+  datasets: any[],
+  createDataset: any[],
+  createDatasetError: any[],
+  createDatasetSuccess: boolean,
+  createDatasetFailed: boolean,
+  dropDataset: any[],
+  dropDatasetError: any[],
+  dropDatasetSuccess: boolean,
+  dropDatasetFailed: boolean,
+  guideSelectsDataset: string,
+};
+
+const initialState: State = {
+  loaded: false,
+  loading: false,
+  datasets: [],
+  createDataset: [],
+  createDatasetError: [],
+  createDatasetSuccess: false,
+  createDatasetFailed: false,
+  dropDataset: [],
+  dropDatasetError: [],
+  dropDatasetSuccess: false,
+  dropDatasetFailed: false,
+  guideSelectsDataset: ""
+};
+
+/*
+** Reducer function for datasets in store/state
+*/
+export function datasetReducer(state = initialState, action: Action) {
+  switch (action.type) {
+
+    /*
+    * Change the selected dataset state to true to signaling
+    * UI from metadata guide 
+    */
+    case DatasetAction.GUIDE_SELECT_DATASET: {
+      return Object.assign({}, state, { guideSelectsDataset: action.payload });
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a SELECT Query is ongoing
+    */
+    case DatasetAction.SELECT_DATASETS: {
+        return Object.assign({}, state, { loading: true });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a SELECT Query is success and there is datasets available in the
+    * store
+    */
+    case DatasetAction.SELECT_DATASETS_SUCCESS: {
+      return Object.assign({}, state, {
+        loaded: true,
+        loading: false,
+        datasets: action.payload
+      })
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a CREATE a Dataset Query is ongoing
+    */
+    case DatasetAction.CREATE_DATASET: {
+      return Object.assign({}, state, { 
+        createDataset: [],
+        createDatasetError: [],
+        createDatasetSuccess: false,
+        createDatasetFailed: false,
+      });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a CREATE a Dataset Query is success and there is datasets available in the
+    * store
+    */
+    case DatasetAction.CREATE_DATASET_SUCCESS: {
+      return Object.assign({}, state, {
+        createDataset: action.payload,
+        createDatasetName: action.payload,        
+        createDatasetError: [],
+        createDatasetSuccess: true,
+        createDatasetFailed: false
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a CREATE a Dataset Query is failed and there is an error message available in the
+    * store
+    */
+    case DatasetAction.CREATE_DATASET_FAIL: {
+      return Object.assign({}, state, {
+        createDataset: [],
+        createDatasetError: action.payload,
+        createDatasetSuccess: false,
+        createDatasetFailed: true
+      })
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a DROP a Dataset Query is ongoing
+    */
+    case DatasetAction.DROP_DATASET: {
+      return Object.assign({}, state, { 
+        dropDataset: [],
+        dropDatasetError: [],
+        dropDatasetName: action.payload,
+        dropDatasetSuccess: false,
+        dropDatasetFailed: false
+       });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a DROP a Dataset Query is success and there is datasets available in the
+    * store
+    */
+    case DatasetAction.DROP_DATASET_SUCCESS: {
+      return Object.assign({}, state, {
+        dropDataset: action.payload,
+        dropDatasetError: [],
+        dropDatasetSuccess: true,
+        dropDatasetFailed: false
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a DROP a Dataset Query is failed and there is an error message available in the
+    * store
+    */
+    case DatasetAction.DROP_DATASET_FAIL: {
+      return Object.assign({}, state, {
+        dropDataset: [],
+        dropDatasetError: action.payload,
+        dropDatasetSuccess: false,
+        dropDatasetFailed: true
+      })
+    }
+
+    /*
+    * Just returns the current store/state object
+    */
+    default:
+      return state;
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/datatype.reducer.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/datatype.reducer.ts
new file mode 100755
index 0000000..1036fdb
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/datatype.reducer.ts
@@ -0,0 +1,167 @@
+/*
+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.
+*/
+import { Datatype } from '../models/asterixDB.model';
+import * as DatatypeAction from '../actions/datatype.actions';
+
+export type Action = DatatypeAction.All;
+
+/*
+** Interfaces for datatype in store/state
+*/
+export interface State {
+  loaded: boolean,
+  loading: boolean,
+  datatypes: Datatype[],
+  createDatatype: any[],
+  createDatatypeError: any[],
+  createDatatypeSuccess: boolean,
+  createDatatypeFailed: boolean,
+  dropDatatype: any[],
+  dropDatatypeError: any[],
+  dropDatatypeSuccess: boolean,
+  dropDatatypeFailed: boolean
+};
+
+const initialState: State = {
+  loaded: false,
+  loading: false,
+  datatypes: [],
+  createDatatype: [],
+  createDatatypeError: [],
+  createDatatypeSuccess: false,
+  createDatatypeFailed: false,
+  dropDatatype: [],
+  dropDatatypeError: [],
+  dropDatatypeSuccess: false,
+  dropDatatypeFailed: false
+};
+
+/*
+** Reducer function for datatypes in store/state
+*/
+export function datatypeReducer(state = initialState, action: Action) {
+  switch (action.type) {
+
+    /*
+    * Change the load state to true to signaling
+    * that a SELECT Query is ongoing
+    */
+    case DatatypeAction.SELECT_DATATYPES: {
+        return Object.assign({}, state, { loading: true });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a SELECT Query is success and there is datatypes available in the
+    * store
+    */
+    case DatatypeAction.SELECT_DATATYPES_SUCCESS: {
+      return Object.assign({}, state, {
+        loaded: true,
+        loading: false,
+        datatypes: action.payload
+      })
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a CREATE a Datatype Query is ongoing
+    */
+    case DatatypeAction.CREATE_DATATYPE: {
+      return Object.assign({}, state, { 
+        createDatatype: [],
+        createDatatypeName: action.payload,        
+        createDatatypeError: [],
+        createDatatypeSuccess: false,
+        createDatatypeFailed: false,
+      });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a CREATE a Datatype Query is success and there is datasets available in the
+    * store
+    */
+    case DatatypeAction.CREATE_DATATYPE_SUCCESS: {
+      return Object.assign({}, state, {
+        createDatatype: action.payload,
+        createDatatypeError: [],
+        createDatatypeSuccess: true,
+        createDatatypeFailed: false
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a CREATE a Datatype Query is failed and there is an error message available in the
+    * store
+    */
+    case DatatypeAction.CREATE_DATATYPE_FAIL: {
+      return Object.assign({}, state, {
+        createDatatype: [],
+        createDatatypeError: action.payload,
+        createDatatypeSuccess: false,
+        createDatatypeFailed: true
+      })
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a DROP a Datatype Query is ongoing
+    */
+    case DatatypeAction.DROP_DATATYPE: {
+      return Object.assign({}, state, { 
+        dropDatatype: [],
+        dropDatatypeName: action.payload,       
+        dropDatatypeError: [],
+        dropDatatypeSuccess: false,
+        dropDatatypeFailed: false
+        });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a DROP a Datatype Query is success and there is datasets available in the
+    * store
+    */
+    case DatatypeAction.DROP_DATATYPE_SUCCESS: {
+      return Object.assign({}, state, {
+        dropDatatype: action.payload,
+        dropDatatypeError: [],
+        dropDatatypeSuccess: true,
+        dropDatatypeFailed: false
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a DROP a Datatype Query is failed and there is an error message available in the
+    * store
+    */
+    case DatatypeAction.DROP_DATATYPE_FAIL: {
+      return Object.assign({}, state, {
+        dropDatatype: [],
+        dropDatatypeError: action.payload,
+        dropDatatypeSuccess: false,
+        dropDatatypeFailed: true
+      })
+    }
+
+    /*
+    * Just returns the current store/state object
+    */
+    default:
+      return state;
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/dataverse.reducer.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/dataverse.reducer.ts
new file mode 100755
index 0000000..7ac78ea
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/dataverse.reducer.ts
@@ -0,0 +1,171 @@
+/*
+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.
+*/
+import { Dataverse } from '../models/asterixDB.model';
+import * as DataverseAction from '../actions/dataverse.actions';
+
+export type Action = DataverseAction.All;
+
+/*
+** Interfaces for dataverses in store/state
+*/
+export interface State {
+  loaded: boolean,
+  loading: boolean,
+  dataverses: any[],
+  createDataverse: any[],
+  createDataverseName: string,
+  createDataverseError: any[],
+  createDataverseSuccess: boolean,
+  createDataverseFailed: boolean
+  dropDataverse: any[],
+  dropDataverseName: string;
+  dropDataverseError: any[],
+  dropDataverseSuccess: boolean,
+  dropDataverseFailed: boolean
+};
+
+const initialState: State = {
+  loaded: false,
+  loading: false,
+  dataverses: [],
+  createDataverse: [],
+  createDataverseName: "",
+  createDataverseError: [],
+  createDataverseSuccess: false,
+  createDataverseFailed: false,
+  dropDataverse: [],
+  dropDataverseName: "",
+  dropDataverseError: [],
+  dropDataverseSuccess: false,
+  dropDataverseFailed: false
+};
+
+/*
+** Reducer function for dataverses in store/state
+*/
+export function dataverseReducer(state = initialState, action: Action) {
+  switch (action.type) {
+
+    /*
+    * Change the load state to true to signaling
+    * that a SELECT Query is ongoing
+    */
+    case DataverseAction.SELECT_DATAVERSES: {
+        return Object.assign({}, state, { loading: true });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a SELECT Query is success and there is dataverses available in the
+    * store
+    */
+    case DataverseAction.SELECT_DATAVERSES_SUCCESS: {
+      return Object.assign({}, state, {
+        loaded: true,
+        loading: false,
+        dataverses: action.payload //  _.sortBy(_.values(action.payload), 'dataverseName')
+      })
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a CREATE a Dataset Query is ongoing
+    */
+    case DataverseAction.CREATE_DATAVERSE: {
+      return Object.assign({}, state, { 
+        createDataverse: [],
+        createDataverseName: action.payload,
+        createDataverseError: [],
+        createDataverseSuccess: false,
+        createDataverseFailed: false
+      });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a CREATE a Dataverse Query is success and there is a success message available in the
+    * store
+    */
+    case DataverseAction.CREATE_DATAVERSE_SUCCESS: {
+      return Object.assign({}, state, {
+        createDataverse: action.payload,
+        createDataverseError: [],        
+        createDataverseSuccess: true,
+        createDataverseFailed: false
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a CREATE a Dataverse Query is failed and there is an error message available in the
+    * store
+    */
+    case DataverseAction.CREATE_DATAVERSE_FAIL: {
+      return Object.assign({}, state, {
+        createDataverse: [],
+        createDataverseError: action.payload,
+        createDataverseSuccess: false,
+        createDataverseFailed: true
+      })
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a DROP a Dataverse Query is ongoing
+    */
+    case DataverseAction.DROP_DATAVERSE: {
+      return Object.assign({}, state, { 
+        dropDataverse: [],
+        dropDataverseName: action.payload,
+        dropDataverseError: [],
+        dropDataverseSuccess: false,
+        dropDataverseFailed: false
+      });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a DROP a Dataverse Query is success and there is success message available in the
+    * store
+    */
+    case DataverseAction.DROP_DATAVERSE_SUCCESS: {
+      return Object.assign({}, state, {
+        dropDataverse: action.payload,
+        dropDataverseError: [],
+        dropDataverseSuccess: true,
+        dropDataverseFailed: false
+      })
+    }
+
+     /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a DROP a Dataverse Query is failed and there is an error message available in the
+    * store
+    */
+    case DataverseAction.DROP_DATAVERSE_FAIL: {
+      return Object.assign({}, state, {
+        dropDataverse: [],
+        dropDataverseError: action.payload,
+        dropDataverseSuccess: false,
+        dropDataverseFailed: true
+      })
+    }
+
+    /*
+    * Just returns the current store/state object
+    */
+    default:
+      return state;
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/index.reducer.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/index.reducer.ts
new file mode 100755
index 0000000..792abc7
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/index.reducer.ts
@@ -0,0 +1,167 @@
+/*
+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.
+*/
+import { Index } from '../models/asterixDB.model';
+import * as IndexAction from '../actions/index.actions';
+
+export type Action = IndexAction.All;
+
+/*
+** Interfaces for indexes in store/state
+*/
+export interface State {
+  loaded: boolean,
+  loading: boolean,
+  indexes: Index[],
+  createIndex: any[],
+  createIndexError: any[],
+  createIndexSuccess: boolean,
+  createIndexFailed: boolean,
+  dropIndex: any[],
+  dropIndexError: any[],
+  dropIndexSuccess: boolean,
+  dropIndexFailed: boolean
+};
+
+const initialState: State = {
+  loaded: false,
+  loading: false,
+  indexes: [],
+  createIndex: [],
+  createIndexError: [],
+  createIndexSuccess: false,
+  createIndexFailed: false,
+  dropIndex: [],
+  dropIndexError: [],
+  dropIndexSuccess: false,
+  dropIndexFailed: false
+};
+
+/*
+** Reducer function for indexes in store/state
+*/
+export function indexReducer(state = initialState, action: Action) {
+  switch (action.type) {
+
+    /*
+    * Change the load state to true to signaling
+    * that a SELECT Query is ongoing
+    */
+    case IndexAction.SELECT_INDEXES: {
+      return Object.assign({}, state, { loading: true });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a SELECT Query is success and there is indexes available in the
+    * store
+    */
+    case IndexAction.SELECT_INDEXES_SUCCESS: {
+      return Object.assign({}, state, {
+        loaded: true,
+        loading: false,
+        indexes: action.payload
+      })
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a CREATE a Index Query is ongoing
+    */
+    case IndexAction.CREATE_INDEX: {
+      return Object.assign({}, state, { 
+        createIndex: [],
+        createIndexName: action.payload,       
+        createIndexError: [],
+        createIndexSuccess: false,
+        createIndexFailed: false
+      });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a CREATE a Index Query is success and there is datasets available in the
+    * store
+    */
+    case IndexAction.CREATE_INDEX_SUCCESS: {
+      return Object.assign({}, state, {
+        createIndex: [],
+        createIndexError: [],
+        createIndexSuccess: true,
+        createIndexFailed: false
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a CREATE a Index Query is success and there is datasets available in the
+    * store
+    */
+    case IndexAction.CREATE_INDEX_SUCCESS: {
+      return Object.assign({}, state, {
+        createIndex: action.payload,
+        createIndexError: [],
+        createIndexSuccess: false,
+        createIndexFailed: true
+      })
+    }
+
+    /*
+    * Change the load state to true to signaling
+    * that a DROP a Index Query is ongoing
+    */
+    case IndexAction.DROP_INDEX: {
+      return Object.assign({}, state, { 
+        dropIndex: [],
+        dropIndexError: [],
+        dropIndexName: action.payload,               
+        dropIndexSuccess: false,
+        dropIndexFailed: false 
+      });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a DROP a Index Query is success and there is datasets available in the
+    * store
+    */
+    case IndexAction.DROP_INDEX_SUCCESS: {
+      return Object.assign({}, state, {
+        dropIndex: action.payload,
+        dropIndexError: [],
+        dropIndexSuccess: true,
+        dropIndexFailed: false 
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a DROP a Index Query is failed and there is an error message available in the
+    * store
+    */
+    case IndexAction.DROP_INDEX_FAIL: {
+      return Object.assign({}, state, {
+        dropIndex: [],
+        dropIndexError: action.payload,
+        dropIndexSuccess: false,
+        dropIndexFailed: true 
+      })
+    }
+
+    /*
+    * Just returns the current store/state object
+    */
+    default:
+      return state;
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/index.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/index.ts
new file mode 100755
index 0000000..1965d8c
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/index.ts
@@ -0,0 +1,49 @@
+/*
+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.
+*/
+import { ActionReducer } from '@ngrx/store';
+import * as fromDataverse from './dataverse.reducer';
+import * as fromDataset from './dataset.reducer';
+import * as fromDatatype from './datatype.reducer';
+import * as fromIndex from './index.reducer';
+import * as fromQuery from './query.reducer';
+import * as fromQueryMetadata from './query-metadata.reducer';
+import * as fromMetadata from './metadata.reducer';
+import * as fromAppState from './app.reducer';
+
+/*
+** Global Interfaces store/state
+*/
+export interface ModelState {
+  dataverse: fromDataverse.State,
+  dataset: fromDataset.State,
+  datatype: fromDatatype.State,
+  index: fromIndex.State,
+  sqlQuery: fromQuery.State,
+  sqlMetadataQuery: fromQueryMetadata.State,
+  metadata: fromMetadata.State,
+  appState: fromAppState.State,
+}
+
+/*
+** Global Reducers configuration
+*/
+export const reducers = {
+  dataverse: fromDataverse.dataverseReducer,
+  dataset: fromDataset.datasetReducer,
+  datatype: fromDatatype.datatypeReducer,
+  index: fromIndex.indexReducer,
+  sqlQuery: fromQuery.sqlReducer,
+  sqlMetadataQuery: fromQueryMetadata.sqlMetadataReducer,
+  metadata: fromMetadata.metadataTreeReducer
+};
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/metadata.reducer.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/metadata.reducer.ts
new file mode 100755
index 0000000..52b88f2
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/metadata.reducer.ts
@@ -0,0 +1,56 @@
+/*
+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.
+*/
+import * as metadataTreeActions from '../actions/metadata.actions';
+
+export type Action = metadataTreeActions.All;
+
+/*
+** Interfaces for the metadata tree in store/state
+*/
+export interface State {
+  tree: any[],
+  loading: boolean,
+  loaded: boolean,
+};
+
+const initialState: State = {
+  tree: [],
+  loading: false,
+  loaded: false
+};
+
+export function metadataTreeReducer(state = initialState, action: Action) {
+  switch (action.type) {
+    case metadataTreeActions.UPDATE_METADATA_TREE: {
+      return Object.assign({}, state, {
+        tree: [],
+        loading: true,
+        loaded: false
+      });
+    }
+
+    case metadataTreeActions.UPDATE_METADATA_TREE_SUCCESS: {
+      return Object.assign({}, state, {
+        tree: [...state.tree, action.payload],
+        loading: false,
+        loaded: true
+      });
+    }
+    /*
+    * Just returns the current store/state object
+    */
+    default:
+      return state;
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/query-metadata.reducer.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/query-metadata.reducer.ts
new file mode 100755
index 0000000..e360e95
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/query-metadata.reducer.ts
@@ -0,0 +1,96 @@
+/*
+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.
+*/
+import { AsterixDBQueryMessage } from '../models/asterixDB.model';
+import * as sqlQueryActions from '../actions/query.actions';
+
+export type Action = sqlQueryActions.All;
+
+/*
+** Interfaces for sql++ queries in store/state
+*/
+export interface State {
+  loading: boolean,
+  loaded: boolean,
+  success: boolean,
+  sqlQueryMetadataString: string,
+  sqlQueryMetadataResult: AsterixDBQueryMessage[],
+  sqlQueryMetadataError: AsterixDBQueryMessage[]
+};
+
+const initialState: State = {
+  loading: false,
+  loaded: false,
+  success: false,
+  sqlQueryMetadataString: "",
+  sqlQueryMetadataResult: [],
+  sqlQueryMetadataError: [],
+};
+
+/*
+** Reducer function for sql++ queries in store/state
+*/
+export function sqlMetadataReducer(state = initialState, action: Action) {
+  switch (action.type) {
+    /*
+    * Change the load state to true, and clear previous results
+    * to signaling that a METADATA EXECUTE a SQL++ Query is ongoing
+    */
+    case sqlQueryActions.EXECUTE_METADATA_QUERY: {
+      return Object.assign({}, state, {
+        loading: false,
+        loaded: true,
+        success: false,
+        sqlQueryMetadataString: action.payload,
+        sqlQueryMetadataResult: [],
+        sqlQueryMetadataError: []
+      });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a  METADATA EXECUTE Query is success and there is data available in the
+    * store
+    */
+    case sqlQueryActions.EXECUTE_METADATA_QUERY_SUCCESS: {
+      return Object.assign({}, state, {
+        loading: false,
+        loaded: true,
+        success: true,
+        sqlQueryMetadataResult: action.payload,
+        sqlQueryMetadataError: []
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a  METADATA EXECUTE Query is failed and there is error data available in the
+    * store
+    */
+    case sqlQueryActions.EXECUTE_METADATA_QUERY_FAIL: {
+      return Object.assign({}, state, {
+        loading: false,
+        loaded: true,
+        success: false,
+        sqlQueryMetadataResult: [],
+        sqlQueryMetadataError: action.payload
+      })
+    }
+
+    /*
+    * Just returns the current store/state object
+    */
+    default:
+      return state;
+  }
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/query.reducer.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/query.reducer.ts
new file mode 100755
index 0000000..5c8ad08
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/reducers/query.reducer.ts
@@ -0,0 +1,97 @@
+/*
+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.
+*/
+import { AsterixDBQueryMessage } from '../models/asterixDB.model';
+import * as sqlQueryActions from '../actions/query.actions';
+
+export type Action = sqlQueryActions.All;
+
+/*
+** Interfaces for sql++ queries in store/state
+*/
+export interface State {
+  loading: boolean,
+  loaded: boolean,
+  success: boolean,
+  sqlQueryString: string,
+  sqlQueryResult: AsterixDBQueryMessage[],
+  sqlQueryError: AsterixDBQueryMessage[]
+};
+
+const initialState: State = {
+  loading: false,
+  loaded: false,
+  success: false,
+  sqlQueryString: "",
+  sqlQueryResult: [],
+  sqlQueryError: []
+};
+
+/*
+** Reducer function for sql++ queries in store/state
+*/
+export function sqlReducer(state = initialState, action: Action) {
+  switch (action.type) {
+
+    /*
+    * Change the load state to true, and clear previous results
+    * to signaling that a EXECUTE a SQL++ Query is ongoing
+    */
+    case sqlQueryActions.EXECUTE_QUERY: {
+      return Object.assign({}, state, {
+        loading: false,
+        loaded: true,
+        success: false,
+        sqlQueryString: action.payload,
+        sqlQueryResult: [],
+        sqlQueryError: []
+      });
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a EXECUTE Query is success and there is data available in the
+    * store
+    */
+    case sqlQueryActions.EXECUTE_QUERY_SUCCESS: {
+      return Object.assign({}, state, {
+        loading: false,
+        loaded: true,
+        success: true,
+        sqlQueryResult: action.payload,
+        sqlQueryError: []
+      })
+    }
+
+    /*
+    * Change the load state to false, and loaded to true to signaling
+    * that a EXECUTE Query is failed and there is error data available in the
+    * store
+    */
+    case sqlQueryActions.EXECUTE_QUERY_FAIL: {
+      return Object.assign({}, state, {
+        loading: false,
+        loaded: true,
+        success: false,
+        sqlQueryResult: [],
+        sqlQueryError: action.payload
+      })
+    }
+    
+    /*
+    * Just returns the current store/state object
+    */
+    default:
+      return state;
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/services/app-core.service.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/services/app-core.service.ts
new file mode 100755
index 0000000..ed38c26
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/services/app-core.service.ts
@@ -0,0 +1,38 @@
+/*
+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.
+*/
+import { Injectable } from '@angular/core';
+import { Store } from '@ngrx/store';
+import * as dataverseActions from '../../shared/actions/dataverse.actions'
+import * as datasetActions from '../../shared/actions/dataset.actions'
+import * as datatypesActions from '../../shared/actions/datatype.actions'
+import * as indexesActions from '../../shared/actions/index.actions'
+import * as metadataActions from '../../shared/actions/metadata.actions'
+
+/*
+* Main application service to initialize,
+* load, set App status and initial data, and synchronize app level functionality
+*/
+@Injectable()
+export class AppCoreService {
+	/*
+  	* Initialize and load metadata store structures
+	*/
+	constructor(private store: Store<any>) {
+		console.log('AsterixDB Web Console Core Service')
+		this.store.dispatch(new dataverseActions.SelectDataverses('-'));
+		this.store.dispatch(new datasetActions.SelectDatasets('-'));
+		this.store.dispatch(new datatypesActions.SelectDatatypes('-'));
+		this.store.dispatch(new indexesActions.SelectIndexes('-'));
+	}
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/services/async-metadata.service.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/services/async-metadata.service.ts
new file mode 100755
index 0000000..8492a54
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/services/async-metadata.service.ts
@@ -0,0 +1,120 @@
+/*
+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.
+*/
+import { Injectable, ApplicationRef  } from '@angular/core';
+import { Store } from '@ngrx/store';
+import { Observable } from "rxjs/Observable";
+import 'rxjs/add/operator/map';
+import 'rxjs/add/observable/from';
+import * as dataverseActions from '../../shared/actions/dataverse.actions'
+import * as datasetActions from '../../shared/actions/dataset.actions'
+import * as datatypesActions from '../../shared/actions/datatype.actions'
+import * as indexesActions from '../../shared/actions/index.actions'
+import * as metadataActions from '../../shared/actions/metadata.actions'
+
+/*
+	Metadata service watch any changes in Dataverses, Datasets, Datatypes, indexes
+	state in store and builds a tree state structure with datasets->dataverse->datatype->index relationship
+*/
+@Injectable()
+export class MetadataService {
+
+	/* Arrays to expose updated dataverses, datasets, datatypes,
+	indexes collections*/
+	dv = [];
+	ds = [];
+	dt = [];
+	idx = [];
+
+	/*
+	* contructor will initialize the store state watchers
+	*/
+	constructor(private store: Store<any>, private ref: ApplicationRef ) {
+
+		/* Watching changes in dataverse collection */
+		this.store.select(s => s.dataverse.dataverses).subscribe((data: any) => {
+			if (data.results) {
+				this.dv = []
+				for (let i = 0; i < data.results.length; i++) {
+						let node = { id: 0, DataverseName: "", Datasets:[] }
+						node.id = i
+						node.DataverseName = data.results[i]['DataverseName']
+						this.dv.push(node)
+				}
+				this.updateMetadataTree();
+			}
+		})
+
+		/* Watching changes in datasets collections */
+		this.store.select(s => s.dataset.datasets).subscribe((data: any) => {
+			if (data.results) {
+				this.ds = data.results;
+				this.updateMetadataTree();
+			}
+		})
+
+		/* Watching changes in datatypes collections */
+		this.store.select(s => s.datatype.datatypes).subscribe((data: any) => {
+			if (data.results) {
+				this.dt = data.results;
+				this.updateMetadataTree();
+			}
+		})
+
+		/* Watching changes in index collections */
+		this.store.select(s => s.index.indexes).subscribe((data: any) => {
+			if (data.results) {
+				this.idx = data.results;
+				this.updateMetadataTree();
+			}
+		})
+	}
+
+	/*
+	*	convenience function to update and return the metadata tree.
+	*/
+  	getMetadataTree(): Observable<any[]> {
+		return Observable.from(this.dv);
+	}
+	  
+  	updateMetadataTree() {
+	for (let i = 0; i < this.dv.length; i++) {
+		// Filling datasets
+		this.dv[i]['Datasets'] = [];
+		for (let j = 0; j < this.ds.length; j++) {
+			if (this.ds[j]['DataverseName'] === this.dv[i]['DataverseName']){
+
+				// Filling datatypes, there is one datatype per dataset
+				this.ds[j]['Datatype'] = [];
+				for (let k = 0; k < this.dt.length; k++) {
+					if (this.dt[k]['DatatypeName'] === this.ds[j]['DatatypeName']){
+						this.ds[j]['Datatype'] = this.dt[k]; // push(this.dt[k])
+					}
+				}
+
+				// Filling indexes
+				this.ds[j]['Indexes'] = [];
+				for (let l = 0; l < this.idx.length; l++) {
+					if (this.idx[l]['DatasetName'] === this.ds[j]['DatasetName']){
+						this.ds[j]['Indexes'].push(this.idx[l])
+					}
+				}
+
+				this.dv[i]['Datasets'].push(this.ds[j])
+			}
+		}
+	}
+
+	this.store.dispatch(new metadataActions.UpdateMetadataTree());
+	}	
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/services/async-query.service.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/services/async-query.service.ts
new file mode 100755
index 0000000..e37872e
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/app/shared/services/async-query.service.ts
@@ -0,0 +1,190 @@
+/*
+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.
+*/
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { Store } from '@ngrx/store';
+import { Observable } from "rxjs/Observable";
+import 'rxjs/add/operator/map';
+
+var AsterixRestApiUrl = 'http://localhost:19002/query/service'; 
+//var AsterixRestApiUrl = '/query-service'; 
+
+/*
+* SQL query service using AsterixDB REST API /query/service
+*/
+@Injectable()
+export class SQLService {
+
+	/*
+	* SQLQueryService constructor using
+	* HttpClient from Angular 4
+	*/
+	constructor(private http: HttpClient) {}
+
+ 	/*
+ 	* sends a select sql++ query to return all the dataverses
+	* from AsterixDB Metadata
+ 	*/
+	selectDataverses() : Observable<any[]> {
+		 let query = "SELECT VALUE dv FROM Metadata.`Dataverse` dv"
+		 return this.executeSQLQuery(query);
+  	}
+
+	/*
+	* sends a select sql++ query to return all the datasets
+	* from AsterixDB Metadata
+	*/
+  	selectDatasets() : Observable<any[]> {
+		let query = "SELECT VALUE ds FROM Metadata.`Dataset` ds"
+		return this.executeSQLQuery(query);
+  	}
+
+	/*
+	* sends a select sql++ query to return all the datatypes
+	* from AsterixDB Metadata
+	*/
+  	selectDatatypes() : Observable<any[]> {
+    	let query = "SELECT VALUE dt FROM Metadata.`Datatype` dt"
+		return this.executeSQLQuery(query);
+  	}
+
+	/*
+	* sends a select sql++ query to return all the indexes
+	* from AsterixDB Metadata
+	*/
+  	selectIndexes() : Observable<any[]> {
+    	let query = "SELECT VALUE ix FROM Metadata.`Index` ix"
+		return this.executeSQLQuery(query);
+	}
+
+	/*
+	* creates a sql++ ddl query to create a Dataverse
+	* from AsterixDB Metadata
+	*/
+	createDataverse(dataverse: string) : Observable<any[]> {
+    	let ddlQuery = "CREATE DATAVERSE " + dataverse + ";";
+		return this.executeDDLSQLQuery(ddlQuery);
+	}
+
+	/*
+	* creates a sql++ ddl query to drop a Dataverse
+	* from AsterixDB Metadata
+	*/
+	dropDataverse(dataverse: string) : Observable<any[]> {
+		let ddlQuery = "DROP DATAVERSE " + dataverse; // " IF EXISTS;";
+		return this.executeDDLSQLQuery(ddlQuery);
+	  }
+
+	/*
+	* creates a sql++ ddl query to create a Dataset
+	* from AsterixDB Metadata
+	*/
+	createDataset(dataset: string) : Observable<any[]> {
+		let ddlQuery = "CREATE DATASET " + dataset + ";";
+		return this.executeDDLSQLQuery(ddlQuery);
+	}
+
+	/*
+	* creates a sql++ ddl query to drop a Dataset
+	* from AsterixDB Metadata
+	*/
+	dropDataset(dataset: string) : Observable<any[]> {
+		let ddlQuery = "DROP DATASET " + dataset; //" IF EXISTS;";
+		return this.executeDDLSQLQuery(ddlQuery);
+	}
+
+	/*
+	* creates a sql++ ddl query to create a Datatype
+	* from AsterixDB Metadata
+	*/
+	createDatatype(datatype: string) : Observable<any[]> {
+    	let ddlQuery = "CREATE DATATYPE " + datatype + ";";
+		return this.executeDDLSQLQuery(ddlQuery);
+	}
+
+	/*
+	* creates a sql++ ddl query to drop a Datatype
+	* from AsterixDB Metadata
+	*/
+	dropDatatype(datatype: string) : Observable<any[]> {
+		let ddlQuery = "DROP TYPE " + datatype; //" IF EXISTS;";
+		return this.executeDDLSQLQuery(ddlQuery);
+	}
+
+	/*
+	* creates a sql++ ddl query to create a Index
+	* from AsterixDB Metadata
+	*/
+	createIndex(index: string) : Observable<any[]> {
+		let ddlQuery = "CREATE INDEX " + index + ";";
+		return this.executeDDLSQLQuery(ddlQuery);
+	}
+
+	/*
+	* creates a sql++ ddl query to drop a Index
+	* from AsterixDB Metadata
+	*/
+	dropIndex(index: string) : Observable<any[]> {
+		let ddlQuery = "DROP INDEX " + index; // + " IF EXISTS;";
+		return this.executeDDLSQLQuery(ddlQuery);
+	}
+
+	/*
+	* Executes a sql++ ddl query against AsterixDB
+	* response is a JSON object with following structure:
+		  metrics: Metrics;
+		  requestId: string;
+		  results: any[];
+		  signature: string;
+		  status: string;
+	*/
+	executeDDLSQLQuery(ddlQuery: string): Observable<any[]> {
+    const apiUrl = AsterixRestApiUrl;
+		return this.http.post(apiUrl, {statement: ddlQuery})
+			.map((response: Response) => { return response })
+			.catch((error: any) => this.handleExecuteQueryError(error));
+	}
+
+	/*
+	* Executes a sql++ query against AsterixDB
+	* response is a JSON object with following structure:
+		  metrics: Metrics;
+		  requestId: string;
+		  results: any[];
+		  signature: string;
+		  status: string;
+	*/
+	executeSQLQuery(query: string): Observable<any[]> {
+    const apiUrl = AsterixRestApiUrl;
+		return this.http.post(apiUrl, {statement: query})
+			.map((response: Response) => { return response })
+			.catch((error: any) => this.handleExecuteQueryError(error));
+	}
+
+	/*
+	* AsterixDB query-service API raises HTTP errors if the sql++ query has some
+	* syntax error, or some elements in the query are not found
+	* this function extract the error JSON object with the relevant information
+		response is a JSON object with following structure:
+		  metrics: Metrics;
+		  requestId: string;
+		  errors: any[];
+		  signature: string;
+		  status: string;
+	*/
+	private handleExecuteQueryError(error: any): Promise<any> {
+		console.log(error)
+		return Promise.reject(error.error || error);
+	}
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/assets/asterixdb_tm.png b/asterixdb/asterix-app/src/main/resources/dashboard/src/assets/asterixdb_tm.png
new file mode 100755
index 0000000..0fa2ff0
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/assets/asterixdb_tm.png
Binary files differ
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/environments/environment.prod.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/environments/environment.prod.ts
new file mode 100755
index 0000000..ca15503
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/environments/environment.prod.ts
@@ -0,0 +1,16 @@
+/*
+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.
+*/
+export const environment = {
+  production: true
+};
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/environments/environment.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/environments/environment.ts
new file mode 100755
index 0000000..2750f0a
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/environments/environment.ts
@@ -0,0 +1,21 @@
+/*
+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.
+*/
+// The file contents for the current environment will overwrite these during build.
+// The build system defaults to the dev environment which uses `environment.ts`, but if you do
+// `ng build --env=prod` then `environment.prod.ts` will be used instead.
+// The list of which env maps to which file can be found in `.angular-cli.json`.
+
+export const environment = {
+  production: false
+};
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/favicon.ico b/asterixdb/asterix-app/src/main/resources/dashboard/src/favicon.ico
new file mode 100755
index 0000000..282c28d
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/favicon.ico
Binary files differ
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/index.html b/asterixdb/asterix-app/src/main/resources/dashboard/src/index.html
new file mode 100755
index 0000000..8dab418
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/index.html
@@ -0,0 +1,30 @@
+<!--/*
+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.
+*/-->
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <title>AsterixDb Administration Console</title>
+    <base href="/">
+    <link rel="icon" type="image/x-icon" href="favicon.ico">
+    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono">
+    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
+    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
+    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
+  </head>
+  <body>
+    <awc-root></awc-root>
+  </body>
+</html>
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/main.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/main.scss
new file mode 100755
index 0000000..cc02584
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/main.scss
@@ -0,0 +1,29 @@
+/*
+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.
+*/
+@import './styles/general';
+
+// Include material core styles.
+@import '~@angular/material/theming';
+@include mat-core();
+
+// Define the light theme.
+$primary: mat-palette($mat-grey);
+$accent:  mat-palette($mat-orange, A200, A100, A400);
+
+$theme: mat-light-theme($primary, $accent);
+@include angular-material-theme($theme);
+
+* {
+    font-family: Roboto, "Helvetica Neue", sans-serif;
+  }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/main.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/main.ts
new file mode 100755
index 0000000..446a9dc
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/main.ts
@@ -0,0 +1,26 @@
+/*
+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.
+*/
+import './polyfills.ts';
+import 'hammerjs';
+import { enableProdMode } from '@angular/core';
+import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
+import { AppModule } from './app/app.module';
+import { environment } from './environments/environment';
+
+if (environment.production) {
+  enableProdMode();
+}
+
+platformBrowserDynamic().bootstrapModule(AppModule)
+  .catch(err => console.log(err));
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/polyfills.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/polyfills.ts
new file mode 100755
index 0000000..20d4075
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/polyfills.ts
@@ -0,0 +1,76 @@
+/**
+ * This file includes polyfills needed by Angular and is loaded before the app.
+ * You can add your own extra polyfills to this file.
+ *
+ * This file is divided into 2 sections:
+ *   1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
+ *   2. Application imports. Files imported after ZoneJS that should be loaded before your main
+ *      file.
+ *
+ * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
+ * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
+ * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
+ *
+ * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
+ */
+
+/***************************************************************************************************
+ * BROWSER POLYFILLS
+ */
+
+/** IE9, IE10 and IE11 requires all of the following polyfills. **/
+// import 'core-js/es6/symbol';
+// import 'core-js/es6/object';
+// import 'core-js/es6/function';
+// import 'core-js/es6/parse-int';
+// import 'core-js/es6/parse-float';
+// import 'core-js/es6/number';
+// import 'core-js/es6/math';
+// import 'core-js/es6/string';
+// import 'core-js/es6/date';
+// import 'core-js/es6/array';
+// import 'core-js/es6/regexp';
+// import 'core-js/es6/map';
+// import 'core-js/es6/weak-map';
+// import 'core-js/es6/set';
+
+/** IE10 and IE11 requires the following for NgClass support on SVG elements */
+// import 'classlist.js';  // Run `npm install --save classlist.js`.
+
+/** IE10 and IE11 requires the following for the Reflect API. */
+// import 'core-js/es6/reflect';
+
+
+/** Evergreen browsers require these. **/
+// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove.
+import 'core-js/es7/reflect';
+
+
+/**
+ * Required to support Web Animations `@angular/platform-browser/animations`.
+ * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation
+ **/
+// import 'web-animations-js';  // Run `npm install --save web-animations-js`.
+
+
+
+/***************************************************************************************************
+ * Zone JS is required by Angular itself.
+ */
+import 'zone.js/dist/zone';  // Included with Angular CLI.
+
+
+
+/***************************************************************************************************
+ * APPLICATION IMPORTS
+ */
+
+/**
+ * Date, currency, decimal and percent pipes.
+ * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10
+ */
+// import 'intl';  // Run `npm install --save intl`.
+/**
+ * Need to import at least one locale-data with intl.
+ */
+// import 'intl/locale-data/jsonp/en';
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/styles/_constants.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/styles/_constants.scss
new file mode 100755
index 0000000..b3a5d07
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/styles/_constants.scss
@@ -0,0 +1,21 @@
+/*
+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.
+*/
+@import '../../node_modules/@angular/material/theming';
+
+$small-breakpoint-width: 720px;
+
+/* For desktop, the content should be aligned with the page title. */
+$content-padding-side: 70px;
+$content-padding-side-xs: 15px;
+$awc-spacing-unit: 8px;
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/styles/_general.scss b/asterixdb/asterix-app/src/main/resources/dashboard/src/styles/_general.scss
new file mode 100755
index 0000000..9691cf8
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/styles/_general.scss
@@ -0,0 +1,32 @@
+/*
+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.
+*/
+html {
+  box-sizing: border-box;
+}
+
+body {
+  font-family: "Roboto Mono", monospace;
+  font-size: 0.80rem;
+	font-weight: 500;
+}
+
+// Tree and table styling
+
+.ui-datatable{
+  //overflow : auto
+}
+
+.ui-datatable .ui-sortable-column div.ui-dt-c {
+  padding-right: 15px !important;
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/test.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/test.ts
new file mode 100755
index 0000000..6edcb85
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/test.ts
@@ -0,0 +1,46 @@
+/*
+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.
+*/
+
+// This file is required by karma.conf.js and loads recursively all the .spec and framework files
+
+import 'zone.js/dist/long-stack-trace-zone';
+import 'zone.js/dist/proxy.js';
+import 'zone.js/dist/sync-test';
+import 'zone.js/dist/jasmine-patch';
+import 'zone.js/dist/async-test';
+import 'zone.js/dist/fake-async-test';
+import { getTestBed } from '@angular/core/testing';
+import {
+  BrowserDynamicTestingModule,
+  platformBrowserDynamicTesting
+} from '@angular/platform-browser-dynamic/testing';
+
+// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any.
+declare const __karma__: any;
+declare const require: any;
+
+// Prevent Karma from running prematurely.
+__karma__.loaded = function () {};
+
+// First, initialize the Angular testing environment.
+getTestBed().initTestEnvironment(
+  BrowserDynamicTestingModule,
+  platformBrowserDynamicTesting()
+);
+// Then we find all the tests.
+const context = require.context('./', true, /\.spec\.ts$/);
+// And load the modules.
+context.keys().map(context);
+// Finally, start Karma to run the tests.
+__karma__.start();
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/tsconfig.app.json b/asterixdb/asterix-app/src/main/resources/dashboard/src/tsconfig.app.json
new file mode 100755
index 0000000..54434df
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/tsconfig.app.json
@@ -0,0 +1,26 @@
+/*
+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.
+*/
+{
+  "extends": "../tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../out-tsc/app",
+    "baseUrl": "./",
+    "module": "es2015",
+    "types": []
+  },
+  "exclude": [
+    "test.ts",
+    "**/*.spec.ts"
+  ]
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/tsconfig.spec.json b/asterixdb/asterix-app/src/main/resources/dashboard/src/tsconfig.spec.json
new file mode 100755
index 0000000..15bcf37
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/tsconfig.spec.json
@@ -0,0 +1,33 @@
+/*
+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.
+*/
+{
+  "extends": "../tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../out-tsc/spec",
+    "baseUrl": "./",
+    "module": "commonjs",
+    "target": "es5",
+    "types": [
+      "jasmine",
+      "node"
+    ]
+  },
+  "files": [
+    "test.ts"
+  ],
+  "include": [
+    "**/*.spec.ts",
+    "**/*.d.ts"
+  ]
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/src/typings.d.ts b/asterixdb/asterix-app/src/main/resources/dashboard/src/typings.d.ts
new file mode 100755
index 0000000..ef5c7bd
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/src/typings.d.ts
@@ -0,0 +1,5 @@
+/* SystemJS module definition */
+declare var module: NodeModule;
+interface NodeModule {
+  id: string;
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/static/3rdpartylicenses.txt b/asterixdb/asterix-app/src/main/resources/dashboard/static/3rdpartylicenses.txt
new file mode 100644
index 0000000..03758a4
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/static/3rdpartylicenses.txt
@@ -0,0 +1,222 @@
+@angular/animations@5.1.1
+MIT
+MIT
+
+@angular/common@5.1.1
+MIT
+MIT
+
+@angular/core@5.1.1
+MIT
+MIT
+
+@angular/platform-browser@5.1.1
+MIT
+MIT
+
+@ngrx/store-devtools@4.1.1
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
+
+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.
+
+codemirror@5.32.0
+MIT
+MIT License
+
+Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others
+
+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.
+
+core-js@2.5.3
+MIT
+Copyright (c) 2014-2017 Denis Pushkarev
+
+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-saver@1.3.3
+MIT
+The MIT License
+
+Copyright © 2016 [Eli Grey][1].
+
+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.
+
+  [1]: http://eligrey.com
+
+hammerjs@2.0.8
+MIT
+The MIT License (MIT)
+
+Copyright (C) 2011-2014 by Jorik Tangelder (Eight Media)
+
+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.
+
+primeng@4.3.0
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2016-2017 PrimeTek
+
+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.
+
+@angular/forms@5.1.1
+MIT
+MIT
+
+@ngrx/store@4.1.1
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald
+
+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.
+
+webpack@3.8.1
+MIT
+Copyright JS Foundation and other contributors
+
+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.
+
+zone.js@0.8.18
+MIT
+The MIT License
+
+Copyright (c) 2016 Google, Inc.
+
+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.
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/static/assets/asterixdb_tm.png b/asterixdb/asterix-app/src/main/resources/dashboard/static/assets/asterixdb_tm.png
new file mode 100644
index 0000000..0fa2ff0
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/static/assets/asterixdb_tm.png
Binary files differ
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/static/color.c7a33805ffda0d32bd2a.png b/asterixdb/asterix-app/src/main/resources/dashboard/static/color.c7a33805ffda0d32bd2a.png
new file mode 100644
index 0000000..561cdd9
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/static/color.c7a33805ffda0d32bd2a.png
Binary files differ
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/static/favicon.ico b/asterixdb/asterix-app/src/main/resources/dashboard/static/favicon.ico
new file mode 100644
index 0000000..282c28d
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/static/favicon.ico
Binary files differ
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/static/index.html b/asterixdb/asterix-app/src/main/resources/dashboard/static/index.html
new file mode 100644
index 0000000..c34009b
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/static/index.html
@@ -0,0 +1,13 @@
+<!--/*
+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.
+*/--><!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><title>AsterixDb Administration Console</title><base href="/dashboard/static/"><link rel="icon" type="image/x-icon" href="favicon.ico"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500"><link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"><link href="styles.9f50282210bba5318775.bundle.css" rel="stylesheet"/></head><body><awc-root></awc-root><script type="text/javascript" src="inline.66bd6b83f86cf773a001.bundle.js"></script><script type="text/javascript" src="polyfills.32ca5670d6503e090789.bundle.js"></script><script type="text/javascript" src="scripts.da68998bdd77aff4e764.bundle.js"></script><script type="text/javascript" src="main.37b7b7cad656490b195a.bundle.js"></script></body></html>
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/static/inline.66bd6b83f86cf773a001.bundle.js b/asterixdb/asterix-app/src/main/resources/dashboard/static/inline.66bd6b83f86cf773a001.bundle.js
new file mode 100644
index 0000000..1868b98
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/static/inline.66bd6b83f86cf773a001.bundle.js
@@ -0,0 +1 @@
+!function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var u,i,f,l=0,s=[];l<t.length;l++)o[i=t[l]]&&s.push(o[i][0]),o[i]=0;for(u in c)Object.prototype.hasOwnProperty.call(c,u)&&(e[u]=c[u]);for(r&&r(t,c,a);s.length;)s.shift()();if(a)for(l=0;l<a.length;l++)f=n(n.s=a[l]);return f};var t={},o={3:0};n.e=function(e){function r(){u.onerror=u.onload=null,clearTimeout(i);var n=o[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),o[e]=void 0)}var t=o[e];if(0===t)return new Promise(function(e){e()});if(t)return t[2];var c=new Promise(function(n,r){t=o[e]=[n,r]});t[2]=c;var a=document.getElementsByTagName("head")[0],u=document.createElement("script");u.type="text/javascript",u.charset="utf-8",u.async=!0,u.timeout=12e4,n.nc&&u.setAttribute("nonce",n.nc),u.src=n.p+""+e+"."+{0:"37b7b7cad656490b195a",1:"32ca5670d6503e090789",2:"bd9c51474f663c9da388"}[e]+".chunk.js";var i=setTimeout(r,12e4);return u.onerror=u.onload=r,a.appendChild(u),c},n.m=e,n.c=t,n.d=function(e,r,t){n.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},n.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(r,"a",r),r},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/static/line.567f57385ea3dde2c9ae.gif b/asterixdb/asterix-app/src/main/resources/dashboard/static/line.567f57385ea3dde2c9ae.gif
new file mode 100644
index 0000000..64e2280
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/static/line.567f57385ea3dde2c9ae.gif
Binary files differ
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/static/main.37b7b7cad656490b195a.bundle.js b/asterixdb/asterix-app/src/main/resources/dashboard/static/main.37b7b7cad656490b195a.bundle.js
new file mode 100644
index 0000000..43d0410
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/static/main.37b7b7cad656490b195a.bundle.js
@@ -0,0 +1 @@
+webpackJsonp([0],{"+GRi":function(e,t,n){var r=n("Wo2w"),i=n("Wy9r");e.exports=function(e){return r(i(e))}},"+iEx":function(e,t,n){n("fHxy"),n("5GJ3"),n("X0O/"),n("HCkn"),n("ncNB"),n("soMw"),n("8sYH"),n("IJ3P"),n("t6ta"),e.exports=n("b4gG").Reflect},"+pQw":function(e,t,n){var r=n("JXkd");e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},"/zAi":function(e,t,n){"use strict";var r=n("6Xbx").__decorate,i=n("6Xbx").__metadata;Object.defineProperty(t,"__esModule",{value:!0});var o=n("LMZF"),l=n("Un6q"),a=n("LMZF"),s=function(){};s=r([a.Component({selector:"p-header",template:"<ng-content></ng-content>"})],s),t.Header=s;var u=function(){};u=r([a.Component({selector:"p-footer",template:"<ng-content></ng-content>"})],u),t.Footer=u;var c=function(){function e(e){this.template=e}return e.prototype.getType=function(){return this.name},e}();r([o.Input(),i("design:type",String)],c.prototype,"type",void 0),r([o.Input("pTemplate"),i("design:type",String)],c.prototype,"name",void 0),c=r([o.Directive({selector:"[pTemplate]",host:{}})],c),t.PrimeTemplate=c;var d=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.templateRef,{$implicit:this.item,index:this.index})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],d.prototype,"item",void 0),r([o.Input(),i("design:type",Number)],d.prototype,"index",void 0),r([o.Input("pTemplateWrapper"),i("design:type",o.TemplateRef)],d.prototype,"templateRef",void 0),d=r([o.Directive({selector:"[pTemplateWrapper]"})],d),t.TemplateWrapper=d;var p=function(){function e(){this.filterType="text",this.exportable=!0,this.sortFunction=new o.EventEmitter}return e.prototype.ngAfterContentInit=function(){var e=this;this.templates.forEach(function(t){switch(t.getType()){case"header":e.headerTemplate=t.template;break;case"body":e.bodyTemplate=t.template;break;case"footer":e.footerTemplate=t.template;break;case"filter":e.filterTemplate=t.template;break;case"editor":e.editorTemplate=t.template;break;default:e.bodyTemplate=t.template}})},e}();r([o.Input(),i("design:type",String)],p.prototype,"field",void 0),r([o.Input(),i("design:type",String)],p.prototype,"colId",void 0),r([o.Input(),i("design:type",String)],p.prototype,"sortField",void 0),r([o.Input(),i("design:type",String)],p.prototype,"filterField",void 0),r([o.Input(),i("design:type",String)],p.prototype,"header",void 0),r([o.Input(),i("design:type",String)],p.prototype,"footer",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"sortable",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"editable",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"filter",void 0),r([o.Input(),i("design:type",String)],p.prototype,"filterMatchMode",void 0),r([o.Input(),i("design:type",String)],p.prototype,"filterType",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"excludeGlobalFilter",void 0),r([o.Input(),i("design:type",Number)],p.prototype,"rowspan",void 0),r([o.Input(),i("design:type",Number)],p.prototype,"colspan",void 0),r([o.Input(),i("design:type",String)],p.prototype,"scope",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"style",void 0),r([o.Input(),i("design:type",String)],p.prototype,"styleClass",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"exportable",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"headerStyle",void 0),r([o.Input(),i("design:type",String)],p.prototype,"headerStyleClass",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"bodyStyle",void 0),r([o.Input(),i("design:type",String)],p.prototype,"bodyStyleClass",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"footerStyle",void 0),r([o.Input(),i("design:type",String)],p.prototype,"footerStyleClass",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"hidden",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"expander",void 0),r([o.Input(),i("design:type",String)],p.prototype,"selectionMode",void 0),r([o.Input(),i("design:type",String)],p.prototype,"filterPlaceholder",void 0),r([o.Input(),i("design:type",Number)],p.prototype,"filterMaxlength",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"frozen",void 0),r([o.Output(),i("design:type",o.EventEmitter)],p.prototype,"sortFunction",void 0),r([o.ContentChildren(c),i("design:type",o.QueryList)],p.prototype,"templates",void 0),r([o.ContentChild(o.TemplateRef),i("design:type",o.TemplateRef)],p.prototype,"template",void 0),p=r([a.Component({selector:"p-column",template:""})],p),t.Column=p;var f=function(){};r([o.ContentChildren(p),i("design:type",o.QueryList)],f.prototype,"columns",void 0),f=r([a.Component({selector:"p-row",template:""})],f),t.Row=f;var h=function(){};r([o.Input(),i("design:type",Boolean)],h.prototype,"frozen",void 0),r([o.ContentChildren(f),i("design:type",o.QueryList)],h.prototype,"rows",void 0),h=r([a.Component({selector:"p-headerColumnGroup",template:""})],h),t.HeaderColumnGroup=h;var m=function(){};r([o.Input(),i("design:type",Boolean)],m.prototype,"frozen",void 0),r([o.ContentChildren(f),i("design:type",o.QueryList)],m.prototype,"rows",void 0),m=r([a.Component({selector:"p-footerColumnGroup",template:""})],m),t.FooterColumnGroup=m;var g=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.column.bodyTemplate,{$implicit:this.column,rowData:this.rowData,rowIndex:this.rowIndex})},e.prototype.ngOnChanges=function(e){this.view&&"rowIndex"in e&&(this.view.context.rowIndex=e.rowIndex.currentValue)},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],g.prototype,"column",void 0),r([o.Input(),i("design:type",Object)],g.prototype,"rowData",void 0),r([o.Input(),i("design:type",Number)],g.prototype,"rowIndex",void 0),g=r([a.Component({selector:"p-columnBodyTemplateLoader",template:""})],g),t.ColumnBodyTemplateLoader=g;var y=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.column.headerTemplate,{$implicit:this.column})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],y.prototype,"column",void 0),y=r([a.Component({selector:"p-columnHeaderTemplateLoader",template:""})],y),t.ColumnHeaderTemplateLoader=y;var v=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.column.footerTemplate,{$implicit:this.column})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],v.prototype,"column",void 0),v=r([a.Component({selector:"p-columnFooterTemplateLoader",template:""})],v),t.ColumnFooterTemplateLoader=v;var b=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.column.filterTemplate,{$implicit:this.column})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],b.prototype,"column",void 0),b=r([a.Component({selector:"p-columnFilterTemplateLoader",template:""})],b),t.ColumnFilterTemplateLoader=b;var _=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.column.editorTemplate,{$implicit:this.column,rowData:this.rowData,rowIndex:this.rowIndex})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([o.Input(),i("design:type",Object)],_.prototype,"column",void 0),r([o.Input(),i("design:type",Object)],_.prototype,"rowData",void 0),r([o.Input(),i("design:type",Object)],_.prototype,"rowIndex",void 0),_=r([a.Component({selector:"p-columnEditorTemplateLoader",template:""})],_),t.ColumnEditorTemplateLoader=_;var w=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.template&&(this.view=this.viewContainer.createEmbeddedView(this.template,{$implicit:this.data}))},e.prototype.ngOnDestroy=function(){this.view&&this.view.destroy()},e}();r([o.Input(),i("design:type",o.TemplateRef)],w.prototype,"template",void 0),r([o.Input(),i("design:type",Object)],w.prototype,"data",void 0),w=r([a.Component({selector:"p-templateLoader",template:""})],w),t.TemplateLoader=w;var x=function(){};x=r([o.NgModule({imports:[l.CommonModule],exports:[s,u,p,d,y,g,v,b,c,w,f,h,m,_],declarations:[s,u,p,d,y,g,v,b,c,w,f,h,m,_]})],x),t.SharedModule=x},0:function(e,t,n){e.exports=n("cDNt")},"0l2a":function(e,t,n){"use strict";var r=n("6Xbx"),i=n("E9/g"),o=function(){function e(e){this.total=e}return e.prototype.call=function(e,t){return t.subscribe(new l(e,this.total))},e}(),l=function(e){function t(t,n){e.call(this,t),this.total=n,this.count=0}return Object(r.__extends)(t,e),t.prototype._next=function(e){++this.count>this.total&&this.destination.next(e)},t}(i.a);t.a=function(e){return function(e){return function(t){return t.lift(new o(e))}}(e)(this)}},"0nO6":function(e,t,n){"use strict";function r(e){return null==e||0===e.length}function i(e){return null!=e}function o(e){var t=Object(D["\u0275isPromise"])(e)?R(e):e;if(!Object(D["\u0275isObservable"])(t))throw new Error("Expected validator to return Promise or Observable.");return t}function l(e){var t=e.reduce(function(e,t){return null!=t?Object(k.__assign)({},e,t):e},{});return 0===Object.keys(t).length?null:t}function a(e){return e.validate?function(t){return e.validate(t)}:e}function s(e){return e.validate?function(t){return e.validate(t)}:e}function u(){throw new Error("unimplemented")}function c(e,t){return null==e?""+t:(t&&"object"==typeof t&&(t="Object"),(e+": "+t).slice(0,50))}function d(e,t){return null==e?""+t:("string"==typeof t&&(t="'"+t+"'"),t&&"object"==typeof t&&(t="Object"),(e+": "+t).slice(0,50))}function p(e,t){return t.path.concat([e])}function f(e,t){e||y(t,"Cannot find control with"),t.valueAccessor||y(t,"No value accessor for form control with"),e.validator=V.compose([e.validator,t.validator]),e.asyncValidator=V.composeAsync([e.asyncValidator,t.asyncValidator]),t.valueAccessor.writeValue(e.value),function(e,t){t.valueAccessor.registerOnChange(function(n){e._pendingValue=n,e._pendingChange=!0,e._pendingDirty=!0,"change"===e.updateOn&&h(e,t)})}(e,t),function(t,n){e.registerOnChange(function(e,t){n.valueAccessor.writeValue(e),t&&n.viewToModelUpdate(e)})}(0,t),function(e,t){t.valueAccessor.registerOnTouched(function(){e._pendingTouched=!0,"blur"===e.updateOn&&e._pendingChange&&h(e,t),"submit"!==e.updateOn&&e.markAsTouched()})}(e,t),t.valueAccessor.setDisabledState&&e.registerOnDisabledChange(function(e){t.valueAccessor.setDisabledState(e)}),t._rawValidators.forEach(function(t){t.registerOnValidatorChange&&t.registerOnValidatorChange(function(){return e.updateValueAndValidity()})}),t._rawAsyncValidators.forEach(function(t){t.registerOnValidatorChange&&t.registerOnValidatorChange(function(){return e.updateValueAndValidity()})})}function h(e,t){t.viewToModelUpdate(e._pendingValue),e._pendingDirty&&e.markAsDirty(),e.setValue(e._pendingValue,{emitModelToViewChange:!1}),e._pendingChange=!1}function m(e,t){null==e&&y(t,"Cannot find control with"),e.validator=V.compose([e.validator,t.validator]),e.asyncValidator=V.composeAsync([e.asyncValidator,t.asyncValidator])}function g(e){return y(e,"There is no FormControl instance attached to form control element with")}function y(e,t){var n;throw n=e.path.length>1?"path: '"+e.path.join(" -> ")+"'":e.path[0]?"name: '"+e.path+"'":"unspecified name attribute",new Error(t+" "+n)}function v(e){return null!=e?V.compose(e.map(a)):null}function b(e){return null!=e?V.composeAsync(e.map(s)):null}function _(e,t){if(!e.hasOwnProperty("model"))return!1;var n=e.model;return!!n.isFirstChange()||!Object(D["\u0275looseIdentical"])(t,n.currentValue)}function w(e,t){e._syncPendingControls(),t.forEach(function(e){var t=e.control;"submit"===t.updateOn&&t._pendingChange&&(e.viewToModelUpdate(t._pendingValue),t._pendingChange=!1)})}function x(e,t){if(!t)return null;var n=void 0,r=void 0,i=void 0;return t.forEach(function(t){t.constructor===U?n=t:function(e){return le.some(function(t){return e.constructor===t})}(t)?(r&&y(e,"More than one built-in value accessor matches form control with"),r=t):(i&&y(e,"More than one custom value accessor matches form control with"),i=t)}),i||r||n||(y(e,"No valid value accessor for form control with"),null)}function C(e,t){var n=e.indexOf(t);n>-1&&e.splice(n,1)}function E(e){var t=O(e)?e.validators:e;return Array.isArray(t)?v(t):t||null}function S(e,t){var n=O(t)?t.asyncValidators:e;return Array.isArray(n)?b(n):n||null}function O(e){return null!=e&&!Array.isArray(e)&&"object"==typeof e}function T(e){return!(e instanceof je||e instanceof Le||e instanceof ze)}Object.defineProperty(t,"__esModule",{value:!0});var k=n("6Xbx"),D=n("LMZF"),I=n("Jsyr"),R=n("KRwF").a.create,M=n("dmC+"),P=n("RyBE");n.d(t,"AbstractControlDirective",function(){return N}),n.d(t,"AbstractFormGroupDirective",function(){return ae}),n.d(t,"CheckboxControlValueAccessor",function(){return H}),n.d(t,"ControlContainer",function(){return A}),n.d(t,"NG_VALUE_ACCESSOR",function(){return z}),n.d(t,"COMPOSITION_BUFFER_MODE",function(){return q}),n.d(t,"DefaultValueAccessor",function(){return U}),n.d(t,"NgControl",function(){return $}),n.d(t,"NgControlStatus",function(){return ce}),n.d(t,"NgControlStatusGroup",function(){return de}),n.d(t,"NgForm",function(){return xe}),n.d(t,"NgModel",function(){return Re}),n.d(t,"NgModelGroup",function(){return ke}),n.d(t,"RadioControlValueAccessor",function(){return Y}),n.d(t,"FormControlDirective",function(){return Ne}),n.d(t,"FormControlName",function(){return He}),n.d(t,"FormGroupDirective",function(){return Le}),n.d(t,"FormArrayName",function(){return ze}),n.d(t,"FormGroupName",function(){return je}),n.d(t,"NgSelectOption",function(){return ne}),n.d(t,"SelectControlValueAccessor",function(){return te}),n.d(t,"SelectMultipleControlValueAccessor",function(){return ie}),n.d(t,"CheckboxRequiredValidator",function(){return Ge}),n.d(t,"EmailValidator",function(){return $e}),n.d(t,"MaxLengthValidator",function(){return Xe}),n.d(t,"MinLengthValidator",function(){return Qe}),n.d(t,"PatternValidator",function(){return et}),n.d(t,"RequiredValidator",function(){return Ue}),n.d(t,"FormBuilder",function(){return tt}),n.d(t,"AbstractControl",function(){return ge}),n.d(t,"FormArray",function(){return be}),n.d(t,"FormControl",function(){return ye}),n.d(t,"FormGroup",function(){return ve}),n.d(t,"NG_ASYNC_VALIDATORS",function(){return F}),n.d(t,"NG_VALIDATORS",function(){return L}),n.d(t,"Validators",function(){return V}),n.d(t,"VERSION",function(){return nt}),n.d(t,"FormsModule",function(){return st}),n.d(t,"ReactiveFormsModule",function(){return ut}),n.d(t,"\u0275ba",function(){return at}),n.d(t,"\u0275z",function(){return lt}),n.d(t,"\u0275x",function(){return it}),n.d(t,"\u0275y",function(){return ot}),n.d(t,"\u0275a",function(){return B}),n.d(t,"\u0275b",function(){return W}),n.d(t,"\u0275c",function(){return se}),n.d(t,"\u0275d",function(){return ue}),n.d(t,"\u0275e",function(){return _e}),n.d(t,"\u0275f",function(){return De}),n.d(t,"\u0275g",function(){return Te}),n.d(t,"\u0275bf",function(){return rt}),n.d(t,"\u0275bb",function(){return G}),n.d(t,"\u0275bc",function(){return K}),n.d(t,"\u0275h",function(){return Z}),n.d(t,"\u0275i",function(){return Q}),n.d(t,"\u0275bd",function(){return X}),n.d(t,"\u0275be",function(){return J}),n.d(t,"\u0275j",function(){return Pe}),n.d(t,"\u0275k",function(){return Be}),n.d(t,"\u0275l",function(){return Ae}),n.d(t,"\u0275n",function(){return Ve}),n.d(t,"\u0275m",function(){return Fe}),n.d(t,"\u0275o",function(){return ee}),n.d(t,"\u0275q",function(){return oe}),n.d(t,"\u0275p",function(){return re}),n.d(t,"\u0275s",function(){return qe}),n.d(t,"\u0275t",function(){return Ke}),n.d(t,"\u0275v",function(){return Ye}),n.d(t,"\u0275u",function(){return Ze}),n.d(t,"\u0275w",function(){return Je}),n.d(t,"\u0275r",function(){return We});var N=function(){function e(){}return Object.defineProperty(e.prototype,"value",{get:function(){return this.control?this.control.value:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return this.control?this.control.valid:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"invalid",{get:function(){return this.control?this.control.invalid:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"pending",{get:function(){return this.control?this.control.pending:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"disabled",{get:function(){return this.control?this.control.disabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"enabled",{get:function(){return this.control?this.control.enabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"errors",{get:function(){return this.control?this.control.errors:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"pristine",{get:function(){return this.control?this.control.pristine:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"dirty",{get:function(){return this.control?this.control.dirty:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"touched",{get:function(){return this.control?this.control.touched:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"status",{get:function(){return this.control?this.control.status:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"untouched",{get:function(){return this.control?this.control.untouched:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"statusChanges",{get:function(){return this.control?this.control.statusChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valueChanges",{get:function(){return this.control?this.control.valueChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"path",{get:function(){return null},enumerable:!0,configurable:!0}),e.prototype.reset=function(e){void 0===e&&(e=void 0),this.control&&this.control.reset(e)},e.prototype.hasError=function(e,t){return!!this.control&&this.control.hasError(e,t)},e.prototype.getError=function(e,t){return this.control?this.control.getError(e,t):null},e}(),A=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(k.__extends)(t,e),Object.defineProperty(t.prototype,"formDirective",{get:function(){return null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return null},enumerable:!0,configurable:!0}),t}(N),L=new D.InjectionToken("NgValidators"),F=new D.InjectionToken("NgAsyncValidators"),j=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,V=function(){function e(){}return e.min=function(e){return function(t){if(r(t.value)||r(e))return null;var n=parseFloat(t.value);return!isNaN(n)&&n<e?{min:{min:e,actual:t.value}}:null}},e.max=function(e){return function(t){if(r(t.value)||r(e))return null;var n=parseFloat(t.value);return!isNaN(n)&&n>e?{max:{max:e,actual:t.value}}:null}},e.required=function(e){return r(e.value)?{required:!0}:null},e.requiredTrue=function(e){return!0===e.value?null:{required:!0}},e.email=function(e){return j.test(e.value)?null:{email:!0}},e.minLength=function(e){return function(t){if(r(t.value))return null;var n=t.value?t.value.length:0;return n<e?{minlength:{requiredLength:e,actualLength:n}}:null}},e.maxLength=function(e){return function(t){var n=t.value?t.value.length:0;return n>e?{maxlength:{requiredLength:e,actualLength:n}}:null}},e.pattern=function(t){if(!t)return e.nullValidator;var n,i;return"string"==typeof t?(i="^"+t+"$",n=new RegExp(i)):(i=t.toString(),n=t),function(e){if(r(e.value))return null;var t=e.value;return n.test(t)?null:{pattern:{requiredPattern:i,actualValue:t}}}},e.nullValidator=function(e){return null},e.compose=function(e){if(!e)return null;var t=e.filter(i);return 0==t.length?null:function(e){return l(function(e,n){return t.map(function(t){return t(e)})}(e))}},e.composeAsync=function(e){if(!e)return null;var t=e.filter(i);return 0==t.length?null:function(e){var n=function(e,n){return t.map(function(t){return t(e)})}(e).map(o);return M.a.call(Object(I.a)(n),l)}},e}(),z=new D.InjectionToken("NgValueAccessor"),B={provide:z,useExisting:Object(D.forwardRef)(function(){return H}),multi:!0},H=function(){function e(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return e.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"checked",e)},e.prototype.registerOnChange=function(e){this.onChange=e},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e}(),W={provide:z,useExisting:Object(D.forwardRef)(function(){return U}),multi:!0},q=new D.InjectionToken("CompositionEventMode"),U=function(){function e(e,t,n){this._renderer=e,this._elementRef=t,this._compositionMode=n,this.onChange=function(e){},this.onTouched=function(){},this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function(){var e=Object(P.s)()?Object(P.s)().getUserAgent():"";return/android (\d+)/.test(e.toLowerCase())}())}return e.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"value",null==e?"":e)},e.prototype.registerOnChange=function(e){this.onChange=e},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e.prototype._handleInput=function(e){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(e)},e.prototype._compositionStart=function(){this._composing=!0},e.prototype._compositionEnd=function(e){this._composing=!1,this._compositionMode&&this.onChange(e)},e}(),G={provide:z,useExisting:Object(D.forwardRef)(function(){return K}),multi:!0},K=function(){function e(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return e.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"value",null==e?"":e)},e.prototype.registerOnChange=function(e){this.onChange=function(t){e(""==t?null:parseFloat(t))}},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e}(),$=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._parent=null,t.name=null,t.valueAccessor=null,t._rawValidators=[],t._rawAsyncValidators=[],t}return Object(k.__extends)(t,e),Object.defineProperty(t.prototype,"validator",{get:function(){return u()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return u()},enumerable:!0,configurable:!0}),t}(N),Z={provide:z,useExisting:Object(D.forwardRef)(function(){return Y}),multi:!0},Q=function(){function e(){this._accessors=[]}return e.prototype.add=function(e,t){this._accessors.push([e,t])},e.prototype.remove=function(e){for(var t=this._accessors.length-1;t>=0;--t)if(this._accessors[t][1]===e)return void this._accessors.splice(t,1)},e.prototype.select=function(e){var t=this;this._accessors.forEach(function(n){t._isSameGroup(n,e)&&n[1]!==e&&n[1].fireUncheck(e.value)})},e.prototype._isSameGroup=function(e,t){return!!e[0].control&&e[0]._parent===t._control._parent&&e[1].name===t.name},e}(),Y=function(){function e(e,t,n,r){this._renderer=e,this._elementRef=t,this._registry=n,this._injector=r,this.onChange=function(){},this.onTouched=function(){}}return e.prototype.ngOnInit=function(){this._control=this._injector.get($),this._checkName(),this._registry.add(this._control,this)},e.prototype.ngOnDestroy=function(){this._registry.remove(this)},e.prototype.writeValue=function(e){this._state=e===this.value,this._renderer.setProperty(this._elementRef.nativeElement,"checked",this._state)},e.prototype.registerOnChange=function(e){var t=this;this._fn=e,this.onChange=function(){e(t.value),t._registry.select(t)}},e.prototype.fireUncheck=function(e){this.writeValue(e)},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e.prototype._checkName=function(){this.name&&this.formControlName&&this.name!==this.formControlName&&this._throwNameError(),!this.name&&this.formControlName&&(this.name=this.formControlName)},e.prototype._throwNameError=function(){throw new Error('\n      If you define both a name and a formControlName attribute on your radio button, their values\n      must match. Ex: <input type="radio" formControlName="food" name="food">\n    ')},e}(),X={provide:z,useExisting:Object(D.forwardRef)(function(){return J}),multi:!0},J=function(){function e(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return e.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"value",parseFloat(e))},e.prototype.registerOnChange=function(e){this.onChange=function(t){e(""==t?null:parseFloat(t))}},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e}(),ee={provide:z,useExisting:Object(D.forwardRef)(function(){return te}),multi:!0},te=function(){function e(e,t){this._renderer=e,this._elementRef=t,this._optionMap=new Map,this._idCounter=0,this.onChange=function(e){},this.onTouched=function(){},this._compareWith=D["\u0275looseIdentical"]}return Object.defineProperty(e.prototype,"compareWith",{set:function(e){if("function"!=typeof e)throw new Error("compareWith must be a function, but received "+JSON.stringify(e));this._compareWith=e},enumerable:!0,configurable:!0}),e.prototype.writeValue=function(e){this.value=e;var t=this._getOptionId(e);null==t&&this._renderer.setProperty(this._elementRef.nativeElement,"selectedIndex",-1);var n=c(t,e);this._renderer.setProperty(this._elementRef.nativeElement,"value",n)},e.prototype.registerOnChange=function(e){var t=this;this.onChange=function(n){t.value=t._getOptionValue(n),e(t.value)}},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e.prototype._registerOption=function(){return(this._idCounter++).toString()},e.prototype._getOptionId=function(e){for(var t=0,n=Array.from(this._optionMap.keys());t<n.length;t++){var r=n[t];if(this._compareWith(this._optionMap.get(r),e))return r}return null},e.prototype._getOptionValue=function(e){var t=e.split(":")[0];return this._optionMap.has(t)?this._optionMap.get(t):e},e}(),ne=function(){function e(e,t,n){this._element=e,this._renderer=t,this._select=n,this._select&&(this.id=this._select._registerOption())}return Object.defineProperty(e.prototype,"ngValue",{set:function(e){null!=this._select&&(this._select._optionMap.set(this.id,e),this._setElementValue(c(this.id,e)),this._select.writeValue(this._select.value))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{set:function(e){this._setElementValue(e),this._select&&this._select.writeValue(this._select.value)},enumerable:!0,configurable:!0}),e.prototype._setElementValue=function(e){this._renderer.setProperty(this._element.nativeElement,"value",e)},e.prototype.ngOnDestroy=function(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))},e}(),re={provide:z,useExisting:Object(D.forwardRef)(function(){return ie}),multi:!0},ie=function(){function e(e,t){this._renderer=e,this._elementRef=t,this._optionMap=new Map,this._idCounter=0,this.onChange=function(e){},this.onTouched=function(){},this._compareWith=D["\u0275looseIdentical"]}return Object.defineProperty(e.prototype,"compareWith",{set:function(e){if("function"!=typeof e)throw new Error("compareWith must be a function, but received "+JSON.stringify(e));this._compareWith=e},enumerable:!0,configurable:!0}),e.prototype.writeValue=function(e){var t=this;this.value=e;var n;if(Array.isArray(e)){var r=e.map(function(e){return t._getOptionId(e)});n=function(e,t){e._setSelected(r.indexOf(t.toString())>-1)}}else n=function(e,t){e._setSelected(!1)};this._optionMap.forEach(n)},e.prototype.registerOnChange=function(e){var t=this;this.onChange=function(n){var r=[];if(n.hasOwnProperty("selectedOptions"))for(var i=n.selectedOptions,o=0;o<i.length;o++){var l=i.item(o),a=t._getOptionValue(l.value);r.push(a)}else for(i=n.options,o=0;o<i.length;o++)(l=i.item(o)).selected&&(a=t._getOptionValue(l.value),r.push(a));t.value=r,e(r)}},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e.prototype._registerOption=function(e){var t=(this._idCounter++).toString();return this._optionMap.set(t,e),t},e.prototype._getOptionId=function(e){for(var t=0,n=Array.from(this._optionMap.keys());t<n.length;t++){var r=n[t];if(this._compareWith(this._optionMap.get(r)._value,e))return r}return null},e.prototype._getOptionValue=function(e){var t=e.split(":")[0];return this._optionMap.has(t)?this._optionMap.get(t)._value:e},e}(),oe=function(){function e(e,t,n){this._element=e,this._renderer=t,this._select=n,this._select&&(this.id=this._select._registerOption(this))}return Object.defineProperty(e.prototype,"ngValue",{set:function(e){null!=this._select&&(this._value=e,this._setElementValue(d(this.id,e)),this._select.writeValue(this._select.value))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{set:function(e){this._select?(this._value=e,this._setElementValue(d(this.id,e)),this._select.writeValue(this._select.value)):this._setElementValue(e)},enumerable:!0,configurable:!0}),e.prototype._setElementValue=function(e){this._renderer.setProperty(this._element.nativeElement,"value",e)},e.prototype._setSelected=function(e){this._renderer.setProperty(this._element.nativeElement,"selected",e)},e.prototype.ngOnDestroy=function(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))},e}(),le=[H,J,K,te,ie,Y],ae=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(k.__extends)(t,e),t.prototype.ngOnInit=function(){this._checkParentType(),this.formDirective.addFormGroup(this)},t.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeFormGroup(this)},Object.defineProperty(t.prototype,"control",{get:function(){return this.formDirective.getFormGroup(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return p(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return v(this._validators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return b(this._asyncValidators)},enumerable:!0,configurable:!0}),t.prototype._checkParentType=function(){},t}(A),se=function(){function e(e){this._cd=e}return Object.defineProperty(e.prototype,"ngClassUntouched",{get:function(){return!!this._cd.control&&this._cd.control.untouched},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassTouched",{get:function(){return!!this._cd.control&&this._cd.control.touched},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassPristine",{get:function(){return!!this._cd.control&&this._cd.control.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassDirty",{get:function(){return!!this._cd.control&&this._cd.control.dirty},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassValid",{get:function(){return!!this._cd.control&&this._cd.control.valid},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassInvalid",{get:function(){return!!this._cd.control&&this._cd.control.invalid},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassPending",{get:function(){return!!this._cd.control&&this._cd.control.pending},enumerable:!0,configurable:!0}),e}(),ue={"[class.ng-untouched]":"ngClassUntouched","[class.ng-touched]":"ngClassTouched","[class.ng-pristine]":"ngClassPristine","[class.ng-dirty]":"ngClassDirty","[class.ng-valid]":"ngClassValid","[class.ng-invalid]":"ngClassInvalid","[class.ng-pending]":"ngClassPending"},ce=function(e){function t(t){return e.call(this,t)||this}return Object(k.__extends)(t,e),t}(se),de=function(e){function t(t){return e.call(this,t)||this}return Object(k.__extends)(t,e),t}(se),pe="VALID",fe="INVALID",he="PENDING",me="DISABLED",ge=function(){function e(e,t){this.validator=e,this.asyncValidator=t,this._onCollectionChange=function(){},this.pristine=!0,this.touched=!1,this._onDisabledChange=[]}return Object.defineProperty(e.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return this.status===pe},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"invalid",{get:function(){return this.status===fe},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"pending",{get:function(){return this.status==he},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"disabled",{get:function(){return this.status===me},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"enabled",{get:function(){return this.status!==me},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"dirty",{get:function(){return!this.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"untouched",{get:function(){return!this.touched},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"updateOn",{get:function(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"},enumerable:!0,configurable:!0}),e.prototype.setValidators=function(e){this.validator=E(e)},e.prototype.setAsyncValidators=function(e){this.asyncValidator=S(e)},e.prototype.clearValidators=function(){this.validator=null},e.prototype.clearAsyncValidators=function(){this.asyncValidator=null},e.prototype.markAsTouched=function(e){void 0===e&&(e={}),this.touched=!0,this._parent&&!e.onlySelf&&this._parent.markAsTouched(e)},e.prototype.markAsUntouched=function(e){void 0===e&&(e={}),this.touched=!1,this._pendingTouched=!1,this._forEachChild(function(e){e.markAsUntouched({onlySelf:!0})}),this._parent&&!e.onlySelf&&this._parent._updateTouched(e)},e.prototype.markAsDirty=function(e){void 0===e&&(e={}),this.pristine=!1,this._parent&&!e.onlySelf&&this._parent.markAsDirty(e)},e.prototype.markAsPristine=function(e){void 0===e&&(e={}),this.pristine=!0,this._pendingDirty=!1,this._forEachChild(function(e){e.markAsPristine({onlySelf:!0})}),this._parent&&!e.onlySelf&&this._parent._updatePristine(e)},e.prototype.markAsPending=function(e){void 0===e&&(e={}),this.status=he,this._parent&&!e.onlySelf&&this._parent.markAsPending(e)},e.prototype.disable=function(e){void 0===e&&(e={}),this.status=me,this.errors=null,this._forEachChild(function(e){e.disable({onlySelf:!0})}),this._updateValue(),!1!==e.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(!!e.onlySelf),this._onDisabledChange.forEach(function(e){return e(!0)})},e.prototype.enable=function(e){void 0===e&&(e={}),this.status=pe,this._forEachChild(function(e){e.enable({onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent}),this._updateAncestors(!!e.onlySelf),this._onDisabledChange.forEach(function(e){return e(!1)})},e.prototype._updateAncestors=function(e){this._parent&&!e&&(this._parent.updateValueAndValidity(),this._parent._updatePristine(),this._parent._updateTouched())},e.prototype.setParent=function(e){this._parent=e},e.prototype.updateValueAndValidity=function(e){void 0===e&&(e={}),this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),this.status!==pe&&this.status!==he||this._runAsyncValidator(e.emitEvent)),!1!==e.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!e.onlySelf&&this._parent.updateValueAndValidity(e)},e.prototype._updateTreeValidity=function(e){void 0===e&&(e={emitEvent:!0}),this._forEachChild(function(t){return t._updateTreeValidity(e)}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent})},e.prototype._setInitialStatus=function(){this.status=this._allControlsDisabled()?me:pe},e.prototype._runValidator=function(){return this.validator?this.validator(this):null},e.prototype._runAsyncValidator=function(e){var t=this;if(this.asyncValidator){this.status=he;var n=o(this.asyncValidator(this));this._asyncValidationSubscription=n.subscribe(function(n){return t.setErrors(n,{emitEvent:e})})}},e.prototype._cancelExistingSubscription=function(){this._asyncValidationSubscription&&this._asyncValidationSubscription.unsubscribe()},e.prototype.setErrors=function(e,t){void 0===t&&(t={}),this.errors=e,this._updateControlsErrors(!1!==t.emitEvent)},e.prototype.get=function(e){return function(e,t,n){return null==t?null:(t instanceof Array||(t=t.split(".")),t instanceof Array&&0===t.length?null:t.reduce(function(e,t){return e instanceof ve?e.controls[t]||null:e instanceof be?e.at(t)||null:null},e))}(this,e)},e.prototype.getError=function(e,t){var n=t?this.get(t):this;return n&&n.errors?n.errors[e]:null},e.prototype.hasError=function(e,t){return!!this.getError(e,t)},Object.defineProperty(e.prototype,"root",{get:function(){for(var e=this;e._parent;)e=e._parent;return e},enumerable:!0,configurable:!0}),e.prototype._updateControlsErrors=function(e){this.status=this._calculateStatus(),e&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(e)},e.prototype._initObservables=function(){this.valueChanges=new D.EventEmitter,this.statusChanges=new D.EventEmitter},e.prototype._calculateStatus=function(){return this._allControlsDisabled()?me:this.errors?fe:this._anyControlsHaveStatus(he)?he:this._anyControlsHaveStatus(fe)?fe:pe},e.prototype._anyControlsHaveStatus=function(e){return this._anyControls(function(t){return t.status===e})},e.prototype._anyControlsDirty=function(){return this._anyControls(function(e){return e.dirty})},e.prototype._anyControlsTouched=function(){return this._anyControls(function(e){return e.touched})},e.prototype._updatePristine=function(e){void 0===e&&(e={}),this.pristine=!this._anyControlsDirty(),this._parent&&!e.onlySelf&&this._parent._updatePristine(e)},e.prototype._updateTouched=function(e){void 0===e&&(e={}),this.touched=this._anyControlsTouched(),this._parent&&!e.onlySelf&&this._parent._updateTouched(e)},e.prototype._isBoxedValue=function(e){return"object"==typeof e&&null!==e&&2===Object.keys(e).length&&"value"in e&&"disabled"in e},e.prototype._registerOnCollectionChange=function(e){this._onCollectionChange=e},e.prototype._setUpdateStrategy=function(e){O(e)&&null!=e.updateOn&&(this._updateOn=e.updateOn)},e}(),ye=function(e){function t(t,n,r){void 0===t&&(t=null);var i=e.call(this,E(n),S(r,n))||this;return i._onChange=[],i._applyFormState(t),i._setUpdateStrategy(n),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i._initObservables(),i}return Object(k.__extends)(t,e),t.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this.value=this._pendingValue=e,this._onChange.length&&!1!==t.emitModelToViewChange&&this._onChange.forEach(function(e){return e(n.value,!1!==t.emitViewToModelChange)}),this.updateValueAndValidity(t)},t.prototype.patchValue=function(e,t){void 0===t&&(t={}),this.setValue(e,t)},t.prototype.reset=function(e,t){void 0===e&&(e=null),void 0===t&&(t={}),this._applyFormState(e),this.markAsPristine(t),this.markAsUntouched(t),this.setValue(this.value,t),this._pendingChange=!1},t.prototype._updateValue=function(){},t.prototype._anyControls=function(e){return!1},t.prototype._allControlsDisabled=function(){return this.disabled},t.prototype.registerOnChange=function(e){this._onChange.push(e)},t.prototype._clearChangeFns=function(){this._onChange=[],this._onDisabledChange=[],this._onCollectionChange=function(){}},t.prototype.registerOnDisabledChange=function(e){this._onDisabledChange.push(e)},t.prototype._forEachChild=function(e){},t.prototype._syncPendingControls=function(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))},t.prototype._applyFormState=function(e){this._isBoxedValue(e)?(this.value=this._pendingValue=e.value,e.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=e},t}(ge),ve=function(e){function t(t,n,r){var i=e.call(this,E(n),S(r,n))||this;return i.controls=t,i._initObservables(),i._setUpdateStrategy(n),i._setUpControls(),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i}return Object(k.__extends)(t,e),t.prototype.registerControl=function(e,t){return this.controls[e]?this.controls[e]:(this.controls[e]=t,t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange),t)},t.prototype.addControl=function(e,t){this.registerControl(e,t),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.removeControl=function(e){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),delete this.controls[e],this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.setControl=function(e,t){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),delete this.controls[e],t&&this.registerControl(e,t),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.contains=function(e){return this.controls.hasOwnProperty(e)&&this.controls[e].enabled},t.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this._checkAllValuesPresent(e),Object.keys(e).forEach(function(r){n._throwIfControlMissing(r),n.controls[r].setValue(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},t.prototype.patchValue=function(e,t){var n=this;void 0===t&&(t={}),Object.keys(e).forEach(function(r){n.controls[r]&&n.controls[r].patchValue(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},t.prototype.reset=function(e,t){void 0===e&&(e={}),void 0===t&&(t={}),this._forEachChild(function(n,r){n.reset(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t),this._updatePristine(t),this._updateTouched(t)},t.prototype.getRawValue=function(){return this._reduceChildren({},function(e,t,n){return e[n]=t instanceof ye?t.value:t.getRawValue(),e})},t.prototype._syncPendingControls=function(){var e=this._reduceChildren(!1,function(e,t){return!!t._syncPendingControls()||e});return e&&this.updateValueAndValidity({onlySelf:!0}),e},t.prototype._throwIfControlMissing=function(e){if(!Object.keys(this.controls).length)throw new Error("\n        There are no form controls registered with this group yet.  If you're using ngModel,\n        you may want to check next tick (e.g. use setTimeout).\n      ");if(!this.controls[e])throw new Error("Cannot find form control with name: "+e+".")},t.prototype._forEachChild=function(e){var t=this;Object.keys(this.controls).forEach(function(n){return e(t.controls[n],n)})},t.prototype._setUpControls=function(){var e=this;this._forEachChild(function(t){t.setParent(e),t._registerOnCollectionChange(e._onCollectionChange)})},t.prototype._updateValue=function(){this.value=this._reduceValue()},t.prototype._anyControls=function(e){var t=this,n=!1;return this._forEachChild(function(r,i){n=n||t.contains(i)&&e(r)}),n},t.prototype._reduceValue=function(){var e=this;return this._reduceChildren({},function(t,n,r){return(n.enabled||e.disabled)&&(t[r]=n.value),t})},t.prototype._reduceChildren=function(e,t){var n=e;return this._forEachChild(function(e,r){n=t(n,e,r)}),n},t.prototype._allControlsDisabled=function(){for(var e=0,t=Object.keys(this.controls);e<t.length;e++)if(this.controls[t[e]].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled},t.prototype._checkAllValuesPresent=function(e){this._forEachChild(function(t,n){if(void 0===e[n])throw new Error("Must supply a value for form control with name: '"+n+"'.")})},t}(ge),be=function(e){function t(t,n,r){var i=e.call(this,E(n),S(r,n))||this;return i.controls=t,i._initObservables(),i._setUpdateStrategy(n),i._setUpControls(),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i}return Object(k.__extends)(t,e),t.prototype.at=function(e){return this.controls[e]},t.prototype.push=function(e){this.controls.push(e),this._registerControl(e),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.insert=function(e,t){this.controls.splice(e,0,t),this._registerControl(t),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.removeAt=function(e){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),this.controls.splice(e,1),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.setControl=function(e,t){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),this.controls.splice(e,1),t&&(this.controls.splice(e,0,t),this._registerControl(t)),this.updateValueAndValidity(),this._onCollectionChange()},Object.defineProperty(t.prototype,"length",{get:function(){return this.controls.length},enumerable:!0,configurable:!0}),t.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this._checkAllValuesPresent(e),e.forEach(function(e,r){n._throwIfControlMissing(r),n.at(r).setValue(e,{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},t.prototype.patchValue=function(e,t){var n=this;void 0===t&&(t={}),e.forEach(function(e,r){n.at(r)&&n.at(r).patchValue(e,{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},t.prototype.reset=function(e,t){void 0===e&&(e=[]),void 0===t&&(t={}),this._forEachChild(function(n,r){n.reset(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t),this._updatePristine(t),this._updateTouched(t)},t.prototype.getRawValue=function(){return this.controls.map(function(e){return e instanceof ye?e.value:e.getRawValue()})},t.prototype._syncPendingControls=function(){var e=this.controls.reduce(function(e,t){return!!t._syncPendingControls()||e},!1);return e&&this.updateValueAndValidity({onlySelf:!0}),e},t.prototype._throwIfControlMissing=function(e){if(!this.controls.length)throw new Error("\n        There are no form controls registered with this array yet.  If you're using ngModel,\n        you may want to check next tick (e.g. use setTimeout).\n      ");if(!this.at(e))throw new Error("Cannot find form control at index "+e)},t.prototype._forEachChild=function(e){this.controls.forEach(function(t,n){e(t,n)})},t.prototype._updateValue=function(){var e=this;this.value=this.controls.filter(function(t){return t.enabled||e.disabled}).map(function(e){return e.value})},t.prototype._anyControls=function(e){return this.controls.some(function(t){return t.enabled&&e(t)})},t.prototype._setUpControls=function(){var e=this;this._forEachChild(function(t){return e._registerControl(t)})},t.prototype._checkAllValuesPresent=function(e){this._forEachChild(function(t,n){if(void 0===e[n])throw new Error("Must supply a value for form control at index: "+n+".")})},t.prototype._allControlsDisabled=function(){for(var e=0,t=this.controls;e<t.length;e++)if(t[e].enabled)return!1;return this.controls.length>0||this.disabled},t.prototype._registerControl=function(e){e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange)},t}(ge),_e={provide:A,useExisting:Object(D.forwardRef)(function(){return xe})},we=Promise.resolve(null),xe=function(e){function t(t,n){var r=e.call(this)||this;return r.submitted=!1,r._directives=[],r.ngSubmit=new D.EventEmitter,r.form=new ve({},v(t),b(n)),r}return Object(k.__extends)(t,e),t.prototype.ngAfterViewInit=function(){this._setUpdateStrategy()},Object.defineProperty(t.prototype,"formDirective",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"controls",{get:function(){return this.form.controls},enumerable:!0,configurable:!0}),t.prototype.addControl=function(e){var t=this;we.then(function(){var n=t._findContainer(e.path);e.control=n.registerControl(e.name,e.control),f(e.control,e),e.control.updateValueAndValidity({emitEvent:!1}),t._directives.push(e)})},t.prototype.getControl=function(e){return this.form.get(e.path)},t.prototype.removeControl=function(e){var t=this;we.then(function(){var n=t._findContainer(e.path);n&&n.removeControl(e.name),C(t._directives,e)})},t.prototype.addFormGroup=function(e){var t=this;we.then(function(){var n=t._findContainer(e.path),r=new ve({});m(r,e),n.registerControl(e.name,r),r.updateValueAndValidity({emitEvent:!1})})},t.prototype.removeFormGroup=function(e){var t=this;we.then(function(){var n=t._findContainer(e.path);n&&n.removeControl(e.name)})},t.prototype.getFormGroup=function(e){return this.form.get(e.path)},t.prototype.updateModel=function(e,t){var n=this;we.then(function(){n.form.get(e.path).setValue(t)})},t.prototype.setValue=function(e){this.control.setValue(e)},t.prototype.onSubmit=function(e){return this.submitted=!0,w(this.form,this._directives),this.ngSubmit.emit(e),!1},t.prototype.onReset=function(){this.resetForm()},t.prototype.resetForm=function(e){void 0===e&&(e=void 0),this.form.reset(e),this.submitted=!1},t.prototype._setUpdateStrategy=function(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)},t.prototype._findContainer=function(e){return e.pop(),e.length?this.form.get(e):this.form},t}(A),Ce='\n    <div [formGroup]="myGroup">\n      <input formControlName="firstName">\n    </div>\n\n    In your class:\n\n    this.myGroup = new FormGroup({\n       firstName: new FormControl()\n    });',Ee='\n    <div [formGroup]="myGroup">\n       <div formGroupName="person">\n          <input formControlName="firstName">\n       </div>\n    </div>\n\n    In your class:\n\n    this.myGroup = new FormGroup({\n       person: new FormGroup({ firstName: new FormControl() })\n    });',Se='\n    <form>\n       <div ngModelGroup="person">\n          <input [(ngModel)]="person.name" name="firstName">\n       </div>\n    </form>',Oe=function(){function e(){}return e.modelParentException=function(){throw new Error('\n      ngModel cannot be used to register form controls with a parent formGroup directive.  Try using\n      formGroup\'s partner directive "formControlName" instead.  Example:\n\n      '+Ce+'\n\n      Or, if you\'d like to avoid registering this form control, indicate that it\'s standalone in ngModelOptions:\n\n      Example:\n\n      \n    <div [formGroup]="myGroup">\n       <input formControlName="firstName">\n       <input [(ngModel)]="showMoreControls" [ngModelOptions]="{standalone: true}">\n    </div>\n  ')},e.formGroupNameException=function(){throw new Error("\n      ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n      Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n      "+Ee+"\n\n      Option 2:  Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n      "+Se)},e.missingNameException=function(){throw new Error('If ngModel is used within a form tag, either the name attribute must be set or the form\n      control must be defined as \'standalone\' in ngModelOptions.\n\n      Example 1: <input [(ngModel)]="person.firstName" name="first">\n      Example 2: <input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone: true}">')},e.modelGroupParentException=function(){throw new Error("\n      ngModelGroup cannot be used with a parent formGroup directive.\n\n      Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n      "+Ee+"\n\n      Option 2:  Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n      "+Se)},e}(),Te={provide:A,useExisting:Object(D.forwardRef)(function(){return ke})},ke=function(e){function t(t,n,r){var i=e.call(this)||this;return i._parent=t,i._validators=n,i._asyncValidators=r,i}return Object(k.__extends)(t,e),t.prototype._checkParentType=function(){this._parent instanceof t||this._parent instanceof xe||Oe.modelGroupParentException()},t}(ae),De={provide:$,useExisting:Object(D.forwardRef)(function(){return Re})},Ie=Promise.resolve(null),Re=function(e){function t(t,n,r,i){var o=e.call(this)||this;return o.control=new ye,o._registered=!1,o.update=new D.EventEmitter,o._parent=t,o._rawValidators=n||[],o._rawAsyncValidators=r||[],o.valueAccessor=x(o,i),o}return Object(k.__extends)(t,e),t.prototype.ngOnChanges=function(e){this._checkForErrors(),this._registered||this._setUpControl(),"isDisabled"in e&&this._updateDisabled(e),_(e,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)},t.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},Object.defineProperty(t.prototype,"path",{get:function(){return this._parent?p(this.name,this._parent):[this.name]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return v(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return b(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),t.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},t.prototype._setUpControl=function(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0},t.prototype._setUpdateStrategy=function(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)},t.prototype._isStandalone=function(){return!this._parent||!(!this.options||!this.options.standalone)},t.prototype._setUpStandalone=function(){f(this.control,this),this.control.updateValueAndValidity({emitEvent:!1})},t.prototype._checkForErrors=function(){this._isStandalone()||this._checkParentType(),this._checkName()},t.prototype._checkParentType=function(){!(this._parent instanceof ke)&&this._parent instanceof ae?Oe.formGroupNameException():this._parent instanceof ke||this._parent instanceof xe||Oe.modelParentException()},t.prototype._checkName=function(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()||this.name||Oe.missingNameException()},t.prototype._updateValue=function(e){var t=this;Ie.then(function(){t.control.setValue(e,{emitViewToModelChange:!1})})},t.prototype._updateDisabled=function(e){var t=this,n=e.isDisabled.currentValue,r=""===n||n&&"false"!==n;Ie.then(function(){r&&!t.control.disabled?t.control.disable():!r&&t.control.disabled&&t.control.enable()})},t}($),Me=function(){function e(){}return e.controlParentException=function(){throw new Error("formControlName must be used with a parent formGroup directive.  You'll want to add a formGroup\n       directive and pass it an existing FormGroup instance (you can create one in your class).\n\n      Example:\n\n      "+Ce)},e.ngModelGroupException=function(){throw new Error('formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n       that also have a "form" prefix: formGroupName, formArrayName, or formGroup.\n\n       Option 1:  Update the parent to be formGroupName (reactive form strategy)\n\n        '+Ee+"\n\n        Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n        "+Se)},e.missingFormException=function(){throw new Error("formGroup expects a FormGroup instance. Please pass one in.\n\n       Example:\n\n       "+Ce)},e.groupParentException=function(){throw new Error("formGroupName must be used with a parent formGroup directive.  You'll want to add a formGroup\n      directive and pass it an existing FormGroup instance (you can create one in your class).\n\n      Example:\n\n      "+Ee)},e.arrayParentException=function(){throw new Error('formArrayName must be used with a parent formGroup directive.  You\'ll want to add a formGroup\n       directive and pass it an existing FormGroup instance (you can create one in your class).\n\n        Example:\n\n        \n    <div [formGroup]="myGroup">\n      <div formArrayName="cities">\n        <div *ngFor="let city of cityArray.controls; index as i">\n          <input [formControlName]="i">\n        </div>\n      </div>\n    </div>\n\n    In your class:\n\n    this.cityArray = new FormArray([new FormControl(\'SF\')]);\n    this.myGroup = new FormGroup({\n      cities: this.cityArray\n    });')},e.disabledAttrWarning=function(){console.warn("\n      It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n      when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n      you. We recommend using this approach to avoid 'changed after checked' errors.\n       \n      Example: \n      form = new FormGroup({\n        first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n        last: new FormControl('Drew', Validators.required)\n      });\n    ")},e}(),Pe={provide:$,useExisting:Object(D.forwardRef)(function(){return Ne})},Ne=function(e){function t(t,n,r){var i=e.call(this)||this;return i.update=new D.EventEmitter,i._rawValidators=t||[],i._rawAsyncValidators=n||[],i.valueAccessor=x(i,r),i}return Object(k.__extends)(t,e),Object.defineProperty(t.prototype,"isDisabled",{set:function(e){Me.disabledAttrWarning()},enumerable:!0,configurable:!0}),t.prototype.ngOnChanges=function(e){this._isControlChanged(e)&&(f(this.form,this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this.form.updateValueAndValidity({emitEvent:!1})),_(e,this.viewModel)&&(this.form.setValue(this.model),this.viewModel=this.model)},Object.defineProperty(t.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return v(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return b(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),t.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},t.prototype._isControlChanged=function(e){return e.hasOwnProperty("form")},t}($),Ae={provide:A,useExisting:Object(D.forwardRef)(function(){return Le})},Le=function(e){function t(t,n){var r=e.call(this)||this;return r._validators=t,r._asyncValidators=n,r.submitted=!1,r.directives=[],r.form=null,r.ngSubmit=new D.EventEmitter,r}return Object(k.__extends)(t,e),t.prototype.ngOnChanges=function(e){this._checkFormPresent(),e.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations())},Object.defineProperty(t.prototype,"formDirective",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),t.prototype.addControl=function(e){var t=this.form.get(e.path);return f(t,e),t.updateValueAndValidity({emitEvent:!1}),this.directives.push(e),t},t.prototype.getControl=function(e){return this.form.get(e.path)},t.prototype.removeControl=function(e){C(this.directives,e)},t.prototype.addFormGroup=function(e){var t=this.form.get(e.path);m(t,e),t.updateValueAndValidity({emitEvent:!1})},t.prototype.removeFormGroup=function(e){},t.prototype.getFormGroup=function(e){return this.form.get(e.path)},t.prototype.addFormArray=function(e){var t=this.form.get(e.path);m(t,e),t.updateValueAndValidity({emitEvent:!1})},t.prototype.removeFormArray=function(e){},t.prototype.getFormArray=function(e){return this.form.get(e.path)},t.prototype.updateModel=function(e,t){this.form.get(e.path).setValue(t)},t.prototype.onSubmit=function(e){return this.submitted=!0,w(this.form,this.directives),this.ngSubmit.emit(e),!1},t.prototype.onReset=function(){this.resetForm()},t.prototype.resetForm=function(e){void 0===e&&(e=void 0),this.form.reset(e),this.submitted=!1},t.prototype._updateDomValue=function(){var e=this;this.directives.forEach(function(t){var n=e.form.get(t.path);t.control!==n&&(function(e,t){t.valueAccessor.registerOnChange(function(){return g(t)}),t.valueAccessor.registerOnTouched(function(){return g(t)}),t._rawValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(null)}),t._rawAsyncValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(null)}),e&&e._clearChangeFns()}(t.control,t),n&&f(n,t),t.control=n)}),this.form._updateTreeValidity({emitEvent:!1})},t.prototype._updateRegistrations=function(){var e=this;this.form._registerOnCollectionChange(function(){return e._updateDomValue()}),this._oldForm&&this._oldForm._registerOnCollectionChange(function(){}),this._oldForm=this.form},t.prototype._updateValidators=function(){var e=v(this._validators);this.form.validator=V.compose([this.form.validator,e]);var t=b(this._asyncValidators);this.form.asyncValidator=V.composeAsync([this.form.asyncValidator,t])},t.prototype._checkFormPresent=function(){this.form||Me.missingFormException()},t}(A),Fe={provide:A,useExisting:Object(D.forwardRef)(function(){return je})},je=function(e){function t(t,n,r){var i=e.call(this)||this;return i._parent=t,i._validators=n,i._asyncValidators=r,i}return Object(k.__extends)(t,e),t.prototype._checkParentType=function(){T(this._parent)&&Me.groupParentException()},t}(ae),Ve={provide:A,useExisting:Object(D.forwardRef)(function(){return ze})},ze=function(e){function t(t,n,r){var i=e.call(this)||this;return i._parent=t,i._validators=n,i._asyncValidators=r,i}return Object(k.__extends)(t,e),t.prototype.ngOnInit=function(){this._checkParentType(),this.formDirective.addFormArray(this)},t.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeFormArray(this)},Object.defineProperty(t.prototype,"control",{get:function(){return this.formDirective.getFormArray(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return p(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return v(this._validators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return b(this._asyncValidators)},enumerable:!0,configurable:!0}),t.prototype._checkParentType=function(){T(this._parent)&&Me.arrayParentException()},t}(A),Be={provide:$,useExisting:Object(D.forwardRef)(function(){return He})},He=function(e){function t(t,n,r,i){var o=e.call(this)||this;return o._added=!1,o.update=new D.EventEmitter,o._parent=t,o._rawValidators=n||[],o._rawAsyncValidators=r||[],o.valueAccessor=x(o,i),o}return Object(k.__extends)(t,e),Object.defineProperty(t.prototype,"isDisabled",{set:function(e){Me.disabledAttrWarning()},enumerable:!0,configurable:!0}),t.prototype.ngOnChanges=function(e){this._added||this._setUpControl(),_(e,this.viewModel)&&(this.viewModel=this.model,this.formDirective.updateModel(this,this.model))},t.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},t.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},Object.defineProperty(t.prototype,"path",{get:function(){return p(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return v(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return b(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),t.prototype._checkParentType=function(){!(this._parent instanceof je)&&this._parent instanceof ae?Me.ngModelGroupException():this._parent instanceof je||this._parent instanceof Le||this._parent instanceof ze||Me.controlParentException()},t.prototype._setUpControl=function(){this._checkParentType(),this.control=this.formDirective.addControl(this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this._added=!0},t}($),We={provide:L,useExisting:Object(D.forwardRef)(function(){return Ue}),multi:!0},qe={provide:L,useExisting:Object(D.forwardRef)(function(){return Ge}),multi:!0},Ue=function(){function e(){}return Object.defineProperty(e.prototype,"required",{get:function(){return this._required},set:function(e){this._required=null!=e&&!1!==e&&""+e!="false",this._onChange&&this._onChange()},enumerable:!0,configurable:!0}),e.prototype.validate=function(e){return this.required?V.required(e):null},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e}(),Ge=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(k.__extends)(t,e),t.prototype.validate=function(e){return this.required?V.requiredTrue(e):null},t}(Ue),Ke={provide:L,useExisting:Object(D.forwardRef)(function(){return $e}),multi:!0},$e=function(){function e(){}return Object.defineProperty(e.prototype,"email",{set:function(e){this._enabled=""===e||!0===e||"true"===e,this._onChange&&this._onChange()},enumerable:!0,configurable:!0}),e.prototype.validate=function(e){return this._enabled?V.email(e):null},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e}(),Ze={provide:L,useExisting:Object(D.forwardRef)(function(){return Qe}),multi:!0},Qe=function(){function e(){}return e.prototype.ngOnChanges=function(e){"minlength"in e&&(this._createValidator(),this._onChange&&this._onChange())},e.prototype.validate=function(e){return null==this.minlength?null:this._validator(e)},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e.prototype._createValidator=function(){this._validator=V.minLength(parseInt(this.minlength,10))},e}(),Ye={provide:L,useExisting:Object(D.forwardRef)(function(){return Xe}),multi:!0},Xe=function(){function e(){}return e.prototype.ngOnChanges=function(e){"maxlength"in e&&(this._createValidator(),this._onChange&&this._onChange())},e.prototype.validate=function(e){return null!=this.maxlength?this._validator(e):null},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e.prototype._createValidator=function(){this._validator=V.maxLength(parseInt(this.maxlength,10))},e}(),Je={provide:L,useExisting:Object(D.forwardRef)(function(){return et}),multi:!0},et=function(){function e(){}return e.prototype.ngOnChanges=function(e){"pattern"in e&&(this._createValidator(),this._onChange&&this._onChange())},e.prototype.validate=function(e){return this._validator(e)},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e.prototype._createValidator=function(){this._validator=V.pattern(this.pattern)},e}(),tt=function(){function e(){}return e.prototype.group=function(e,t){void 0===t&&(t=null);var n=this._reduceControls(e);return new ve(n,null!=t?t.validator:null,null!=t?t.asyncValidator:null)},e.prototype.control=function(e,t,n){return new ye(e,t,n)},e.prototype.array=function(e,t,n){var r=this,i=e.map(function(e){return r._createControl(e)});return new be(i,t,n)},e.prototype._reduceControls=function(e){var t=this,n={};return Object.keys(e).forEach(function(r){n[r]=t._createControl(e[r])}),n},e.prototype._createControl=function(e){return e instanceof ye||e instanceof ve||e instanceof be?e:Array.isArray(e)?this.control(e[0],e.length>1?e[1]:null,e.length>2?e[2]:null):this.control(e)},e}(),nt=new D.Version("5.1.1"),rt=function(){},it=[rt,ne,oe,U,K,J,H,te,ie,Y,ce,de,Ue,Qe,Xe,et,Ge,$e],ot=[Re,ke,xe],lt=[Ne,Le,He,je,ze],at=function(){},st=function(){},ut=function(){}},"1j/l":function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=Array.isArray||function(e){return e&&"number"==typeof e.length}},"2Fuj":function(e,t,n){var r=n("R5c1"),i=n("a/Sk");e.exports=Object.keys||function(e){return r(e,i)}},"2kLc":function(e,t,n){"use strict";t.a=function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];var n=Number.POSITIVE_INFINITY,a=null,s=e[e.length-1];return Object(o.a)(s)?(a=e.pop(),e.length>1&&"number"==typeof e[e.length-1]&&(n=e.pop())):"number"==typeof s&&(n=e.pop()),null===a&&1===e.length&&e[0]instanceof r.a?e[0]:Object(l.a)(n)(new i.a(e,a))};var r=n("AP4T"),i=n("Oryw"),o=n("3iOE"),l=n("bywS")},"3LDD":function(e,t,n){"use strict";var r=n("tose").f,i=n("51pc"),o=n("pBmS"),l=n("pa70"),a=n("Lcie"),s=n("p/bR"),u=n("WsSm"),c=n("w/BM"),d=n("KpXt"),p=n("V+0c"),f=n("xI8H").fastKey,h=n("Y5fy"),m=p?"_s":"size",g=function(e,t){var n,r=f(t);if("F"!==r)return e._i[r];for(n=e._f;n;n=n.n)if(n.k==t)return n};e.exports={getConstructor:function(e,t,n,u){var c=e(function(e,r){a(e,c,t,"_i"),e._t=t,e._i=i(null),e._f=void 0,e._l=void 0,e[m]=0,void 0!=r&&s(r,n,e[u],e)});return o(c.prototype,{clear:function(){for(var e=h(this,t),n=e._i,r=e._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];e._f=e._l=void 0,e[m]=0},delete:function(e){var n=h(this,t),r=g(n,e);if(r){var i=r.n,o=r.p;delete n._i[r.i],r.r=!0,o&&(o.n=i),i&&(i.p=o),n._f==r&&(n._f=i),n._l==r&&(n._l=o),n[m]--}return!!r},forEach:function(e){h(this,t);for(var n,r=l(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!g(h(this,t),e)}}),p&&r(c.prototype,"size",{get:function(){return h(this,t)[m]}}),c},def:function(e,t,n){var r,i,o=g(e,t);return o?o.v=n:(e._l=o={i:i=f(t,!0),k:t,v:n,p:r=e._l,n:void 0,r:!1},e._f||(e._f=o),r&&(r.n=o),e[m]++,"F"!==i&&(e._i[i]=o)),e},getEntry:g,setStrong:function(e,t,n){u(e,t,function(e,n){this._t=h(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?c(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,c(1))},n?"entries":"values",!n,!0),d(t)}}},"3iOE":function(e,t,n){"use strict";t.a=function(e){return e&&"function"==typeof e.schedule}},"3k/+":function(e,t,n){"use strict";function r(e,t){var n=!1;return arguments.length>=2&&(n=!0),function(r){return r.lift(new l(e,t,n))}}var i=n("6Xbx"),o=n("E9/g"),l=function(){function e(e,t,n){void 0===n&&(n=!1),this.accumulator=e,this.seed=t,this.hasSeed=n}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.accumulator,this.seed,this.hasSeed))},e}(),a=function(e){function t(t,n,r,i){e.call(this,t),this.accumulator=n,this._seed=r,this.hasSeed=i,this.index=0}return Object(i.__extends)(t,e),Object.defineProperty(t.prototype,"seed",{get:function(){return this._seed},set:function(e){this.hasSeed=!0,this._seed=e},enumerable:!0,configurable:!0}),t.prototype._next=function(e){if(this.hasSeed)return this._tryNext(e);this.seed=e,this.destination.next(e)},t.prototype._tryNext=function(e){var t,n=this.index++;try{t=this.accumulator(this.seed,e,n)}catch(e){this.destination.error(e)}this.seed=t,this.destination.next(t)},t}(o.a);t.a=function(e,t){return arguments.length>=2?r(e,t)(this):r(e)(this)}},"3m71":function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=n("Ecq+").a.create},"3r0D":function(e,t,n){var r=n("Iclu")("wks"),i=n("c09d"),o=n("ptrv").Symbol,l="function"==typeof o;(e.exports=function(e){return r[e]||(r[e]=l&&o[e]||(l?o:i)("Symbol."+e))}).store=r},"4cOY":function(e,t,n){"use strict";var r=n("6Xbx").__decorate;Object.defineProperty(t,"__esModule",{value:!0});var i=n("LMZF"),o=function(){function e(){this.calculatedScrollbarWidth=null}return e.prototype.addClass=function(e,t){e.classList?e.classList.add(t):e.className+=" "+t},e.prototype.addMultipleClasses=function(e,t){if(e.classList)for(var n=t.split(" "),r=0;r<n.length;r++)e.classList.add(n[r]);else for(n=t.split(" "),r=0;r<n.length;r++)e.className+=" "+n[r]},e.prototype.removeClass=function(e,t){e.classList?e.classList.remove(t):e.className=e.className.replace(new RegExp("(^|\\b)"+t.split(" ").join("|")+"(\\b|$)","gi")," ")},e.prototype.hasClass=function(e,t){return e.classList?e.classList.contains(t):new RegExp("(^| )"+t+"( |$)","gi").test(e.className)},e.prototype.siblings=function(e){return Array.prototype.filter.call(e.parentNode.children,function(t){return t!==e})},e.prototype.find=function(e,t){return e.querySelectorAll(t)},e.prototype.findSingle=function(e,t){return e.querySelector(t)},e.prototype.index=function(e){for(var t=e.parentNode.childNodes,n=0,r=0;r<t.length;r++){if(t[r]==e)return n;1==t[r].nodeType&&n++}return-1},e.prototype.relativePosition=function(e,t){var n,r,i=e.offsetParent?{width:e.offsetWidth,height:e.offsetHeight}:this.getHiddenElementDimensions(e),o=t.offsetHeight,l=t.offsetWidth,a=t.getBoundingClientRect(),s=(this.getWindowScrollTop(),this.getViewport());a.top+o+i.height>s.height?a.top+(n=-1*i.height)<0&&(n=0):n=o,r=a.left+i.width>s.width?l-i.width:0,e.style.top=n+"px",e.style.left=r+"px"},e.prototype.absolutePosition=function(e,t){var n,r,i=e.offsetParent?{width:e.offsetWidth,height:e.offsetHeight}:this.getHiddenElementDimensions(e),o=i.height,l=i.width,a=t.offsetHeight,s=t.offsetWidth,u=t.getBoundingClientRect(),c=this.getWindowScrollTop(),d=this.getWindowScrollLeft(),p=this.getViewport();u.top+a+o>p.height?(n=u.top+c-o)<0&&(n=0+c):n=a+u.top+c,r=u.left+s+l>p.width?u.left+d+s-l:u.left+d,e.style.top=n+"px",e.style.left=r+"px"},e.prototype.getHiddenElementOuterHeight=function(e){e.style.visibility="hidden",e.style.display="block";var t=e.offsetHeight;return e.style.display="none",e.style.visibility="visible",t},e.prototype.getHiddenElementOuterWidth=function(e){e.style.visibility="hidden",e.style.display="block";var t=e.offsetWidth;return e.style.display="none",e.style.visibility="visible",t},e.prototype.getHiddenElementDimensions=function(e){var t={};return e.style.visibility="hidden",e.style.display="block",t.width=e.offsetWidth,t.height=e.offsetHeight,e.style.display="none",e.style.visibility="visible",t},e.prototype.scrollInView=function(e,t){var n=getComputedStyle(e).getPropertyValue("borderTopWidth"),r=n?parseFloat(n):0,i=getComputedStyle(e).getPropertyValue("paddingTop"),o=i?parseFloat(i):0,l=e.getBoundingClientRect(),a=t.getBoundingClientRect().top+document.body.scrollTop-(l.top+document.body.scrollTop)-r-o,s=e.scrollTop,u=e.clientHeight,c=this.getOuterHeight(t);a<0?e.scrollTop=s+a:a+c>u&&(e.scrollTop=s+a-u+c)},e.prototype.fadeIn=function(e,t){e.style.opacity=0;var n=+new Date,r=0,i=function(){r=+e.style.opacity+((new Date).getTime()-n)/t,e.style.opacity=r,n=+new Date,+r<1&&(window.requestAnimationFrame&&requestAnimationFrame(i)||setTimeout(i,16))};i()},e.prototype.fadeOut=function(e,t){var n=1,r=50/t,i=setInterval(function(){(n-=r)<=0&&(n=0,clearInterval(i)),e.style.opacity=n},50)},e.prototype.getWindowScrollTop=function(){var e=document.documentElement;return(window.pageYOffset||e.scrollTop)-(e.clientTop||0)},e.prototype.getWindowScrollLeft=function(){var e=document.documentElement;return(window.pageXOffset||e.scrollLeft)-(e.clientLeft||0)},e.prototype.matches=function(e,t){var n=Element.prototype;return(n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(e){return-1!==[].indexOf.call(document.querySelectorAll(e),this)}).call(e,t)},e.prototype.getOuterWidth=function(e,t){var n=e.offsetWidth;if(t){var r=getComputedStyle(e);n+=parseFloat(r.marginLeft)+parseFloat(r.marginRight)}return n},e.prototype.getHorizontalPadding=function(e){var t=getComputedStyle(e);return parseFloat(t.paddingLeft)+parseFloat(t.paddingRight)},e.prototype.getHorizontalMargin=function(e){var t=getComputedStyle(e);return parseFloat(t.marginLeft)+parseFloat(t.marginRight)},e.prototype.innerWidth=function(e){var t=e.offsetWidth,n=getComputedStyle(e);return t+=parseFloat(n.paddingLeft)+parseFloat(n.paddingRight)},e.prototype.width=function(e){var t=e.offsetWidth,n=getComputedStyle(e);return t-=parseFloat(n.paddingLeft)+parseFloat(n.paddingRight)},e.prototype.getInnerHeight=function(e){var t=e.offsetHeight,n=getComputedStyle(e);return t+=parseFloat(n.paddingTop)+parseFloat(n.paddingBottom)},e.prototype.getOuterHeight=function(e,t){var n=e.offsetHeight;if(t){var r=getComputedStyle(e);n+=parseFloat(r.marginTop)+parseFloat(r.marginBottom)}return n},e.prototype.getHeight=function(e){var t=e.offsetHeight,n=getComputedStyle(e);return t-=parseFloat(n.paddingTop)+parseFloat(n.paddingBottom)+parseFloat(n.borderTopWidth)+parseFloat(n.borderBottomWidth)},e.prototype.getWidth=function(e){var t=e.offsetWidth,n=getComputedStyle(e);return t-=parseFloat(n.paddingLeft)+parseFloat(n.paddingRight)+parseFloat(n.borderLeftWidth)+parseFloat(n.borderRightWidth)},e.prototype.getViewport=function(){var e=window,t=document,n=t.documentElement,r=t.getElementsByTagName("body")[0];return{width:e.innerWidth||n.clientWidth||r.clientWidth,height:e.innerHeight||n.clientHeight||r.clientHeight}},e.prototype.getOffset=function(e){var t=e.getBoundingClientRect();return{top:t.top+document.body.scrollTop,left:t.left+document.body.scrollLeft}},e.prototype.getUserAgent=function(){return navigator.userAgent},e.prototype.isIE=function(){var e=window.navigator.userAgent;return e.indexOf("MSIE ")>0||(e.indexOf("Trident/")>0?(e.indexOf("rv:"),!0):e.indexOf("Edge/")>0)},e.prototype.appendChild=function(e,t){if(this.isElement(t))t.appendChild(e);else{if(!t.el||!t.el.nativeElement)throw"Cannot append "+t+" to "+e;t.el.nativeElement.appendChild(e)}},e.prototype.removeChild=function(e,t){if(this.isElement(t))t.removeChild(e);else{if(!t.el||!t.el.nativeElement)throw"Cannot remove "+e+" from "+t;t.el.nativeElement.removeChild(e)}},e.prototype.isElement=function(e){return"object"==typeof HTMLElement?e instanceof HTMLElement:e&&"object"==typeof e&&null!==e&&1===e.nodeType&&"string"==typeof e.nodeName},e.prototype.calculateScrollbarWidth=function(){if(null!==this.calculatedScrollbarWidth)return this.calculatedScrollbarWidth;var e=document.createElement("div");e.className="ui-scrollbar-measure",document.body.appendChild(e);var t=e.offsetWidth-e.clientWidth;return document.body.removeChild(e),this.calculatedScrollbarWidth=t,t},e.prototype.invokeElementMethod=function(e,t,n){e[t].apply(e,n)},e.prototype.clearSelection=function(){if(window.getSelection)window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().rangeCount>0&&window.getSelection().getRangeAt(0).getClientRects().length>0&&window.getSelection().removeAllRanges();else if(document.selection&&document.selection.empty)try{document.selection.empty()}catch(e){}},e.zindex=1e3,e}();o=r([i.Injectable()],o),t.DomHandler=o},"51pc":function(e,t,n){var r=n("+pQw"),i=n("ewdp"),o=n("a/Sk"),l=n("yIWP")("IE_PROTO"),a=function(){},s=function(){var e,t=n("BQSv")("iframe"),r=o.length;for(t.style.display="none",n("Ed9o").appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),s=e.F;r--;)delete s.prototype[o[r]];return s()};e.exports=Object.create||function(e,t){var n;return null!==e?(a.prototype=r(e),n=new a,a.prototype=null,n[l]=e):n=s(),void 0===t?n:i(n,t)}},"5GJ3":function(e,t,n){var r=n("gBtn"),i=n("+pQw"),o=r.key,l=r.map,a=r.store;r.exp({deleteMetadata:function(e,t){var n=arguments.length<3?void 0:o(arguments[2]),r=l(i(t),n,!1);if(void 0===r||!r.delete(e))return!1;if(r.size)return!0;var s=a.get(t);return s.delete(n),!!s.size||a.delete(t)}})},"5O0w":function(e,t,n){"use strict";t.a=function(e){return function(t){return t.lift(new l(e))}};var r=n("6Xbx"),i=n("lI6h"),o=n("qgI0"),l=function(){function e(e){this.notifier=e}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.notifier))},e}(),a=function(e){function t(t,n){e.call(this,t),this.notifier=n,this.add(Object(o.a)(this,n))}return Object(r.__extends)(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.complete()},t.prototype.notifyComplete=function(){},t}(i.a)},"5jKg":function(e,t,n){"use strict";t.a=function(e,t){return function(n){return n.lift(new l(e,t))}};var r=n("6Xbx"),i=n("lI6h"),o=n("qgI0"),l=function(){function e(e,t){this.project=e,this.resultSelector=t}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.project,this.resultSelector))},e}(),a=function(e){function t(t,n,r){e.call(this,t),this.project=n,this.resultSelector=r,this.index=0}return Object(r.__extends)(t,e),t.prototype._next=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this._innerSub(t,e,n)},t.prototype._innerSub=function(e,t,n){var r=this.innerSubscription;r&&r.unsubscribe(),this.add(this.innerSubscription=Object(o.a)(this,e,t,n))},t.prototype._complete=function(){var t=this.innerSubscription;t&&!t.closed||e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){this.innerSubscription=null},t.prototype.notifyComplete=function(t){this.remove(t),this.innerSubscription=null,this.isStopped&&e.prototype._complete.call(this)},t.prototype.notifyNext=function(e,t,n,r,i){this.resultSelector?this._tryNotifyNext(e,t,n,r):this.destination.next(t)},t.prototype._tryNotifyNext=function(e,t,n,r){var i;try{i=this.resultSelector(e,t,n,r)}catch(e){return void this.destination.error(e)}this.destination.next(i)},t}(i.a)},"5oDA":function(e,t,n){var r=n("JXkd"),i=n("+pQw"),o=function(e,t){if(i(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,r){try{(r=n("pa70")(Function.call,n("6De9").f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,n){return o(e,n),t?e.__proto__=n:r(e,n),e}}({},!1):void 0),check:o}},"5q5V":function(e,t,n){"use strict";n.d(t,"a",function(){return c});var r=n("6Xbx"),i=n("TO51"),o=n("Gcw1"),l=n("qLnt"),a=n("YRqN"),s=n("Upor"),u=n("jaVc"),c=function(e){function t(t,n,r){void 0===t&&(t=Number.POSITIVE_INFINITY),void 0===n&&(n=Number.POSITIVE_INFINITY),e.call(this),this.scheduler=r,this._events=[],this._bufferSize=t<1?1:t,this._windowTime=n<1?1:n}return Object(r.__extends)(t,e),t.prototype.next=function(t){var n=this._getNow();this._events.push(new d(n,t)),this._trimBufferThenGetEvents(),e.prototype.next.call(this,t)},t.prototype._subscribe=function(e){var t,n=this._trimBufferThenGetEvents(),r=this.scheduler;if(this.closed)throw new s.a;this.hasError?t=l.a.EMPTY:this.isStopped?t=l.a.EMPTY:(this.observers.push(e),t=new u.a(this,e)),r&&e.add(e=new a.a(e,r));for(var i=n.length,o=0;o<i&&!e.closed;o++)e.next(n[o].value);return this.hasError?e.error(this.thrownError):this.isStopped&&e.complete(),t},t.prototype._getNow=function(){return(this.scheduler||o.a).now()},t.prototype._trimBufferThenGetEvents=function(){for(var e=this._getNow(),t=this._bufferSize,n=this._windowTime,r=this._events,i=r.length,o=0;o<i&&!(e-r[o].time<n);)o++;return i>t&&(o=Math.max(o,i-t)),o>0&&r.splice(0,o),r},t}(i.Subject),d=function(e,t){this.time=e,this.value=t}},"6De9":function(e,t,n){var r=n("9e9+"),i=n("piOq"),o=n("+GRi"),l=n("A1WY"),a=n("rMsi"),s=n("gNkH"),u=Object.getOwnPropertyDescriptor;t.f=n("V+0c")?u:function(e,t){if(e=o(e),t=l(t,!0),s)try{return u(e,t)}catch(e){}if(a(e,t))return i(!r.f.call(e,t),e[t])}},"6S6c":function(e,t,n){"use strict";t.a=function(e,t){return Object(r.a)(e,t)(this)};var r=n("LaOa")},"6Xbx":function(e,t,n){"use strict";function r(e){var t="function"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}function i(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)l.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return l}function o(e){return this instanceof o?(this.v=e,this):new o(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.__extends=function(e,t){function n(){this.constructor=e}l(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)},n.d(t,"__assign",function(){return a}),t.__rest=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&(n[r[i]]=e[r[i]])}return n},t.__decorate=function(e,t,n,r){var i,o=arguments.length,l=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(l=(o<3?i(l):o>3?i(t,n,l):i(t,n))||l);return o>3&&l&&Object.defineProperty(t,n,l),l},t.__param=function(e,t){return function(n,r){t(n,r,e)}},t.__metadata=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},t.__awaiter=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function l(e){try{s(r.next(e))}catch(e){o(e)}}function a(e){try{s(r.throw(e))}catch(e){o(e)}}function s(e){e.done?i(e.value):new n(function(t){t(e.value)}).then(l,a)}s((r=r.apply(e,t||[])).next())})},t.__generator=function(e,t){function n(n){return function(l){return function(n){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,i&&(o=i[2&n[0]?"return":n[0]?"throw":"next"])&&!(o=o.call(i,n[1])).done)return o;switch(i=0,o&&(n=[0,o.value]),n[0]){case 0:case 1:o=n;break;case 4:return a.label++,{value:n[1],done:!1};case 5:a.label++,i=n[1],n=[0];continue;case 7:n=a.ops.pop(),a.trys.pop();continue;default:if(o=a.trys,!(o=o.length>0&&o[o.length-1])&&(6===n[0]||2===n[0])){a=0;continue}if(3===n[0]&&(!o||n[1]>o[0]&&n[1]<o[3])){a.label=n[1];break}if(6===n[0]&&a.label<o[1]){a.label=o[1],o=n;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(n);break}o[2]&&a.ops.pop(),a.trys.pop();continue}n=t.call(e,a)}catch(e){n=[6,e],i=0}finally{r=o=0}if(5&n[0])throw n[1];return{value:n[0]?n[1]:void 0,done:!0}}([n,l])}}var r,i,o,l,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return l={next:n(0),throw:n(1),return:n(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l},t.__exportStar=function(e,t){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])},t.__values=r,t.__read=i,t.__spread=function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(i(arguments[t]));return e},t.__await=o,t.__asyncGenerator=function(e,t,n){function r(e){c[e]&&(u[e]=function(t){return new Promise(function(n,r){d.push([e,t,n,r])>1||i(e,t)})})}function i(e,t){try{!function(e){e.value instanceof o?Promise.resolve(e.value.v).then(l,a):s(d[0][2],e)}(c[e](t))}catch(e){s(d[0][3],e)}}function l(e){i("next",e)}function a(e){i("throw",e)}function s(e,t){e(t),d.shift(),d.length&&i(d[0][0],d[0][1])}if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var u,c=n.apply(e,t||[]),d=[];return u={},r("next"),r("throw"),r("return"),u[Symbol.asyncIterator]=function(){return this},u},t.__asyncDelegator=function(e){function t(t,i){e[t]&&(n[t]=function(n){return(r=!r)?{value:o(e[t](n)),done:"return"===t}:i?i(n):n})}var n,r;return n={},t("next"),t("throw",function(e){throw e}),t("return"),n[Symbol.iterator]=function(){return this},n},t.__asyncValues=function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator];return t?t.call(e):r(e)},t.__makeTemplateObject=function(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e};var l=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++){t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e}},"6y8h":function(e,t,n){"use strict";var r=n("6Xbx"),i=n("E9/g"),o=n("8ofh"),l=n("NePw"),a=function(){function e(e,t){this.compare=e,this.keySelector=t}return e.prototype.call=function(e,t){return t.subscribe(new s(e,this.compare,this.keySelector))},e}(),s=function(e){function t(t,n,r){e.call(this,t),this.keySelector=r,this.hasKey=!1,"function"==typeof n&&(this.compare=n)}return Object(r.__extends)(t,e),t.prototype.compare=function(e,t){return e===t},t.prototype._next=function(e){var t=e;if(this.keySelector&&(t=Object(o.a)(this.keySelector)(e))===l.a)return this.destination.error(l.a.e);var n=!1;if(this.hasKey){if((n=Object(o.a)(this.compare)(this.key,t))===l.a)return this.destination.error(l.a.e)}else this.hasKey=!0;!1===Boolean(n)&&(this.key=t,this.destination.next(e))},t}(i.a);t.a=function(e,t){return function(e,t){return function(n){return n.lift(new a(e,t))}}(e,t)(this)}},"8Ut3":function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("6Xbx"),i=function(e){function t(t,n){e.call(this),this.value=t,this.scheduler=n,this._isScalar=!0,n&&(this._isScalar=!1)}return Object(r.__extends)(t,e),t.create=function(e,n){return new t(e,n)},t.dispatch=function(e){var t=e.value,n=e.subscriber;e.done?n.complete():(n.next(t),n.closed||(e.done=!0,this.schedule(e)))},t.prototype._subscribe=function(e){var n=this.value,r=this.scheduler;if(r)return r.schedule(t.dispatch,0,{done:!1,value:n,subscriber:e});e.next(n),e.closed||e.complete()},t}(n("AP4T").a)},"8ofh":function(e,t,n){"use strict";function r(){try{return i.apply(this,arguments)}catch(e){return o.a.e=e,o.a}}t.a=function(e){return i=e,r};var i,o=n("NePw")},"8sYH":function(e,t,n){var r=n("gBtn"),i=n("+pQw"),o=n("TJLg"),l=r.has,a=r.key,s=function(e,t,n){if(l(e,t,n))return!0;var r=o(t);return null!==r&&s(e,r,n)};r.exp({hasMetadata:function(e,t){return s(e,i(t),arguments.length<3?void 0:a(arguments[2]))}})},"9ScN":function(e,t,n){"use strict";var r=n("51pc"),i=n("piOq"),o=n("P6IN"),l={};n("gxdV")(l,n("3r0D")("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(l,{next:i(1,n)}),o(e,t+" Iterator")}},"9e9+":function(e,t){t.f={}.propertyIsEnumerable},"9wYb":function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},A1WY:function(e,t,n){var r=n("JXkd");e.exports=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},ADVA:function(e,t,n){"use strict";function r(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];var n=e.length;if(0===n)throw new Error("list of properties cannot be empty.");return function(t){return Object(_.a)(function(e,t){return function(n){for(var r=n,i=0;i<t;i++){var o=r[e[i]];if(void 0===o)return;r=o}return r}}(e,n))(t)}}.apply(void 0,e)(this)}function i(e,t){void 0===t&&(t={});for(var n=Object.keys(e),r={},i=0;i<n.length;i++){var o=n[i];"function"==typeof e[o]&&(r[o]=e[o])}var l=Object.keys(r);return function(e,n){e=e||t;for(var i=!1,o={},a=0;a<l.length;a++){var s=l[a],u=e[s],c=(0,r[s])(u,n);o[s]=c,i=i||c!==u}return i?o:e}}function o(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){if(0===e.length)return t;var n=e[e.length-1];return e.slice(0,-1).reduceRight(function(e,t){return t(e)},n(t))}}function l(e,t){return Array.isArray(t)&&t.length>0?o.apply(null,t.concat([e])):e}function a(e,t){void 0===e&&(e={state:void 0});var n=t[0];return{state:(0,t[1])(e.state,n),action:n}}function s(e,t,n){return t instanceof d.InjectionToken?e.get(t):t}function u(e,t,n){return t.map(function(t,n){return t instanceof d.InjectionToken?e.get(t):t})}function c(e){return"function"==typeof e?e():e}var d=n("LMZF"),p=n("eoFs"),f=n("AP4T"),h=n("TO51"),m=n("Gcw1"),g=n("ozyc"),y=n("ThPn"),v=n("3k/+"),b=n("dmC+"),_=n("qqDE"),w=n("6y8h");n.d(t,"n",function(){return X}),n.d(t,"m",function(){return $}),n.d(t,"w",function(){return i}),n.d(t,"x",function(){return o}),n.d(t,"y",function(){return l}),n.d(t,"a",function(){return L}),n.d(t,"b",function(){return A}),n.d(t,"g",function(){return B}),n.d(t,"i",function(){return j}),n.d(t,"h",function(){return V}),n.d(t,"p",function(){return z}),n.d(t,"j",function(){return W}),n.d(t,"k",function(){return G}),n.d(t,"l",function(){return U}),n.d(t,"d",function(){return E}),n.d(t,"s",function(){return O}),n.d(t,"f",function(){return S}),n.d(t,"q",function(){return k}),n.d(t,"c",function(){return T}),n.d(t,"r",function(){return C}),n.d(t,"e",function(){return D}),n.d(t,"t",function(){return R}),n.d(t,"o",function(){return Q}),n.d(t,"v",function(){return c}),n.d(t,"u",function(){return s});var x=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),C=new d.InjectionToken("@ngrx/store Internal Initial State"),E=new d.InjectionToken("@ngrx/store Initial State"),S=new d.InjectionToken("@ngrx/store Reducer Factory"),O=new d.InjectionToken("@ngrx/store Reducer Factory Provider"),T=new d.InjectionToken("@ngrx/store Initial Reducers"),k=new d.InjectionToken("@ngrx/store Internal Initial Reducers"),D=new d.InjectionToken("@ngrx/store Meta Reducers"),I=new d.InjectionToken("@ngrx/store Store Features"),R=new d.InjectionToken("@ngrx/store Internal Store Reducers"),M=new d.InjectionToken("@ngrx/store Internal Feature Reducers"),P=new d.InjectionToken("@ngrx/store Internal Feature Reducers Token"),N=new d.InjectionToken("@ngrx/store Feature Reducers"),A="@ngrx/store/init",L=function(e){function t(){return e.call(this,{type:A})||this}return x(t,e),t.prototype.next=function(t){if(void 0===t)throw new TypeError("Actions must be objects");if(void 0===t.type)throw new TypeError("Actions must have a type property");e.prototype.next.call(this,t)},t.prototype.complete=function(){},t.prototype.ngOnDestroy=function(){e.prototype.complete.call(this)},t}(p.a),F=[L],j=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return x(t,e),t}(f.a),V=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return x(t,e),t}(L),z="@ngrx/store/update-reducers",B=function(e){function t(t,n,r,i){var o=e.call(this,i(r,n))||this;return o.dispatcher=t,o.initialState=n,o.reducers=r,o.reducerFactory=i,o}return x(t,e),t.prototype.addFeature=function(e){var t=e.reducers,n=e.initialState,r=e.key,i="function"==typeof t?function(e,r){return t(e||n,r)}:l(e.reducerFactory,e.metaReducers)(t,n);this.addReducer(r,i)},t.prototype.removeFeature=function(e){this.removeReducer(e.key)},t.prototype.addReducer=function(e,t){this.reducers=Object.assign({},this.reducers,(n={},n[e]=t,n)),this.updateReducers();var n},t.prototype.removeReducer=function(e){this.reducers=function(e,t){return Object.keys(e).filter(function(e){return e!==t}).reduce(function(t,n){return Object.assign(t,(r={},r[n]=e[n],r));var r},{})}(this.reducers,e),this.updateReducers()},t.prototype.updateReducers=function(){this.next(this.reducerFactory(this.reducers,this.initialState)),this.dispatcher.next({type:z})},t.prototype.ngOnDestroy=function(){this.complete()},t}(p.a),H=[B,{provide:j,useExisting:B},{provide:V,useExisting:L}],W=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return x(t,e),t.prototype.ngOnDestroy=function(){this.complete()},t}(h.Subject),q=[W],U=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return x(t,e),t}(f.a),G=function(e){function t(t,n,r,i){var o=e.call(this,i)||this,l=g.a.call(t,m.a),s=y.a.call(l,n),u=v.a.call(s,a,{state:i});return o.stateSubscription=u.subscribe({next:function(e){var t=e.action;o.next(e.state),r.next(t)}}),o}return x(t,e),t.prototype.ngOnDestroy=function(){this.stateSubscription.unsubscribe(),this.complete()},t}(p.a);G.INIT=A;var K=[G,{provide:U,useExisting:G}],$=function(e){function t(t,n,r){var i=e.call(this)||this;return i.actionsObserver=n,i.reducerManager=r,i.source=t,i}return x(t,e),t.prototype.select=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var i;if("string"==typeof e)i=r.call.apply(r,[this,e].concat(t));else{if("function"!=typeof e)throw new TypeError("Unexpected type '"+typeof e+"' in select operator, expected 'string' or 'function'");i=b.a.call(this,e)}return w.a.call(i)},t.prototype.lift=function(e){var n=new t(this,this.actionsObserver,this.reducerManager);return n.operator=e,n},t.prototype.dispatch=function(e){this.actionsObserver.next(e)},t.prototype.next=function(e){this.actionsObserver.next(e)},t.prototype.error=function(e){this.actionsObserver.error(e)},t.prototype.complete=function(){this.actionsObserver.complete()},t.prototype.addReducer=function(e,t){this.reducerManager.addReducer(e,t)},t.prototype.removeReducer=function(e){this.reducerManager.removeReducer(e)},t}(f.a),Z=[$],Q=function(e,t,n){},Y=function(){function e(e,t,n){this.features=e,this.featureReducers=t,this.reducerManager=n,e.map(function(e,n){var r=t.shift()[n];return Object.assign({},e,{reducers:r,initialState:c(e.initialState)})}).forEach(function(e){return n.addFeature(e)})}return e.prototype.ngOnDestroy=function(){var e=this;this.features.forEach(function(t){return e.reducerManager.removeFeature(t)})},e}(),X=function(){function e(){}return e.forRoot=function(e,t){return void 0===t&&(t={}),{ngModule:Q,providers:[{provide:C,useValue:t.initialState},{provide:E,useFactory:c,deps:[C]},{provide:k,useValue:e},{provide:R,useExisting:e instanceof d.InjectionToken?e:k},{provide:T,deps:[d.Injector,k,[new d.Inject(R)]],useFactory:s},{provide:D,useValue:t.metaReducers?t.metaReducers:[]},{provide:O,useValue:t.reducerFactory?t.reducerFactory:i},{provide:S,deps:[O,D],useFactory:l},F,H,q,K,Z]}},e.forFeature=function(e,t,n){return void 0===n&&(n={}),{ngModule:Y,providers:[{provide:I,multi:!0,useValue:{key:e,reducerFactory:n.reducerFactory?n.reducerFactory:i,metaReducers:n.metaReducers?n.metaReducers:[],initialState:n.initialState}},{provide:M,multi:!0,useValue:t},{provide:P,multi:!0,useExisting:t instanceof d.InjectionToken?t:M},{provide:N,multi:!0,deps:[d.Injector,M,[new d.Inject(P)]],useFactory:u}]}},e}()},AP4T:function(e,t,n){"use strict";var r=n("xIGM"),i=n("E9/g"),o=n("V7AE"),l=n("grVA"),a=n("mz3w"),s=n("PR+T");n.d(t,"a",function(){return u});var u=function(){function e(e){this._isScalar=!1,e&&(this._subscribe=e)}return e.prototype.lift=function(t){var n=new e;return n.source=this,n.operator=t,n},e.prototype.subscribe=function(e,t,n){var r=this.operator,a=function(e,t,n){if(e){if(e instanceof i.a)return e;if(e[o.a])return e[o.a]()}return e||t||n?new i.a(e,t,n):new i.a(l.a)}(e,t,n);if(r?r.call(a,this.source):a.add(this.source?this._subscribe(a):this._trySubscribe(a)),a.syncErrorThrowable&&(a.syncErrorThrowable=!1,a.syncErrorThrown))throw a.syncErrorValue;return a},e.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(t){e.syncErrorThrown=!0,e.syncErrorValue=t,e.error(t)}},e.prototype.forEach=function(e,t){var n=this;if(t||(r.a.Rx&&r.a.Rx.config&&r.a.Rx.config.Promise?t=r.a.Rx.config.Promise:r.a.Promise&&(t=r.a.Promise)),!t)throw new Error("no Promise impl found");return new t(function(t,r){var i;i=n.subscribe(function(t){if(i)try{e(t)}catch(e){r(e),i.unsubscribe()}else e(t)},r,t)})},e.prototype._subscribe=function(e){return this.source.subscribe(e)},e.prototype[a.a]=function(){return this},e.prototype.pipe=function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return 0===e.length?this:function(e){return e?1===e.length?e[0]:function(t){return e.reduce(function(e,t){return t(e)},t)}:s.a}(e)(this)},e.prototype.toPromise=function(e){var t=this;if(e||(r.a.Rx&&r.a.Rx.config&&r.a.Rx.config.Promise?e=r.a.Rx.config.Promise:r.a.Promise&&(e=r.a.Promise)),!e)throw new Error("no Promise impl found");return new e(function(e,n){var r;t.subscribe(function(e){return r=e},function(e){return n(e)},function(){return e(r)})})},e.create=function(t){return new e(t)},e}()},B1iP:function(e,t,n){"use strict";t.a=function(e){return"function"==typeof e}},BCYq:function(e,t,n){var r=n("pa70"),i=n("Wo2w"),o=n("RT4T"),l=n("rppw"),a=n("UKZQ");e.exports=function(e,t){var n=1==e,s=2==e,u=3==e,c=4==e,d=6==e,p=5==e||d,f=t||a;return function(t,a,h){for(var m,g,y=o(t),v=i(y),b=r(a,h,3),_=l(v.length),w=0,x=n?f(t,_):s?f(t,0):void 0;_>w;w++)if((p||w in v)&&(m=v[w],g=b(m,w,y),e))if(n)x[w]=g;else if(g)switch(e){case 3:return!0;case 5:return m;case 6:return w;case 2:x.push(m)}else if(c)return!1;return d?-1:u||c?c:x}}},BQSv:function(e,t,n){var r=n("JXkd"),i=n("ptrv").document,o=r(i)&&r(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},BThc:function(e,t,n){"use strict";var r=n("2kLc");t.a=function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return function(t){return t.lift.call(r.a.apply(void 0,[t].concat(e)))}}.apply(void 0,e)(this)},n.d(t,!1,function(){return r.a})},CDXM:function(e,t,n){var r=n("ptrv"),i=n("b4gG"),o=n("gxdV"),l=n("lfBE"),a=n("pa70"),s=function(e,t,n){var u,c,d,p,f=e&s.F,h=e&s.G,m=e&s.P,g=e&s.B,y=h?r:e&s.S?r[t]||(r[t]={}):(r[t]||{}).prototype,v=h?i:i[t]||(i[t]={}),b=v.prototype||(v.prototype={});h&&(n=t);for(u in n)d=((c=!f&&y&&void 0!==y[u])?y:n)[u],p=g&&c?a(d,r):m&&"function"==typeof d?a(Function.call,d):d,y&&l(y,u,d,e&s.U),v[u]!=d&&o(v,u,p),m&&b[u]!=d&&(b[u]=d)};r.core=i,s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,e.exports=s},"E9/g":function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r=n("6Xbx"),i=n("B1iP"),o=n("qLnt"),l=n("grVA"),a=n("V7AE"),s=function(e){function t(n,r,i){switch(e.call(this),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=l.a;break;case 1:if(!n){this.destination=l.a;break}if("object"==typeof n){n instanceof t?(this.destination=n,this.destination.add(this)):(this.syncErrorThrowable=!0,this.destination=new u(this,n));break}default:this.syncErrorThrowable=!0,this.destination=new u(this,n,r,i)}}return Object(r.__extends)(t,e),t.prototype[a.a]=function(){return this},t.create=function(e,n,r){var i=new t(e,n,r);return i.syncErrorThrowable=!1,i},t.prototype.next=function(e){this.isStopped||this._next(e)},t.prototype.error=function(e){this.isStopped||(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this))},t.prototype._next=function(e){this.destination.next(e)},t.prototype._error=function(e){this.destination.error(e),this.unsubscribe()},t.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},t.prototype._unsubscribeAndRecycle=function(){var e=this._parent,t=this._parents;return this._parent=null,this._parents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parent=e,this._parents=t,this},t}(o.a),u=function(e){function t(t,n,r,o){e.call(this),this._parentSubscriber=t;var a,s=this;Object(i.a)(n)?a=n:n&&(a=n.next,r=n.error,o=n.complete,n!==l.a&&(s=Object.create(n),Object(i.a)(s.unsubscribe)&&this.add(s.unsubscribe.bind(s)),s.unsubscribe=this.unsubscribe.bind(this))),this._context=s,this._next=a,this._error=r,this._complete=o}return Object(r.__extends)(t,e),t.prototype.next=function(e){if(!this.isStopped&&this._next){var t=this._parentSubscriber;t.syncErrorThrowable?this.__tryOrSetError(t,this._next,e)&&this.unsubscribe():this.__tryOrUnsub(this._next,e)}},t.prototype.error=function(e){if(!this.isStopped){var t=this._parentSubscriber;if(this._error)t.syncErrorThrowable?(this.__tryOrSetError(t,this._error,e),this.unsubscribe()):(this.__tryOrUnsub(this._error,e),this.unsubscribe());else{if(!t.syncErrorThrowable)throw this.unsubscribe(),e;t.syncErrorValue=e,t.syncErrorThrown=!0,this.unsubscribe()}}},t.prototype.complete=function(){var e=this;if(!this.isStopped){var t=this._parentSubscriber;if(this._complete){var n=function(){return e._complete.call(e._context)};t.syncErrorThrowable?(this.__tryOrSetError(t,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}},t.prototype.__tryOrUnsub=function(e,t){try{e.call(this._context,t)}catch(e){throw this.unsubscribe(),e}},t.prototype.__tryOrSetError=function(e,t,n){try{t.call(this._context,n)}catch(t){return e.syncErrorValue=t,e.syncErrorThrown=!0,!0}return!1},t.prototype._unsubscribe=function(){var e=this._parentSubscriber;this._context=null,this._parentSubscriber=null,e.unsubscribe()},t}(s)},"Ecq+":function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("6Xbx"),i=function(e){function t(t){e.call(this),this.scheduler=t}return Object(r.__extends)(t,e),t.create=function(e){return new t(e)},t.dispatch=function(e){e.subscriber.complete()},t.prototype._subscribe=function(e){var n=this.scheduler;if(n)return n.schedule(t.dispatch,0,{subscriber:e});e.complete()},t}(n("AP4T").a)},Ed9o:function(e,t,n){var r=n("ptrv").document;e.exports=r&&r.documentElement},GTlS:function(e,t,n){"use strict";var r=n("6Xbx"),i=n("xIGM"),o=function(e){function t(t,n){e.call(this)}return Object(r.__extends)(t,e),t.prototype.schedule=function(e,t){return void 0===t&&(t=0),this},t}(n("qLnt").a);n.d(t,"a",function(){return l});var l=function(e){function t(t,n){e.call(this,t,n),this.scheduler=t,this.work=n,this.pending=!1}return Object(r.__extends)(t,e),t.prototype.schedule=function(e,t){if(void 0===t&&(t=0),this.closed)return this;this.state=e,this.pending=!0;var n=this.id,r=this.scheduler;return null!=n&&(this.id=this.recycleAsyncId(r,n,t)),this.delay=t,this.id=this.id||this.requestAsyncId(r,this.id,t),this},t.prototype.requestAsyncId=function(e,t,n){return void 0===n&&(n=0),i.a.setInterval(e.flush.bind(e,this),n)},t.prototype.recycleAsyncId=function(e,t,n){if(void 0===n&&(n=0),null!==n&&this.delay===n&&!1===this.pending)return t;i.a.clearInterval(t)},t.prototype.execute=function(e,t){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var n=this._execute(e,t);if(n)return n;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},t.prototype._execute=function(e,t){var n=!1,r=void 0;try{this.work(e)}catch(e){n=!0,r=!!e&&e||new Error(e)}if(n)return this.unsubscribe(),r},t.prototype._unsubscribe=function(){var e=this.id,t=this.scheduler,n=t.actions,r=n.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==r&&n.splice(r,1),null!=e&&(this.id=this.recycleAsyncId(t,e,null)),this.delay=null},t}(o)},Gcw1:function(e,t,n){"use strict";var r=n("6Xbx"),i=function(e){function t(t,n){e.call(this,t,n),this.scheduler=t,this.work=n}return Object(r.__extends)(t,e),t.prototype.schedule=function(t,n){return void 0===n&&(n=0),n>0?e.prototype.schedule.call(this,t,n):(this.delay=n,this.state=t,this.scheduler.flush(this),this)},t.prototype.execute=function(t,n){return n>0||this.closed?e.prototype.execute.call(this,t,n):this._execute(t,n)},t.prototype.requestAsyncId=function(t,n,r){return void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0?e.prototype.requestAsyncId.call(this,t,n,r):t.flush(this)},t}(n("GTlS").a),o=function(e){function t(){e.apply(this,arguments)}return Object(r.__extends)(t,e),t}(n("wclm").a);n.d(t,"a",function(){return l});var l=new o(i)},GpNi:function(e,t,n){"use strict";t.a=function(e,t){return Object(r.a)(e,t)(this)};var r=n("5jKg")},H0Ur:function(e,t,n){"use strict";var r=n("6Xbx").__decorate;Object.defineProperty(t,"__esModule",{value:!0});var i=n("LMZF"),o=n("TO51"),l=function(){function e(){this.dragStartSource=new o.Subject,this.dragStopSource=new o.Subject,this.dragStart$=this.dragStartSource.asObservable(),this.dragStop$=this.dragStopSource.asObservable()}return e.prototype.startDrag=function(e){this.dragStartSource.next(e)},e.prototype.stopDrag=function(e){this.dragStopSource.next(e)},e}();l=r([i.Injectable()],l),t.TreeDragDropService=l},HCkn:function(e,t,n){var r=n("Ps07"),i=n("WGJ/"),o=n("gBtn"),l=n("+pQw"),a=n("TJLg"),s=o.keys,u=o.key,c=function(e,t){var n=s(e,t),o=a(e);if(null===o)return n;var l=c(o,t);return l.length?n.length?i(new r(n.concat(l))):l:n};o.exp({getMetadataKeys:function(e){return c(l(e),arguments.length<2?void 0:u(arguments[1]))}})},IJ3P:function(e,t,n){var r=n("gBtn"),i=n("+pQw"),o=r.has,l=r.key;r.exp({hasOwnMetadata:function(e,t){return o(e,i(t),arguments.length<3?void 0:l(arguments[2]))}})},Iclu:function(e,t,n){var r=n("ptrv"),i="__core-js_shared__",o=r[i]||(r[i]={});e.exports=function(e){return o[e]||(o[e]={})}},JXkd:function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},Jsyr:function(e,t,n){"use strict";var r=n("6Xbx"),i=n("AP4T"),o=n("Ecq+"),l=n("1j/l"),a=n("qgI0"),s=n("lI6h"),u=function(e){function t(t,n){e.call(this),this.sources=t,this.resultSelector=n}return Object(r.__extends)(t,e),t.create=function(){for(var e=[],n=0;n<arguments.length;n++)e[n-0]=arguments[n];if(null===e||0===arguments.length)return new o.a;var r=null;return"function"==typeof e[e.length-1]&&(r=e.pop()),1===e.length&&Object(l.a)(e[0])&&(e=e[0]),0===e.length?new o.a:new t(e,r)},t.prototype._subscribe=function(e){return new c(e,this.sources,this.resultSelector)},t}(i.a),c=function(e){function t(t,n,r){e.call(this,t),this.sources=n,this.resultSelector=r,this.completed=0,this.haveValues=0;var i=n.length;this.total=i,this.values=new Array(i);for(var o=0;o<i;o++){var l=n[o],s=Object(a.a)(this,l,null,o);s&&(s.outerIndex=o,this.add(s))}}return Object(r.__extends)(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.values[n]=t,i._hasValue||(i._hasValue=!0,this.haveValues++)},t.prototype.notifyComplete=function(e){var t=this.destination,n=this.haveValues,r=this.resultSelector,i=this.values,o=i.length;if(e._hasValue){if(this.completed++,this.completed===o){if(n===o){var l=r?r.apply(this,i):i;t.next(l)}t.complete()}}else t.complete()},t}(s.a);n.d(t,"a",function(){return d});var d=u.create},KGrn:function(e,t){e.exports=!1},KM3d:function(e,t,n){var r=n("9wYb"),i=Math.max,o=Math.min;e.exports=function(e,t){return(e=r(e))<0?i(e+t,0):o(e,t)}},KRwF:function(e,t,n){"use strict";function r(e){var t=e.subscriber;t.closed||(t.next(e.value),t.complete())}function i(e){var t=e.subscriber;t.closed||t.error(e.err)}n.d(t,"a",function(){return a});var o=n("6Xbx"),l=n("xIGM"),a=function(e){function t(t,n){e.call(this),this.promise=t,this.scheduler=n}return Object(o.__extends)(t,e),t.create=function(e,n){return new t(e,n)},t.prototype._subscribe=function(e){var t=this,n=this.promise,o=this.scheduler;if(null==o)this._isScalar?e.closed||(e.next(this.value),e.complete()):n.then(function(n){t.value=n,t._isScalar=!0,e.closed||(e.next(n),e.complete())},function(t){e.closed||e.error(t)}).then(null,function(e){l.a.setTimeout(function(){throw e})});else if(this._isScalar){if(!e.closed)return o.schedule(r,0,{value:this.value,subscriber:e})}else n.then(function(n){t.value=n,t._isScalar=!0,e.closed||e.add(o.schedule(r,0,{value:n,subscriber:e}))},function(t){e.closed||e.add(o.schedule(i,0,{err:t,subscriber:e}))}).then(null,function(e){l.a.setTimeout(function(){throw e})})},t}(n("AP4T").a)},"KpI+":function(e,t,n){var r=n("lexG"),i=n("3r0D")("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||o[i]===e)}},KpXt:function(e,t,n){"use strict";var r=n("ptrv"),i=n("tose"),o=n("V+0c"),l=n("3r0D")("species");e.exports=function(e){var t=r[e];o&&t&&!t[l]&&i.f(t,l,{configurable:!0,get:function(){return this}})}},LMZF:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){function r(e,t,n,r){function o(e){if(this instanceof o)return l.call(this,e),this;var t=new o(e),n=function(e){return(e.hasOwnProperty(Pr)?e[Pr]:Object.defineProperty(e,Pr,{value:[]})[Pr]).push(t),e};return r&&r(n),n}var l=i(t);return n&&(o.prototype=Object.create(n.prototype)),o.prototype.ngMetadataName=e,o.annotationCls=o,o}function i(e){return function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];if(e){var r=e.apply(void 0,t);for(var i in r)this[i]=r[i]}}}function o(e,t,n){function r(){function e(e,t,n){for(var r=e.hasOwnProperty(Nr)?e[Nr]:Object.defineProperty(e,Nr,{value:[]})[Nr];r.length<=n;)r.push(null);return(r[n]=r[n]||[]).push(i),e}for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];if(this instanceof r)return o.apply(this,t),this;var i=new((l=r).bind.apply(l,[void 0].concat(t)));return e.annotation=i,e;var l}var o=i(t);return n&&(r.prototype=Object.create(n.prototype)),r.prototype.ngMetadataName=e,r.annotationCls=r,r}function l(e,t,n){function r(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(this instanceof r)return o.apply(this,e),this;var n=new((i=r).bind.apply(i,[void 0].concat(e)));return function(e,t){var r=e.constructor,i=r.hasOwnProperty(Ar)?r[Ar]:Object.defineProperty(r,Ar,{value:{}})[Ar];i[t]=i.hasOwnProperty(t)&&i[t]||[],i[t].unshift(n)};var i}var o=i(t);return n&&(r.prototype=Object.create(n.prototype)),r.prototype.ngMetadataName=e,r.annotationCls=r,r}function a(e){return null==e||e===Wr.Default}function s(){if(!fi){var e=pi.Symbol;if(e&&e.iterator)fi=e.iterator;else for(var t=Object.getOwnPropertyNames(Map.prototype),n=0;n<t.length;++n){var r=t[n];"entries"!==r&&"size"!==r&&Map.prototype[r]===Map.prototype.entries&&(fi=r)}}return fi}function u(e){Zone.current.scheduleMicroTask("scheduleMicrotask",e)}function c(e,t){return e===t||"number"==typeof e&&"number"==typeof t&&isNaN(e)&&isNaN(t)}function d(e){if("string"==typeof e)return e;if(e instanceof Array)return"["+e.map(d).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return""+e.overriddenName;if(e.name)return""+e.name;var t=e.toString();if(null==t)return""+t;var n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}function p(e){return e.__forward_ref__=p,e.toString=function(){return d(this())},e}function f(e){return"function"==typeof e&&e.hasOwnProperty("__forward_ref__")&&e.__forward_ref__===p?e():e}function h(e){return v("Cannot mix multi providers and regular providers",e)}function m(e,t){if(t)if((t=f(t))instanceof Array)for(var n=0;n<t.length;n++)m(e,t[n]);else{if("function"==typeof t)throw v("Function/Class not supported",t);if(!t||"object"!=typeof t||!t.provide)throw v("Unexpected provider",t);var r=f(t.provide),i=function(e){var t=function(e){var t=bi,n=e.deps;if(n&&n.length){t=[];for(var r=0;r<n.length;r++){var i=6;if((s=f(n[r]))instanceof Array)for(var o=0,l=s;o<l.length;o++){var a=l[o];a instanceof oi||a==oi?i|=1:a instanceof si||a==si?i&=-3:a instanceof ai||a==ai?i&=-5:s=a instanceof ii?a.token:f(a)}t.push({token:s,options:i})}}else if(e.useExisting){var s;t=[{token:s=f(e.useExisting),options:6}]}else if(!(n||Ei in e))throw v("'deps' required",e);return t}(e),n=vi,r=bi,i=!1,o=f(e.provide);if(Ei in e)r=e.useValue;else if(e.useFactory)n=e.useFactory;else if(e.useExisting);else if(e.useClass)i=!0,n=f(e.useClass);else{if("function"!=typeof o)throw v("StaticProvider does not have [useValue|useFactory|useExisting|useClass] or [provide] is not newable",e);i=!0,n=o}return{deps:t,fn:n,useNew:i,value:r}}(t);if(!0===t.multi){var o=e.get(r);if(o){if(o.fn!==wi)throw h(r)}else e.set(r,o={token:t.provide,deps:[],useNew:!1,fn:wi,value:bi});o.deps.push({token:r=t,options:6})}var l=e.get(r);if(l&&l.fn==wi)throw h(r);e.set(r,i)}}function g(e,t,n,r,i){try{return function(e,t,n,r,i){var o;if(t){if((o=t.value)==_i)throw Error(ki+"Circular dependency");if(o===bi){t.value=_i;var l=t.useNew,a=t.fn,s=t.deps,u=bi;if(s.length){u=[];for(var c=0;c<s.length;c++){var d=s[c],p=d.options,f=2&p?n.get(d.token):void 0;u.push(g(d.token,f,n,f||4&p?r:Oi,1&p?null:yi.THROW_IF_NOT_FOUND))}}t.value=o=l?new((h=a).bind.apply(h,[void 0].concat(u))):a.apply(void 0,u)}}else o=r.get(e,i);return o;var h}(e,t,n,r,i)}catch(n){throw n instanceof Error||(n=new Error(n)),(n[Si]=n[Si]||[]).unshift(e),t&&t.value==_i&&(t.value=bi),n}}function y(e,t){e=e&&"\n"===e.charAt(0)&&e.charAt(1)==ki?e.substr(2):e;var n=d(t);if(t instanceof Array)n=t.map(d).join(" -> ");else if("object"==typeof t){var r=[];for(var i in t)if(t.hasOwnProperty(i)){var o=t[i];r.push(i+":"+("string"==typeof o?JSON.stringify(o):d(o)))}n="{"+r.join(", ")+"}"}return"StaticInjectorError["+n+"]: "+e.replace(Ti,"\n  ")}function v(e,t){return new Error(y(e,t))}function b(e){return e[Ii]}function _(e){return e[Ri]}function w(e){return e.length>1?" ("+function(e){for(var t=[],n=0;n<e.length;++n){if(t.indexOf(e[n])>-1)return t.push(e[n]),t;t.push(e[n])}return t}(e.slice().reverse()).map(function(e){return d(e.token)}).join(" -> ")+")":""}function x(e,t,n,r){var i=[t],o=n(i),l=r?function(e,t){var n=o+" caused by: "+(t instanceof Error?t.message:t),r=Error(n);return r[Ri]=t,r}(0,r):Error(o);return l.addKey=C,l.keys=i,l.injectors=[e],l.constructResolvingMessage=n,l[Ri]=r,l}function C(e,t){this.injectors.push(e),this.keys.push(t),this.message=this.constructResolvingMessage(this.keys)}function E(e,t){for(var n=[],r=0,i=t.length;r<i;r++){var o=t[r];n.push(o&&0!=o.length?o.map(d).join(" "):"?")}return Error("Cannot resolve all parameters for '"+d(e)+"'("+n.join(", ")+"). Make sure that all the parameters are decorated with Inject or have valid type annotations and that '"+d(e)+"' is decorated with Injectable.")}function S(e,t){return Error("Cannot mix multi providers and regular providers, got: "+e+" "+t)}function O(e){return"function"==typeof e}function T(e){return e?e.map(function(e){var t=e.type.annotationCls;return new(t.bind.apply(t,[void 0].concat(e.args?e.args:[])))}):[]}function k(e){var t=Object.getPrototypeOf(e.prototype);return(t?t.constructor:null)||Object}function D(e){return new Hi(Ni.get(e.provide),[function(e){var t,n;if(e.useClass){var r=f(e.useClass);t=Vi.factory(r),n=M(r)}else e.useExisting?(t=function(e){return e},n=[zi.fromKey(Ni.get(e.useExisting))]):e.useFactory?(t=e.useFactory,n=function(e,t){if(t){var n=t.map(function(e){return[e]});return t.map(function(t){return P(e,t,n)})}return M(e)}(e.useFactory,e.deps)):(t=function(){return e.useValue},n=Bi);return new Wi(t,n)}(e)],e.multi||!1)}function I(e){var t=function(e,t){for(var n=0;n<e.length;n++){var r=e[n],i=t.get(r.key.id);if(i){if(r.multiProvider!==i.multiProvider)throw S(i,r);if(r.multiProvider)for(var o=0;o<r.resolvedFactories.length;o++)i.resolvedFactories.push(r.resolvedFactories[o]);else t.set(r.key.id,r)}else{var l=void 0;l=r.multiProvider?new Hi(r.key,r.resolvedFactories.slice(),r.multiProvider):r,t.set(r.key.id,l)}}return t}(R(e,[]).map(D),new Map);return Array.from(t.values())}function R(e,t){return e.forEach(function(e){if(e instanceof Li)t.push({provide:e,useClass:e});else if(e&&"object"==typeof e&&void 0!==e.provide)t.push(e);else{if(!(e instanceof Array))throw function(e){return Error("Invalid provider - only instances of Provider and Type are allowed, got: "+e)}(e);R(e,t)}}),t}function M(e){var t=Vi.parameters(e);if(!t)return[];if(t.some(function(e){return null==e}))throw E(e,t);return t.map(function(n){return P(e,n,t)})}function P(e,t,n){var r=null,i=!1;if(!Array.isArray(t))return N(t instanceof ii?t.token:t,i,null);for(var o=null,l=0;l<t.length;++l){var a=t[l];a instanceof Li?r=a:a instanceof ii?r=a.token:a instanceof oi?i=!0:a instanceof ai||a instanceof si?o=a:a instanceof Mr&&(r=a)}if(null!=(r=f(r)))return N(r,i,o);throw E(e,n)}function N(e,t,n){return new zi(Ni.get(e),t,n)}function A(e){return!!e&&"function"==typeof e.then}function L(e){return!!e&&"function"==typeof e.subscribe}function F(){return""+j()+j()+j()}function j(){return String.fromCharCode(97+Math.floor(25*Math.random()))}function V(){throw new Error("Runtime compiler is not loaded")}function z(e){var t=Error("No component factory found for "+d(e)+". Did you add it to @NgModule.entryComponents?");return t[so]=e,t}function B(){var e=pi.wtf;return!(!e||!(wr=e.trace)||(xr=wr.events,0))}function H(e,t){return void 0===t&&(t=null),xr.createScope(e,t)}function W(e,t){return wr.leaveScope(e,t),t}function q(e,t){return wr.beginTimeRange(e,t)}function U(e){wr.endTimeRange(e)}function G(e,t){return null}function K(){}function $(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(function(){return e.onStable.emit(null)})}finally{e.isStable=!0}}}function Z(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function Q(e){e._nesting--,$(e)}function Y(e){To=e}function X(){if(Do)throw new Error("Cannot enable prod mode after platform setup.");ko=!1}function J(){return Do=!0,ko}function ee(e){if(Cr&&!Cr.destroyed&&!Cr.injector.get(Io,!1))throw new Error("There can be only one platform. Destroy the previous one to create a new one.");Cr=e.get(Mo);var t=e.get(Yi,null);return t&&t.forEach(function(e){return e()}),Cr}function te(e,t,n){void 0===n&&(n=[]);var r=new Mr("Platform: "+t);return function(t){void 0===t&&(t=[]);var i=ie();return i&&!i.injector.get(Io,!1)||(e?e(n.concat(t).concat({provide:r,useValue:!0})):ee(yi.create(n.concat(t).concat({provide:r,useValue:!0})))),ne(r)}}function ne(e){var t=ie();if(!t)throw new Error("No platform exists!");if(!t.injector.get(e,null))throw new Error("A platform with a different configuration has been created. Please destroy it first.");return t}function re(){Cr&&!Cr.destroyed&&Cr.destroy()}function ie(){return Cr&&!Cr.destroyed?Cr:null}function oe(e,t){return e=Array.isArray(t)?t.reduce(oe,e):Object(Tr.__assign)({},e,t)}function le(e,t){var n=e.indexOf(t);n>-1&&e.splice(n,1)}function ae(e,t){var n=Wo.get(e);if(n)throw new Error("Duplicate module registered for "+e+" - "+n.moduleType.name+" vs "+t.moduleType.name);Wo.set(e,t)}function se(e){var t=Wo.get(e);if(!t)throw new Error("No module with ID "+e+" loaded");return t}function ue(e){return e.reduce(function(e,t){var n=Array.isArray(t)?ue(t):t;return e.concat(n)},[])}function ce(e,t,n){if(!e)throw new Error("Cannot find '"+n+"' in '"+t+"'");return e}function de(e){return e.map(function(e){return e.nativeElement})}function pe(e,t,n){e.childNodes.forEach(function(e){e instanceof el&&(t(e)&&n.push(e),pe(e,t,n))})}function fe(e,t,n){e instanceof el&&e.childNodes.forEach(function(e){t(e)&&n.push(e),e instanceof el&&fe(e,t,n)})}function he(e){return tl.get(e)||null}function me(e){tl.set(e.nativeNode,e)}function ge(e,t){var n=ye(e),r=ye(t);return n&&r?function(t,n,r){for(var i=e[s()](),o=n[s()]();;){var l=i.next(),a=o.next();if(l.done&&a.done)return!0;if(l.done||a.done)return!1;if(!r(l.value,a.value))return!1}}(0,t,ge):!(n||!e||"object"!=typeof e&&"function"!=typeof e||r||!t||"object"!=typeof t&&"function"!=typeof t)||c(e,t)}function ye(e){return!!ve(e)&&(Array.isArray(e)||!(e instanceof Map)&&s()in e)}function ve(e){return null!==e&&("function"==typeof e||"object"==typeof e)}function be(e,t,n){var r=e.previousIndex;if(null===r)return r;var i=0;return n&&r<n.length&&(i=n[r]),r+t+i}function _e(){return yl}function we(){return vl}function xe(e){return e||"en-US"}function Ce(e,t,n){var r=e.state,i=1792&r;return i===t?(e.state=-1793&r|n,e.initIndex=-1,!0):i===n}function Ee(e,t,n){return(1792&e.state)===t&&e.initIndex<=n&&(e.initIndex=n+1,!0)}function Se(e,t){return e.nodes[t]}function Oe(e,t){return e.nodes[t]}function Te(e,t){return e.nodes[t]}function ke(e,t){return e.nodes[t]}function De(e,t){return e.nodes[t]}function Ie(e,t,n,r){var i="ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '"+t+"'. Current value: '"+n+"'.";return r&&(i+=" It seems like the view has been created after its parent and its children have been dirty checked. Has it been created in a change detection hook ?"),function(e,t){var n=new Error(e);return Re(n,t),n}(i,e)}function Re(e,t){e[Ii]=t,e[Mi]=t.logError.bind(t)}function Me(e){return new Error("ViewDestroyedError: Attempt to use a destroyed view: "+e)}function Pe(e){var t=Il.get(e);return t||(t=d(e)+"_"+Il.size,Il.set(e,t)),t}function Ne(e,t,n,r){if(r instanceof nl){r=r.wrapped;var i=e.def.nodes[t].bindingIndex+n,o=e.oldValues[i];o instanceof nl&&(o=o.wrapped),e.oldValues[i]=new nl(o)}return r}function Ae(e){return{id:Rl,styles:e.styles,encapsulation:e.encapsulation,data:e.data}}function Le(e,t,n,r){return!(!(2&e.state)&&c(e.oldValues[t.bindingIndex+n],r))}function Fe(e,t,n,r){return!!Le(e,t,n,r)&&(e.oldValues[t.bindingIndex+n]=r,!0)}function je(e,t,n,r){var i=e.oldValues[t.bindingIndex+n];if(1&e.state||!ge(i,r))throw Ie(kl.createDebugContext(e,t.nodeIndex),i,r,0!=(1&e.state))}function Ve(e){for(var t=e;t;)2&t.def.flags&&(t.state|=8),t=t.viewContainerParent||t.parent}function ze(e,t){for(var n=e;n&&n!==t;)n.state|=64,n=n.viewContainerParent||n.parent}function Be(e,t,n,r){try{return Ve(33554432&e.def.nodes[t].flags?Oe(e,t).componentView:e),kl.handleEvent(e,t,n,r)}catch(t){e.root.errorHandler.handleError(t)}}function He(e){return e.parent?Oe(e.parent,e.parentNodeDef.nodeIndex):null}function We(e){return e.parent?e.parentNodeDef.parent:null}function qe(e,t){switch(201347067&t.flags){case 1:return Oe(e,t.nodeIndex).renderElement;case 2:return Se(e,t.nodeIndex).renderText}}function Ue(e,t){return e?e+":"+t:t}function Ge(e){return!!e.parent&&!!(32768&e.parentNodeDef.flags)}function Ke(e){return!(!e.parent||32768&e.parentNodeDef.flags)}function $e(e){return 1<<e%32}function Ze(e){var t={},n=0,r={};return e&&e.forEach(function(e){var i=e[0],o=e[1];"number"==typeof i?(t[i]=o,n|=$e(i)):r[i]=o}),{matchedQueries:t,references:r,matchedQueryIds:n}}function Qe(e){return e.map(function(e){var t,n;return Array.isArray(e)?(n=e[0],t=e[1]):(n=0,t=e),{flags:n,token:t,tokenKey:Pe(t)}})}function Ye(e,t,n){var r=n.renderParent;return r?0==(1&r.flags)||0==(33554432&r.flags)||r.element.componentRendererType&&r.element.componentRendererType.encapsulation===ti.Native?Oe(e,n.renderParent.nodeIndex).renderElement:void 0:t}function Xe(e){var t=Nl.get(e);return t||((t=e(function(){return Dl})).factory=e,Nl.set(e,t)),t}function Je(e,t,n,r,i){3===t&&(n=e.renderer.parentNode(qe(e,e.def.lastRenderRootNode))),et(e,t,0,e.def.nodes.length-1,n,r,i)}function et(e,t,n,r,i,o,l){for(var a=n;a<=r;a++){var s=e.def.nodes[a];11&s.flags&&nt(e,s,t,i,o,l),a+=s.childCount}}function tt(e,t,n,r,i,o){for(var l=e;l&&!Ge(l);)l=l.parent;for(var a=l.parent,s=We(l),u=s.nodeIndex+s.childCount,c=s.nodeIndex+1;c<=u;c++){var d=a.def.nodes[c];d.ngContentIndex===t&&nt(a,d,n,r,i,o),c+=d.childCount}if(!a.parent){var p=e.root.projectableNodes[t];if(p)for(c=0;c<p.length;c++)rt(e,p[c],n,r,i,o)}}function nt(e,t,n,r,i,o){if(8&t.flags)tt(e,t.ngContent.index,n,r,i,o);else{var l=qe(e,t);if(3===n&&33554432&t.flags&&48&t.bindingFlags?(16&t.bindingFlags&&rt(e,l,n,r,i,o),32&t.bindingFlags&&rt(Oe(e,t.nodeIndex).componentView,l,n,r,i,o)):rt(e,l,n,r,i,o),16777216&t.flags)for(var a=Oe(e,t.nodeIndex).viewContainer._embeddedViews,s=0;s<a.length;s++)Je(a[s],n,r,i,o);1&t.flags&&!t.element.name&&et(e,n,t.nodeIndex+1,t.nodeIndex+t.childCount,r,i,o)}}function rt(e,t,n,r,i,o){var l=e.renderer;switch(n){case 1:l.appendChild(r,t);break;case 2:l.insertBefore(r,t,i);break;case 3:l.removeChild(r,t);break;case 0:o.push(t)}}function it(e){if(":"===e[0]){var t=e.match(Al);return[t[1],t[2]]}return["",e]}function ot(e){for(var t=0,n=0;n<e.length;n++)t|=e[n].flags;return t}function lt(e,t){for(var n="",r=0;r<2*e;r+=2)n=n+t[r]+st(t[r+1]);return n+t[2*e]}function at(e,t,n,r,i,o,l,a,s,u,c,d,p,f,h,m,g,y,v,b){switch(e){case 1:return t+st(n)+r;case 2:return t+st(n)+r+st(i)+o;case 3:return t+st(n)+r+st(i)+o+st(l)+a;case 4:return t+st(n)+r+st(i)+o+st(l)+a+st(s)+u;case 5:return t+st(n)+r+st(i)+o+st(l)+a+st(s)+u+st(c)+d;case 6:return t+st(n)+r+st(i)+o+st(l)+a+st(s)+u+st(c)+d+st(p)+f;case 7:return t+st(n)+r+st(i)+o+st(l)+a+st(s)+u+st(c)+d+st(p)+f+st(h)+m;case 8:return t+st(n)+r+st(i)+o+st(l)+a+st(s)+u+st(c)+d+st(p)+f+st(h)+m+st(g)+y;case 9:return t+st(n)+r+st(i)+o+st(l)+a+st(s)+u+st(c)+d+st(p)+f+st(h)+m+st(g)+y+st(v)+b;default:throw new Error("Does not support more than 9 expressions")}}function st(e){return null!=e?e.toString():""}function ut(e,t,n,r,i,o){e|=1;var l=Ze(t);return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,flags:e,checkIndex:-1,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:l.matchedQueries,matchedQueryIds:l.matchedQueryIds,references:l.references,ngContentIndex:n,childCount:r,bindings:[],bindingFlags:0,outputs:[],element:{ns:null,name:null,attrs:null,template:o?Xe(o):null,componentProvider:null,componentView:null,componentRendererType:null,publicProviders:null,allProviders:null,handleEvent:i||Dl},provider:null,text:null,query:null,ngContent:null}}function ct(e,t,n,r,i,o,l,a,s,u,c,d){void 0===l&&(l=[]),u||(u=Dl);var p=Ze(n),f=p.matchedQueries,h=p.references,m=p.matchedQueryIds,g=null,y=null;o&&(g=(I=it(o))[0],y=I[1]),a=a||[];for(var v=new Array(a.length),b=0;b<a.length;b++){var _=a[b],w=_[0],x=_[2],C=it(_[1]),E=C[1],S=void 0,O=void 0;switch(15&w){case 4:O=x;break;case 1:case 8:S=x}v[b]={flags:w,ns:C[0],name:E,nonMinifiedName:E,securityContext:S,suffix:O}}s=s||[];var T=new Array(s.length);for(b=0;b<s.length;b++){var k=s[b];T[b]={type:0,target:k[0],eventName:k[1],propName:null}}var D=(l=l||[]).map(function(e){var t=e[1],n=it(e[0]);return[n[0],n[1],t]});return d=function(e){if(e&&e.id===Rl){var t=null!=e.encapsulation&&e.encapsulation!==ti.None||e.styles.length||Object.keys(e.data).length;e.id=t?"c"+Pl++:Ml}return e&&e.id===Ml&&(e=null),e||null}(d),c&&(t|=33554432),t|=1,{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:t,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:f,matchedQueryIds:m,references:h,ngContentIndex:r,childCount:i,bindings:v,bindingFlags:ot(v),outputs:T,element:{ns:g,name:y,attrs:D,template:null,componentProvider:null,componentView:c||null,componentRendererType:d,publicProviders:null,allProviders:null,handleEvent:u||Dl},provider:null,text:null,query:null,ngContent:null};var I}function dt(e,t,n){var r,i=n.element,o=e.root.selectorOrNode,l=e.renderer;if(e.parent||!o){r=i.name?l.createElement(i.name,i.ns):l.createComment("");var a=Ye(e,t,n);a&&l.appendChild(a,r)}else r=l.selectRootElement(o);if(i.attrs)for(var s=0;s<i.attrs.length;s++){var u=i.attrs[s];l.setAttribute(r,u[1],u[2],u[0])}return r}function pt(e,t,n,r){for(var i=0;i<n.outputs.length;i++){var o=n.outputs[i],l=function(e,t,n){return function(r){return Be(e,t,n,r)}}(e,n.nodeIndex,Ue(o.target,o.eventName)),a=o.target,s=e;"component"===o.target&&(a=null,s=t);var u=s.renderer.listen(a||r,o.eventName,l);e.disposables[n.outputIndex+i]=u}}function ft(e,t,n,r){if(!Fe(e,t,n,r))return!1;var i=t.bindings[n],o=Oe(e,t.nodeIndex),l=o.renderElement,a=i.name;switch(15&i.flags){case 1:!function(e,t,n,r,o,l){var a=i.securityContext,s=a?e.root.sanitizer.sanitize(a,l):l;s=null!=s?s.toString():null;var u=e.renderer;null!=l?u.setAttribute(n,o,s,r):u.removeAttribute(n,o,r)}(e,0,l,i.ns,a,r);break;case 2:!function(t,n,i,o){var l=e.renderer;r?l.addClass(n,i):l.removeClass(n,i)}(0,l,a);break;case 4:!function(e,t,n,i,o){var l=e.root.sanitizer.sanitize(Sl.STYLE,r);if(null!=l){l=l.toString();var a=t.suffix;null!=a&&(l+=a)}else l=null;var s=e.renderer;null!=l?s.setStyle(n,i,l):s.removeStyle(n,i)}(e,i,l,a);break;case 8:!function(e,t,n,r,o){var l=i.securityContext,a=l?e.root.sanitizer.sanitize(l,o):o;e.renderer.setProperty(n,r,a)}(33554432&t.flags&&32&i.flags?o.componentView:e,0,l,a,r)}return!0}function ht(e,t,n,r){return n=f(n),{index:-1,deps:Qe(r),flags:e,token:t,value:n}}function mt(e){for(var t={},n=0;n<e.length;n++){var r=e[n];r.index=n,t[Pe(r.token)]=r}return{factory:null,providersByKey:t,providers:e}}function gt(e,t,n){if(void 0===n&&(n=yi.THROW_IF_NOT_FOUND),8&t.flags)return t.token;if(2&t.flags&&(n=null),1&t.flags)return e._parent.get(t.token,n);var r=t.tokenKey;switch(r){case Vl:case zl:return e}var i=e._def.providersByKey[r];if(i){var o=e._providers[i.index];return void 0===o&&(o=e._providers[i.index]=yt(e,i)),o===jl?void 0:o}return e._parent.get(t.token,n)}function yt(e,t){var n;switch(201347067&t.flags){case 512:n=function(e,t,n){var r=n.length;switch(r){case 0:return new t;case 1:return new t(gt(e,n[0]));case 2:return new t(gt(e,n[0]),gt(e,n[1]));case 3:return new t(gt(e,n[0]),gt(e,n[1]),gt(e,n[2]));default:for(var i=new Array(r),o=0;o<r;o++)i[o]=gt(e,n[o]);return new(t.bind.apply(t,[void 0].concat(i)))}}(e,t.value,t.deps);break;case 1024:n=function(e,t,n){var r=n.length;switch(r){case 0:return t();case 1:return t(gt(e,n[0]));case 2:return t(gt(e,n[0]),gt(e,n[1]));case 3:return t(gt(e,n[0]),gt(e,n[1]),gt(e,n[2]));default:for(var i=Array(r),o=0;o<r;o++)i[o]=gt(e,n[o]);return t.apply(void 0,i)}}(e,t.value,t.deps);break;case 2048:n=gt(e,t.deps[0]);break;case 256:n=t.value}return void 0===n?jl:n}function vt(e,t){var n=e.viewContainer._embeddedViews;if((null==t||t>=n.length)&&(t=n.length-1),t<0)return null;var r=n[t];return r.viewContainerParent=null,xt(n,t),kl.dirtyParentQueries(r),_t(r),r}function bt(e,t,n){var r=t?qe(t,t.def.lastRenderRootNode):e.renderElement;Je(n,2,n.renderer.parentNode(r),n.renderer.nextSibling(r),void 0)}function _t(e){Je(e,3,null,null,void 0)}function wt(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function xt(e,t){t>=e.length-1?e.pop():e.splice(t,1)}function Ct(e,t,n,r,i,o){return new Hl(e,t,n,r,i,o)}function Et(e){return e.viewDefFactory}function St(e,t,n){return new ql(e,t,n)}function Ot(e){return new Ul(e)}function Tt(e,t){return new Gl(e,t)}function kt(e,t){return new Kl(e,t)}function Dt(e,t){var n=e.def.nodes[t];if(1&n.flags){var r=Oe(e,n.nodeIndex);return n.element.template?r.template:r.renderElement}if(2&n.flags)return Se(e,n.nodeIndex).renderText;if(20240&n.flags)return Te(e,n.nodeIndex).instance;throw new Error("Illegal state: read nodeValue for node index "+t)}function It(e){return new $l(e.renderer)}function Rt(e,t,n,r){return new Zl(e,t,n,r)}function Mt(e,t,n,r,i,o,l,a){var s=[];if(l)for(var u in l){var c=l[u];s[c[0]]={flags:8,name:u,nonMinifiedName:c[1],ns:null,securityContext:null,suffix:null}}var d=[];if(a)for(var p in a)d.push({type:1,propName:p,target:null,eventName:a[p]});return t|=16384,At(e,t,n,r,i,i,o,s,d)}function Pt(e,t,n){return e|=16,At(-1,e,null,0,t,t,n)}function Nt(e,t,n,r,i){return At(-1,e,t,0,n,r,i)}function At(e,t,n,r,i,o,l,a,s){var u=Ze(n),c=u.matchedQueries,d=u.references,p=u.matchedQueryIds;s||(s=[]),a||(a=[]),o=f(o);var h=Qe(l);return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:t,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:c,matchedQueryIds:p,references:d,ngContentIndex:-1,childCount:r,bindings:a,bindingFlags:ot(a),outputs:s,element:null,provider:{token:i,value:o,deps:h},text:null,query:null,ngContent:null}}function Lt(e,t){return Vt(e,t)}function Ft(e,t){for(var n=e;n.parent&&!Ge(n);)n=n.parent;return zt(n.parent,We(n),!0,t.provider.value,t.provider.deps)}function jt(e,t){var n=zt(e,t.parent,(32768&t.flags)>0,t.provider.value,t.provider.deps);if(t.outputs.length)for(var r=0;r<t.outputs.length;r++){var i=t.outputs[r],o=n[i.propName].subscribe(function(e,t,n){return function(r){return Be(e,t,n,r)}}(e,t.parent.nodeIndex,i.eventName));e.disposables[t.outputIndex+r]=o.unsubscribe.bind(o)}return n}function Vt(e,t){var n=(8192&t.flags)>0,r=t.provider;switch(201347067&t.flags){case 512:return zt(e,t.parent,n,r.value,r.deps);case 1024:return function(e,t,n,r,i){var o=i.length;switch(o){case 0:return r();case 1:return r(Bt(e,t,n,i[0]));case 2:return r(Bt(e,t,n,i[0]),Bt(e,t,n,i[1]));case 3:return r(Bt(e,t,n,i[0]),Bt(e,t,n,i[1]),Bt(e,t,n,i[2]));default:for(var l=Array(o),a=0;a<o;a++)l[a]=Bt(e,t,n,i[a]);return r.apply(void 0,l)}}(e,t.parent,n,r.value,r.deps);case 2048:return Bt(e,t.parent,n,r.deps[0]);case 256:return r.value}}function zt(e,t,n,r,i){var o=i.length;switch(o){case 0:return new r;case 1:return new r(Bt(e,t,n,i[0]));case 2:return new r(Bt(e,t,n,i[0]),Bt(e,t,n,i[1]));case 3:return new r(Bt(e,t,n,i[0]),Bt(e,t,n,i[1]),Bt(e,t,n,i[2]));default:for(var l=new Array(o),a=0;a<o;a++)l[a]=Bt(e,t,n,i[a]);return new(r.bind.apply(r,[void 0].concat(l)))}}function Bt(e,t,n,r,i){if(void 0===i&&(i=yi.THROW_IF_NOT_FOUND),8&r.flags)return r.token;var o=e;2&r.flags&&(i=null);var l=r.tokenKey;for(l===ta&&(n=!(!t||!t.element.componentView)),t&&1&r.flags&&(n=!1,t=t.parent);e;){if(t)switch(l){case Ql:return It(Ht(e,t,n));case Yl:return Ht(e,t,n).renderer;case Xl:return new Bo(Oe(e,t.nodeIndex).renderElement);case Jl:return Oe(e,t.nodeIndex).viewContainer;case ea:if(t.element.template)return Oe(e,t.nodeIndex).template;break;case ta:return Ot(Ht(e,t,n));case na:return kt(e,t);default:var a=(n?t.element.allProviders:t.element.publicProviders)[l];if(a){var s=Te(e,a.nodeIndex);return s||(s={instance:Vt(e,a)},e.nodes[a.nodeIndex]=s),s.instance}}n=Ge(e),t=We(e),e=e.parent}var u=o.root.injector.get(r.token,ra);return u!==ra||i===ra?u:o.root.ngModule.injector.get(r.token,i)}function Ht(e,t,n){var r;if(n)r=Oe(e,t.nodeIndex).componentView;else for(r=e;r.parent&&!Ge(r);)r=r.parent;return r}function Wt(e,t,n,r,i,o){if(32768&n.flags){var l=Oe(e,n.parent.nodeIndex).componentView;2&l.def.flags&&(l.state|=8)}if(t.instance[n.bindings[r].name]=i,524288&n.flags){o=o||{};var a=e.oldValues[n.bindingIndex+r];a instanceof nl&&(a=a.wrapped),o[n.bindings[r].nonMinifiedName]=new il(a,i,0!=(2&e.state))}return e.oldValues[n.bindingIndex+r]=i,o}function qt(e,t){if(e.def.nodeFlags&t)for(var n=e.def.nodes,r=0,i=0;i<n.length;i++){var o=n[i],l=o.parent;for(!l&&o.flags&t&&Ut(e,i,o.flags&t,r++),0==(o.childFlags&t)&&(i+=o.childCount);l&&1&l.flags&&i===l.nodeIndex+l.childCount;)l.directChildFlags&t&&(r=function(e,t,n,r){for(var i=t.nodeIndex+1;i<=t.nodeIndex+t.childCount;i++){var o=e.def.nodes[i];o.flags&n&&Ut(e,i,o.flags&n,r++),i+=o.childCount}return r}(e,l,t,r)),l=l.parent}}function Ut(e,t,n,r){var i=Te(e,t);if(i){var o=i.instance;o&&(kl.setCurrentNode(e,t),1048576&n&&Ee(e,512,r)&&o.ngAfterContentInit(),2097152&n&&o.ngAfterContentChecked(),4194304&n&&Ee(e,768,r)&&o.ngAfterViewInit(),8388608&n&&o.ngAfterViewChecked(),131072&n&&o.ngOnDestroy())}}function Gt(e,t,n){var r=[];for(var i in n)r.push({propName:i,bindingType:n[i]});return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:-1,flags:e,childFlags:0,directChildFlags:0,childMatchedQueries:0,ngContentIndex:-1,matchedQueries:{},matchedQueryIds:0,references:{},childCount:0,bindings:[],bindingFlags:0,outputs:[],element:null,provider:null,text:null,query:{id:t,filterId:$e(t),bindings:r},ngContent:null}}function Kt(){return new qo}function $t(e){for(var t=e.def.nodeMatchedQueries;e.parent&&Ke(e);){var n=e.parentNodeDef;e=e.parent;for(var r=n.nodeIndex+n.childCount,i=0;i<=r;i++)67108864&(o=e.def.nodes[i]).flags&&536870912&o.flags&&(o.query.filterId&t)===o.query.filterId&&De(e,i).setDirty(),!(1&o.flags&&i+o.childCount<n.nodeIndex)&&67108864&o.childFlags&&536870912&o.childFlags||(i+=o.childCount)}if(134217728&e.def.nodeFlags)for(i=0;i<e.def.nodes.length;i++){var o;134217728&(o=e.def.nodes[i]).flags&&536870912&o.flags&&De(e,i).setDirty(),i+=o.childCount}}function Zt(e,t){var n=De(e,t.nodeIndex);if(n.dirty){var r,i=void 0;if(67108864&t.flags){var o=t.parent.parent;i=Qt(e,o.nodeIndex,o.nodeIndex+o.childCount,t.query,[]),r=Te(e,t.parent.nodeIndex).instance}else 134217728&t.flags&&(i=Qt(e,0,e.def.nodes.length-1,t.query,[]),r=e.component);n.reset(i);for(var l=t.query.bindings,a=!1,s=0;s<l.length;s++){var u=l[s],c=void 0;switch(u.bindingType){case 0:c=n.first;break;case 1:c=n,a=!0}r[u.propName]=c}a&&n.notifyOnChanges()}}function Qt(e,t,n,r,i){for(var o=t;o<=n;o++){var l=e.def.nodes[o],a=l.matchedQueries[r.id];if(null!=a&&i.push(Yt(e,l,a)),1&l.flags&&l.element.template&&(l.element.template.nodeMatchedQueries&r.filterId)===r.filterId){var s=Oe(e,o);if((l.childMatchedQueries&r.filterId)===r.filterId&&(Qt(e,o+1,o+l.childCount,r,i),o+=l.childCount),16777216&l.flags)for(var u=s.viewContainer._embeddedViews,c=0;c<u.length;c++){var d=u[c],p=He(d);p&&p===s&&Qt(d,0,d.def.nodes.length-1,r,i)}var f=s.template._projectedViews;if(f)for(c=0;c<f.length;c++){var h=f[c];Qt(h,0,h.def.nodes.length-1,r,i)}}(l.childMatchedQueries&r.filterId)!==r.filterId&&(o+=l.childCount)}return i}function Yt(e,t,n){if(null!=n)switch(n){case 1:return Oe(e,t.nodeIndex).renderElement;case 0:return new Bo(Oe(e,t.nodeIndex).renderElement);case 2:return Oe(e,t.nodeIndex).template;case 3:return Oe(e,t.nodeIndex).viewContainer;case 4:return Te(e,t.nodeIndex).instance}}function Xt(e,t){return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:-1,flags:8,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:e,childCount:0,bindings:[],bindingFlags:0,outputs:[],element:null,provider:null,text:null,query:null,ngContent:{index:t}}}function Jt(e,t,n){var r=Ye(e,t,n);r&&tt(e,n.ngContent.index,1,r,null,void 0)}function en(e,t){return rn(128,e,new Array(t+1))}function tn(e,t){return rn(32,e,new Array(t))}function nn(e,t){for(var n=Object.keys(t),r=n.length,i=new Array(r),o=0;o<r;o++){var l=n[o];i[t[l]]=l}return rn(64,e,i)}function rn(e,t,n){for(var r=new Array(n.length),i=0;i<n.length;i++){var o=n[i];r[i]={flags:8,name:o,ns:null,nonMinifiedName:o,securityContext:null,suffix:null}}return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:t,flags:e,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:-1,childCount:0,bindings:r,bindingFlags:ot(r),outputs:[],element:null,provider:null,text:null,query:null,ngContent:null}}function on(e,t,n){for(var r=new Array(n.length-1),i=1;i<n.length;i++)r[i-1]={flags:8,name:null,ns:null,nonMinifiedName:null,securityContext:null,suffix:n[i]};return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:2,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:t,childCount:0,bindings:r,bindingFlags:8,outputs:[],element:null,provider:null,text:{prefix:n[0]},query:null,ngContent:null}}function ln(e,t,n){var r,i=e.renderer;r=i.createText(n.text.prefix);var o=Ye(e,t,n);return o&&i.appendChild(o,r),{renderText:r}}function an(e,t){return(null!=e?e.toString():"")+t.suffix}function sn(e,t,n,r){for(var i=0,o=0,l=0,a=0,s=0,u=null,c=null,d=!1,p=!1,f=null,h=0;h<t.length;h++){var m=t[h];if(m.nodeIndex=h,m.parent=u,m.bindingIndex=i,m.outputIndex=o,m.renderParent=c,l|=m.flags,s|=m.matchedQueryIds,m.element){var g=m.element;g.publicProviders=u?u.element.publicProviders:Object.create(null),g.allProviders=g.publicProviders,d=!1,p=!1,m.element.template&&(s|=m.element.template.nodeMatchedQueries)}if(function(e,t,n){var r=t.element&&t.element.template;if(r){if(!r.lastRenderRootNode)throw new Error("Illegal State: Embedded templates without nodes are not allowed!");if(r.lastRenderRootNode&&16777216&r.lastRenderRootNode.flags)throw new Error("Illegal State: Last root node of a template can't have embedded views, at index "+t.nodeIndex+"!")}if(20224&t.flags&&0==(1&(e?e.flags:0)))throw new Error("Illegal State: StaticProvider/Directive nodes need to be children of elements or anchors, at index "+t.nodeIndex+"!");if(t.query){if(67108864&t.flags&&(!e||0==(16384&e.flags)))throw new Error("Illegal State: Content Query nodes need to be children of directives, at index "+t.nodeIndex+"!");if(134217728&t.flags&&e)throw new Error("Illegal State: View Query nodes have to be top level nodes, at index "+t.nodeIndex+"!")}if(t.childCount){var i=e?e.nodeIndex+e.childCount:n-1;if(t.nodeIndex<=i&&t.nodeIndex+t.childCount>i)throw new Error("Illegal State: childCount of node leads outside of parent, at index "+t.nodeIndex+"!")}}(u,m,t.length),i+=m.bindings.length,o+=m.outputs.length,!c&&3&m.flags&&(f=m),20224&m.flags){d||(d=!0,u.element.publicProviders=Object.create(u.element.publicProviders),u.element.allProviders=u.element.publicProviders);var y=0!=(32768&m.flags);0==(8192&m.flags)||y?u.element.publicProviders[Pe(m.provider.token)]=m:(p||(p=!0,u.element.allProviders=Object.create(u.element.publicProviders)),u.element.allProviders[Pe(m.provider.token)]=m),y&&(u.element.componentProvider=m)}if(u?(u.childFlags|=m.flags,u.directChildFlags|=m.flags,u.childMatchedQueries|=m.matchedQueryIds,m.element&&m.element.template&&(u.childMatchedQueries|=m.element.template.nodeMatchedQueries)):a|=m.flags,m.childCount>0)u=m,un(m)||(c=m);else for(;u&&h===u.nodeIndex+u.childCount;){var v=u.parent;v&&(v.childFlags|=u.childFlags,v.childMatchedQueries|=u.childMatchedQueries),c=(u=v)&&un(u)?u.renderParent:u}}return{factory:null,nodeFlags:l,rootNodeFlags:a,nodeMatchedQueries:s,flags:e,nodes:t,updateDirectives:n||Dl,updateRenderer:r||Dl,handleEvent:function(e,n,r,i){return t[n].element.handleEvent(e,r,i)},bindingCount:i,outputCount:o,lastRenderRootNode:f}}function un(e){return 0!=(1&e.flags)&&null===e.element.name}function cn(e,t,n,r){var i=fn(e.root,e.renderer,e,t,n);return hn(i,e.component,r),mn(i),i}function dn(e,t,n){var r=fn(e,e.renderer,null,null,t);return hn(r,n,n),mn(r),r}function pn(e,t,n,r){var i,o=t.element.componentRendererType;return i=o?e.root.rendererFactory.createRenderer(r,o):e.root.renderer,fn(e.root,i,e,t.element.componentProvider,n)}function fn(e,t,n,r,i){var o=new Array(i.nodes.length),l=i.outputCount?new Array(i.outputCount):null;return{def:i,parent:n,viewContainerParent:null,parentNodeDef:r,context:null,component:null,nodes:o,state:13,root:e,renderer:t,oldValues:new Array(i.bindingCount),disposables:l,initIndex:-1}}function hn(e,t,n){e.component=t,e.context=n}function mn(e){var t;Ge(e)&&(t=Oe(e.parent,e.parentNodeDef.parent.nodeIndex).renderElement);for(var n=e.def,r=e.nodes,i=0;i<n.nodes.length;i++){var o=n.nodes[i];kl.setCurrentNode(e,i);var l=void 0;switch(201347067&o.flags){case 1:var a=dt(e,t,o),s=void 0;if(33554432&o.flags){var u=Xe(o.element.componentView);s=kl.createComponentView(e,o,u,a)}pt(e,s,o,a),l={renderElement:a,componentView:s,viewContainer:null,template:o.element.template?Tt(e,o):void 0},16777216&o.flags&&(l.viewContainer=St(e,o,l));break;case 2:l=ln(e,t,o);break;case 512:case 1024:case 2048:case 256:(l=r[i])||4096&o.flags||(l={instance:Lt(e,o)});break;case 16:l={instance:Ft(e,o)};break;case 16384:(l=r[i])||(l={instance:jt(e,o)}),32768&o.flags&&hn(Oe(e,o.parent.nodeIndex).componentView,l.instance,l.instance);break;case 32:case 64:case 128:l={value:void 0};break;case 67108864:case 134217728:l=Kt();break;case 8:Jt(e,t,o),l=void 0}r[i]=l}Cn(e,ia.CreateViewNodes),Tn(e,201326592,268435456,0)}function gn(e){bn(e),kl.updateDirectives(e,1),En(e,ia.CheckNoChanges),kl.updateRenderer(e,1),Cn(e,ia.CheckNoChanges),e.state&=-97}function yn(e){1&e.state?(e.state&=-2,e.state|=2):e.state&=-3,Ce(e,0,256),bn(e),kl.updateDirectives(e,0),En(e,ia.CheckAndUpdate),Tn(e,67108864,536870912,0);var t=Ce(e,256,512);qt(e,2097152|(t?1048576:0)),kl.updateRenderer(e,0),Cn(e,ia.CheckAndUpdate),Tn(e,134217728,536870912,0),qt(e,8388608|((t=Ce(e,512,768))?4194304:0)),2&e.def.flags&&(e.state&=-9),e.state&=-97,Ce(e,768,1024)}function vn(e,t,n,r,i,o,l,a,s,u,c,d,p){return 0===n?function(e,t,n,r,i,o,l,a,s,u,c,d){switch(201347067&t.flags){case 1:return function(e,t,r,i,o,l,a,s,u,c,d,p){var f=t.bindings.length,h=!1;return f>0&&ft(e,t,0,n)&&(h=!0),f>1&&ft(e,t,1,i)&&(h=!0),f>2&&ft(e,t,2,o)&&(h=!0),f>3&&ft(e,t,3,l)&&(h=!0),f>4&&ft(e,t,4,a)&&(h=!0),f>5&&ft(e,t,5,s)&&(h=!0),f>6&&ft(e,t,6,u)&&(h=!0),f>7&&ft(e,t,7,c)&&(h=!0),f>8&&ft(e,t,8,d)&&(h=!0),f>9&&ft(e,t,9,p)&&(h=!0),h}(e,t,0,r,i,o,l,a,s,u,c,d);case 2:return function(e,t,n,r,i,o,l,a,s,u,c,d){var p=!1,f=t.bindings,h=f.length;if(h>0&&Fe(e,t,0,n)&&(p=!0),h>1&&Fe(e,t,1,r)&&(p=!0),h>2&&Fe(e,t,2,i)&&(p=!0),h>3&&Fe(e,t,3,o)&&(p=!0),h>4&&Fe(e,t,4,l)&&(p=!0),h>5&&Fe(e,t,5,a)&&(p=!0),h>6&&Fe(e,t,6,s)&&(p=!0),h>7&&Fe(e,t,7,u)&&(p=!0),h>8&&Fe(e,t,8,c)&&(p=!0),h>9&&Fe(e,t,9,d)&&(p=!0),p){var m=t.text.prefix;h>0&&(m+=an(n,f[0])),h>1&&(m+=an(r,f[1])),h>2&&(m+=an(i,f[2])),h>3&&(m+=an(o,f[3])),h>4&&(m+=an(l,f[4])),h>5&&(m+=an(a,f[5])),h>6&&(m+=an(s,f[6])),h>7&&(m+=an(u,f[7])),h>8&&(m+=an(c,f[8])),h>9&&(m+=an(d,f[9]));var g=Se(e,t.nodeIndex).renderText;e.renderer.setValue(g,m)}return p}(e,t,n,r,i,o,l,a,s,u,c,d);case 16384:return function(e,t,n,r,i,o,l,a,s,u,c,d){var p=Te(e,t.nodeIndex),f=p.instance,h=!1,m=void 0,g=t.bindings.length;return g>0&&Le(e,t,0,n)&&(h=!0,m=Wt(e,p,t,0,n,m)),g>1&&Le(e,t,1,r)&&(h=!0,m=Wt(e,p,t,1,r,m)),g>2&&Le(e,t,2,i)&&(h=!0,m=Wt(e,p,t,2,i,m)),g>3&&Le(e,t,3,o)&&(h=!0,m=Wt(e,p,t,3,o,m)),g>4&&Le(e,t,4,l)&&(h=!0,m=Wt(e,p,t,4,l,m)),g>5&&Le(e,t,5,a)&&(h=!0,m=Wt(e,p,t,5,a,m)),g>6&&Le(e,t,6,s)&&(h=!0,m=Wt(e,p,t,6,s,m)),g>7&&Le(e,t,7,u)&&(h=!0,m=Wt(e,p,t,7,u,m)),g>8&&Le(e,t,8,c)&&(h=!0,m=Wt(e,p,t,8,c,m)),g>9&&Le(e,t,9,d)&&(h=!0,m=Wt(e,p,t,9,d,m)),m&&f.ngOnChanges(m),65536&t.flags&&Ee(e,256,t.nodeIndex)&&f.ngOnInit(),262144&t.flags&&f.ngDoCheck(),h}(e,t,n,r,i,o,l,a,s,u,c,d);case 32:case 64:case 128:return function(e,t,n,r,i,o,l,a,s,u,c,d){var p=t.bindings,f=!1,h=p.length;if(h>0&&Fe(e,t,0,n)&&(f=!0),h>1&&Fe(e,t,1,r)&&(f=!0),h>2&&Fe(e,t,2,i)&&(f=!0),h>3&&Fe(e,t,3,o)&&(f=!0),h>4&&Fe(e,t,4,l)&&(f=!0),h>5&&Fe(e,t,5,a)&&(f=!0),h>6&&Fe(e,t,6,s)&&(f=!0),h>7&&Fe(e,t,7,u)&&(f=!0),h>8&&Fe(e,t,8,c)&&(f=!0),h>9&&Fe(e,t,9,d)&&(f=!0),f){var m=ke(e,t.nodeIndex),g=void 0;switch(201347067&t.flags){case 32:g=new Array(p.length),h>0&&(g[0]=n),h>1&&(g[1]=r),h>2&&(g[2]=i),h>3&&(g[3]=o),h>4&&(g[4]=l),h>5&&(g[5]=a),h>6&&(g[6]=s),h>7&&(g[7]=u),h>8&&(g[8]=c),h>9&&(g[9]=d);break;case 64:g={},h>0&&(g[p[0].name]=n),h>1&&(g[p[1].name]=r),h>2&&(g[p[2].name]=i),h>3&&(g[p[3].name]=o),h>4&&(g[p[4].name]=l),h>5&&(g[p[5].name]=a),h>6&&(g[p[6].name]=s),h>7&&(g[p[7].name]=u),h>8&&(g[p[8].name]=c),h>9&&(g[p[9].name]=d);break;case 128:var y=n;switch(h){case 1:g=y.transform(n);break;case 2:g=y.transform(r);break;case 3:g=y.transform(r,i);break;case 4:g=y.transform(r,i,o);break;case 5:g=y.transform(r,i,o,l);break;case 6:g=y.transform(r,i,o,l,a);break;case 7:g=y.transform(r,i,o,l,a,s);break;case 8:g=y.transform(r,i,o,l,a,s,u);break;case 9:g=y.transform(r,i,o,l,a,s,u,c);break;case 10:g=y.transform(r,i,o,l,a,s,u,c,d)}}m.value=g}return f}(e,t,n,r,i,o,l,a,s,u,c,d);default:throw"unreachable"}}(e,t,r,i,o,l,a,s,u,c,d,p):function(e,t,n){switch(201347067&t.flags){case 1:return function(e,t,n){for(var r=!1,i=0;i<n.length;i++)ft(e,t,i,n[i])&&(r=!0);return r}(e,t,n);case 2:return function(e,t,n){for(var r=t.bindings,i=!1,o=0;o<n.length;o++)Fe(e,t,o,n[o])&&(i=!0);if(i){var l="";for(o=0;o<n.length;o++)l+=an(n[o],r[o]);l=t.text.prefix+l;var a=Se(e,t.nodeIndex).renderText;e.renderer.setValue(a,l)}return i}(e,t,n);case 16384:return function(e,t,n){for(var r=Te(e,t.nodeIndex),i=r.instance,o=!1,l=void 0,a=0;a<n.length;a++)Le(e,t,a,n[a])&&(o=!0,l=Wt(e,r,t,a,n[a],l));return l&&i.ngOnChanges(l),65536&t.flags&&Ee(e,256,t.nodeIndex)&&i.ngOnInit(),262144&t.flags&&i.ngDoCheck(),o}(e,t,n);case 32:case 64:case 128:return function(e,t,n){for(var r=t.bindings,i=!1,o=0;o<n.length;o++)Fe(e,t,o,n[o])&&(i=!0);if(i){var l=ke(e,t.nodeIndex),a=void 0;switch(201347067&t.flags){case 32:a=n;break;case 64:for(a={},o=0;o<n.length;o++)a[r[o].name]=n[o];break;case 128:var s=n[0],u=n.slice(1);a=s.transform.apply(s,u)}l.value=a}return i}(e,t,n);default:throw"unreachable"}}(e,t,r)}function bn(e){var t=e.def;if(4&t.nodeFlags)for(var n=0;n<t.nodes.length;n++){var r=t.nodes[n];if(4&r.flags){var i=Oe(e,n).template._projectedViews;if(i)for(var o=0;o<i.length;o++){var l=i[o];l.state|=32,ze(l,e)}}else 0==(4&r.childFlags)&&(n+=r.childCount)}}function _n(e,t,n,r,i,o,l,a,s,u,c,d,p){return 0===n?function(e,t,n,i,o,l,a,s,u,c,d,p){var f=t.bindings.length;f>0&&je(e,t,0,r),f>1&&je(e,t,1,i),f>2&&je(e,t,2,o),f>3&&je(e,t,3,l),f>4&&je(e,t,4,a),f>5&&je(e,t,5,s),f>6&&je(e,t,6,u),f>7&&je(e,t,7,c),f>8&&je(e,t,8,d),f>9&&je(e,t,9,p)}(e,t,0,i,o,l,a,s,u,c,d,p):function(e,t,n){for(var r=0;r<n.length;r++)je(e,t,r,n[r])}(e,t,r),!1}function wn(e,t){if(De(e,t.nodeIndex).dirty)throw Ie(kl.createDebugContext(e,t.nodeIndex),"Query "+t.query.id+" not dirty","Query "+t.query.id+" dirty",0!=(1&e.state))}function xn(e){if(!(128&e.state)){if(En(e,ia.Destroy),Cn(e,ia.Destroy),qt(e,131072),e.disposables)for(var t=0;t<e.disposables.length;t++)e.disposables[t]();!function(e){if(16&e.state){var t=He(e);if(t){var n=t.template._projectedViews;n&&(xt(n,n.indexOf(e)),kl.dirtyParentQueries(e))}}}(e),e.renderer.destroyNode&&function(e){for(var t=e.def.nodes.length,n=0;n<t;n++){var r=e.def.nodes[n];1&r.flags?e.renderer.destroyNode(Oe(e,n).renderElement):2&r.flags?e.renderer.destroyNode(Se(e,n).renderText):(67108864&r.flags||134217728&r.flags)&&De(e,n).destroy()}}(e),Ge(e)&&e.renderer.destroy(),e.state|=128}}function Cn(e,t){var n=e.def;if(33554432&n.nodeFlags)for(var r=0;r<n.nodes.length;r++){var i=n.nodes[r];33554432&i.flags?Sn(Oe(e,r).componentView,t):0==(33554432&i.childFlags)&&(r+=i.childCount)}}function En(e,t){var n=e.def;if(16777216&n.nodeFlags)for(var r=0;r<n.nodes.length;r++){var i=n.nodes[r];if(16777216&i.flags)for(var o=Oe(e,r).viewContainer._embeddedViews,l=0;l<o.length;l++)Sn(o[l],t);else 0==(16777216&i.childFlags)&&(r+=i.childCount)}}function Sn(e,t){var n=e.state;switch(t){case ia.CheckNoChanges:0==(128&n)&&(12==(12&n)?gn(e):64&n&&On(e,ia.CheckNoChangesProjectedViews));break;case ia.CheckNoChangesProjectedViews:0==(128&n)&&(32&n?gn(e):64&n&&On(e,t));break;case ia.CheckAndUpdate:0==(128&n)&&(12==(12&n)?yn(e):64&n&&On(e,ia.CheckAndUpdateProjectedViews));break;case ia.CheckAndUpdateProjectedViews:0==(128&n)&&(32&n?yn(e):64&n&&On(e,t));break;case ia.Destroy:xn(e);break;case ia.CreateViewNodes:mn(e)}}function On(e,t){En(e,t),Cn(e,t)}function Tn(e,t,n,r){if(e.def.nodeFlags&t&&e.def.nodeFlags&n)for(var i=e.def.nodes.length,o=0;o<i;o++){var l=e.def.nodes[o];if(l.flags&t&&l.flags&n)switch(kl.setCurrentNode(e,l.nodeIndex),r){case 0:Zt(e,l);break;case 1:wn(e,l)}l.childFlags&t&&l.childFlags&n||(o+=l.childCount)}}function kn(){if(!oa){oa=!0;var e=J()?{setCurrentNode:qn,createRootView:In,createEmbeddedView:Mn,createComponentView:Pn,createNgModuleRef:Nn,overrideProvider:An,overrideComponentView:Ln,clearOverrides:Fn,checkAndUpdateView:Bn,checkNoChangesView:Hn,destroyView:Wn,createDebugContext:function(e,t){return new ca(e,t)},handleEvent:Un,updateDirectives:Gn,updateRenderer:Kn}:{setCurrentNode:function(){},createRootView:Dn,createEmbeddedView:cn,createComponentView:pn,createNgModuleRef:Rt,overrideProvider:Dl,overrideComponentView:Dl,clearOverrides:Dl,checkAndUpdateView:yn,checkNoChangesView:gn,destroyView:xn,createDebugContext:function(e,t){return new ca(e,t)},handleEvent:function(e,t,n,r){return e.def.handleEvent(e,t,n,r)},updateDirectives:function(e,t){return e.def.updateDirectives(0===t?Vn:zn,e)},updateRenderer:function(e,t){return e.def.updateRenderer(0===t?Vn:zn,e)}};kl.setCurrentNode=e.setCurrentNode,kl.createRootView=e.createRootView,kl.createEmbeddedView=e.createEmbeddedView,kl.createComponentView=e.createComponentView,kl.createNgModuleRef=e.createNgModuleRef,kl.overrideProvider=e.overrideProvider,kl.overrideComponentView=e.overrideComponentView,kl.clearOverrides=e.clearOverrides,kl.checkAndUpdateView=e.checkAndUpdateView,kl.checkNoChangesView=e.checkNoChangesView,kl.destroyView=e.destroyView,kl.resolveDep=Bt,kl.createDebugContext=e.createDebugContext,kl.handleEvent=e.handleEvent,kl.updateDirectives=e.updateDirectives,kl.updateRenderer=e.updateRenderer,kl.dirtyParentQueries=$t}}function Dn(e,t,n,r,i,o){return dn(Rn(e,i,i.injector.get(jo),t,n),r,o)}function In(e,t,n,r,i,o){var l=i.injector.get(jo),a=Rn(e,i,new da(l),t,n),s=jn(r);return Jn(sa.create,dn,null,[a,s,o])}function Rn(e,t,n,r,i){var o=t.injector.get(Ol),l=t.injector.get(Pi);return{ngModule:t,injector:e,projectableNodes:r,selectorOrNode:i,sanitizer:o,rendererFactory:n,renderer:n.createRenderer(null,null),errorHandler:l}}function Mn(e,t,n,r){var i=jn(n);return Jn(sa.create,cn,null,[e,t,i,r])}function Pn(e,t,n,r){return n=aa.get(t.element.componentProvider.provider.token)||jn(n),Jn(sa.create,pn,null,[e,t,n,r])}function Nn(e,t,n,r){return Rt(e,t,n,function(e){var t=function(t){var n=!1,r=!1;return 0===la.size?{hasOverrides:n,hasDeprecatedOverrides:r}:(e.providers.forEach(function(e){var t=la.get(e.token);3840&e.flags&&t&&(n=!0,r=r||t.deprecatedBehavior)}),{hasOverrides:n,hasDeprecatedOverrides:r})}(),n=t.hasDeprecatedOverrides;return t.hasOverrides?(e=e.factory(function(){return Dl}),function(e){for(var t=0;t<e.providers.length;t++){var r=e.providers[t];n&&(r.flags|=4096);var i=la.get(r.token);i&&(r.flags=-3841&r.flags|i.flags,r.deps=Qe(i.deps),r.value=i.value)}}(e),e):e}(r))}function An(e){la.set(e.token,e)}function Ln(e,t){var n=Xe(Xe(Et(t)).nodes[0].element.componentView);aa.set(e,n)}function Fn(){la.clear(),aa.clear()}function jn(e){if(0===la.size)return e;var t=function(e){for(var t=[],n=null,r=0;r<e.nodes.length;r++){var i=e.nodes[r];1&i.flags&&(n=i),n&&3840&i.flags&&la.has(i.provider.token)&&(t.push(n.nodeIndex),n=null)}return t}(e);if(0===t.length)return e;e=e.factory(function(){return Dl});for(var n=0;n<t.length;n++)!function(e,r){for(var i=t[n]+1;i<e.nodes.length;i++){var o=e.nodes[i];if(1&o.flags)return;if(3840&o.flags){var l=o.provider,a=la.get(l.token);a&&(o.flags=-3841&o.flags|a.flags,l.deps=Qe(a.deps),l.value=a.value)}}}(e);return e}function Vn(e,t,n,r,i,o,l,a,s,u,c,d,p){var f=e.def.nodes[t];return vn(e,f,n,r,i,o,l,a,s,u,c,d,p),224&f.flags?ke(e,t).value:void 0}function zn(e,t,n,r,i,o,l,a,s,u,c,d,p){var f=e.def.nodes[t];return _n(e,f,n,r,i,o,l,a,s,u,c,d,p),224&f.flags?ke(e,t).value:void 0}function Bn(e){return Jn(sa.detectChanges,yn,null,[e])}function Hn(e){return Jn(sa.checkNoChanges,gn,null,[e])}function Wn(e){return Jn(sa.destroy,xn,null,[e])}function qn(e,t){Sr=e,Or=t}function Un(e,t,n,r){return qn(e,t),Jn(sa.handleEvent,e.def.handleEvent,null,[e,t,n,r])}function Gn(e,t){if(128&e.state)throw Me(sa[Er]);return qn(e,Qn(e,0)),e.def.updateDirectives(function(e,n,r){for(var i=[],o=3;o<arguments.length;o++)i[o-3]=arguments[o];var l=e.def.nodes[n];return 0===t?$n(e,l,r,i):Zn(e,l,r,i),16384&l.flags&&qn(e,Qn(e,n)),224&l.flags?ke(e,l.nodeIndex).value:void 0},e)}function Kn(e,t){if(128&e.state)throw Me(sa[Er]);return qn(e,Yn(e,0)),e.def.updateRenderer(function(e,n,r){for(var i=[],o=3;o<arguments.length;o++)i[o-3]=arguments[o];var l=e.def.nodes[n];return 0===t?$n(e,l,r,i):Zn(e,l,r,i),3&l.flags&&qn(e,Yn(e,n)),224&l.flags?ke(e,l.nodeIndex).value:void 0},e)}function $n(e,t,n,r){if(vn.apply(void 0,[e,t,n].concat(r))){var i=1===n?r[0]:r;if(16384&t.flags){for(var o={},l=0;l<t.bindings.length;l++){var a=t.bindings[l],s=i[l];8&a.flags&&(o[function(e){return"ng-reflect-"+(e=e.replace(/[$@]/g,"_").replace(ua,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return"-"+e[1].toLowerCase()}))}(a.nonMinifiedName)]=function(e){try{return null!=e?e.toString().slice(0,30):e}catch(e){return"[ERROR] Exception while trying to serialize the value"}}(s))}var u=t.parent,c=Oe(e,u.nodeIndex).renderElement;if(u.element.name)for(var d in o)null!=(s=o[d])?e.renderer.setAttribute(c,d,s):e.renderer.removeAttribute(c,d);else e.renderer.setValue(c,"bindings="+JSON.stringify(o,null,2))}}}function Zn(e,t,n,r){_n.apply(void 0,[e,t,n].concat(r))}function Qn(e,t){for(var n=t;n<e.def.nodes.length;n++){var r=e.def.nodes[n];if(16384&r.flags&&r.bindings&&r.bindings.length)return n}return null}function Yn(e,t){for(var n=t;n<e.def.nodes.length;n++){var r=e.def.nodes[n];if(3&r.flags&&r.bindings&&r.bindings.length)return n}return null}function Xn(e,t,n){for(var r in t.references)n[r]=Yt(e,t,t.references[r])}function Jn(e,t,n,r){var i=Er,o=Sr,l=Or;try{Er=e;var a=t.apply(n,r);return Sr=o,Or=l,Er=i,a}catch(e){if(b(e)||!Sr)throw e;throw function(e,t){return e instanceof Error||(e=new Error(e.toString())),Re(e,t),e}(e,er())}}function er(){return Sr?new ca(Sr,Or):null}function tr(e){return kn(),kl.overrideProvider(e)}function nr(e,t){return kn(),kl.overrideComponentView(e,t)}function rr(){return kn(),kl.clearOverrides()}function ir(e,t,n){return new fa(e,t,n)}function or(e,t){return{type:7,name:e,definitions:t,options:{}}}function lr(e,t){return void 0===t&&(t=null),{type:4,styles:t,timings:e}}function ar(e,t){return void 0===t&&(t=null),{type:3,steps:e,options:t}}function sr(e,t){return void 0===t&&(t=null),{type:2,steps:e,options:t}}function ur(e){return{type:6,styles:e,offset:null}}function cr(e,t,n){return{type:0,name:e,styles:t,options:n}}function dr(e){return{type:5,steps:e}}function pr(e,t,n){return void 0===n&&(n=null),{type:1,expr:e,animation:t,options:n}}function fr(e,t){return or(e,t)}function hr(e,t){return lr(e,t)}function mr(e){return ar(e)}function gr(e){return sr(e)}function yr(e){return ur(e)}function vr(e,t){return cr(e,t)}function br(e){return dr(e)}function _r(e,t){return pr(e,t)}n.d(t,"createPlatform",function(){return ee}),n.d(t,"assertPlatform",function(){return ne}),n.d(t,"destroyPlatform",function(){return re}),n.d(t,"getPlatform",function(){return ie}),n.d(t,"PlatformRef",function(){return Mo}),n.d(t,"ApplicationRef",function(){return Po}),n.d(t,"enableProdMode",function(){return X}),n.d(t,"isDevMode",function(){return J}),n.d(t,"createPlatformFactory",function(){return te}),n.d(t,"NgProbeToken",function(){return Ro}),n.d(t,"APP_ID",function(){return Zi}),n.d(t,"PACKAGE_ROOT_URL",function(){return eo}),n.d(t,"PLATFORM_INITIALIZER",function(){return Yi}),n.d(t,"PLATFORM_ID",function(){return Xi}),n.d(t,"APP_BOOTSTRAP_LISTENER",function(){return Ji}),n.d(t,"APP_INITIALIZER",function(){return Ki}),n.d(t,"ApplicationInitStatus",function(){return $i}),n.d(t,"DebugElement",function(){return el}),n.d(t,"DebugNode",function(){return Jo}),n.d(t,"asNativeElements",function(){return de}),n.d(t,"getDebugNode",function(){return he}),n.d(t,"Testability",function(){return So}),n.d(t,"TestabilityRegistry",function(){return Oo}),n.d(t,"setTestabilityGetter",function(){return Y}),n.d(t,"TRANSLATIONS",function(){return wl}),n.d(t,"TRANSLATIONS_FORMAT",function(){return xl}),n.d(t,"LOCALE_ID",function(){return _l}),n.d(t,"MissingTranslationStrategy",function(){return Cl}),n.d(t,"ApplicationModule",function(){return El}),n.d(t,"wtfCreateScope",function(){return yo}),n.d(t,"wtfLeave",function(){return vo}),n.d(t,"wtfStartTimeRange",function(){return bo}),n.d(t,"wtfEndTimeRange",function(){return _o}),n.d(t,"Type",function(){return Li}),n.d(t,"EventEmitter",function(){return wo}),n.d(t,"ErrorHandler",function(){return Pi}),n.d(t,"Sanitizer",function(){return Ol}),n.d(t,"SecurityContext",function(){return Sl}),n.d(t,"ANALYZE_FOR_ENTRY_COMPONENTS",function(){return Lr}),n.d(t,"Attribute",function(){return Fr}),n.d(t,"ContentChild",function(){return zr}),n.d(t,"ContentChildren",function(){return Vr}),n.d(t,"Query",function(){return jr}),n.d(t,"ViewChild",function(){return Hr}),n.d(t,"ViewChildren",function(){return Br}),n.d(t,"Component",function(){return Gr}),n.d(t,"Directive",function(){return Ur}),n.d(t,"HostBinding",function(){return Qr}),n.d(t,"HostListener",function(){return Yr}),n.d(t,"Input",function(){return $r}),n.d(t,"Output",function(){return Zr}),n.d(t,"Pipe",function(){return Kr}),n.d(t,"CUSTOM_ELEMENTS_SCHEMA",function(){return Xr}),n.d(t,"NO_ERRORS_SCHEMA",function(){return Jr}),n.d(t,"NgModule",function(){return ei}),n.d(t,"ViewEncapsulation",function(){return ti}),n.d(t,"Version",function(){return ni}),n.d(t,"VERSION",function(){return ri}),n.d(t,"forwardRef",function(){return p}),n.d(t,"resolveForwardRef",function(){return f}),n.d(t,"Injector",function(){return yi}),n.d(t,"ReflectiveInjector",function(){return Ui}),n.d(t,"ResolvedReflectiveFactory",function(){return Wi}),n.d(t,"ReflectiveKey",function(){return Ni}),n.d(t,"InjectionToken",function(){return Mr}),n.d(t,"Inject",function(){return ii}),n.d(t,"Optional",function(){return oi}),n.d(t,"Injectable",function(){return li}),n.d(t,"Self",function(){return ai}),n.d(t,"SkipSelf",function(){return si}),n.d(t,"Host",function(){return ui}),n.d(t,"NgZone",function(){return xo}),n.d(t,"RenderComponentType",function(){return No}),n.d(t,"Renderer",function(){return Lo}),n.d(t,"Renderer2",function(){return zo}),n.d(t,"RendererFactory2",function(){return jo}),n.d(t,"RendererStyleFlags2",function(){return Vo}),n.d(t,"RootRenderer",function(){return Fo}),n.d(t,"COMPILER_OPTIONS",function(){return io}),n.d(t,"Compiler",function(){return ro}),n.d(t,"CompilerFactory",function(){return oo}),n.d(t,"ModuleWithComponentFactories",function(){return no}),n.d(t,"ComponentFactory",function(){return ao}),n.d(t,"ComponentRef",function(){return lo}),n.d(t,"ComponentFactoryResolver",function(){return co}),n.d(t,"ElementRef",function(){return Bo}),n.d(t,"NgModuleFactory",function(){return mo}),n.d(t,"NgModuleRef",function(){return ho}),n.d(t,"NgModuleFactoryLoader",function(){return Ho}),n.d(t,"getModuleFactory",function(){return se}),n.d(t,"QueryList",function(){return qo}),n.d(t,"SystemJsNgModuleLoader",function(){return Ko}),n.d(t,"SystemJsNgModuleLoaderConfig",function(){return Uo}),n.d(t,"TemplateRef",function(){return $o}),n.d(t,"ViewContainerRef",function(){return Zo}),n.d(t,"EmbeddedViewRef",function(){return Xo}),n.d(t,"ViewRef",function(){return Yo}),n.d(t,"ChangeDetectionStrategy",function(){return Wr}),n.d(t,"ChangeDetectorRef",function(){return Qo}),n.d(t,"DefaultIterableDiffer",function(){return al}),n.d(t,"IterableDiffers",function(){return hl}),n.d(t,"KeyValueDiffers",function(){return ml}),n.d(t,"SimpleChange",function(){return il}),n.d(t,"WrappedValue",function(){return nl}),n.d(t,"platformCore",function(){return bl}),n.d(t,"\u0275ALLOW_MULTIPLE_PLATFORMS",function(){return Io}),n.d(t,"\u0275APP_ID_RANDOM_PROVIDER",function(){return Qi}),n.d(t,"\u0275ValueUnwrapper",function(){return rl}),n.d(t,"\u0275devModeEqual",function(){return ge}),n.d(t,"\u0275isListLikeIterable",function(){return ye}),n.d(t,"\u0275ChangeDetectorStatus",function(){return qr}),n.d(t,"\u0275isDefaultChangeDetectionStrategy",function(){return a}),n.d(t,"\u0275Console",function(){return to}),n.d(t,"\u0275ComponentFactory",function(){return ao}),n.d(t,"\u0275CodegenComponentFactoryResolver",function(){return po}),n.d(t,"\u0275ReflectionCapabilities",function(){return ji}),n.d(t,"\u0275RenderDebugInfo",function(){return Ao}),n.d(t,"\u0275global",function(){return pi}),n.d(t,"\u0275looseIdentical",function(){return c}),n.d(t,"\u0275stringify",function(){return d}),n.d(t,"\u0275makeDecorator",function(){return r}),n.d(t,"\u0275isObservable",function(){return L}),n.d(t,"\u0275isPromise",function(){return A}),n.d(t,"\u0275clearOverrides",function(){return rr}),n.d(t,"\u0275overrideComponentView",function(){return nr}),n.d(t,"\u0275overrideProvider",function(){return tr}),n.d(t,"\u0275NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR",function(){return ra}),n.d(t,"\u0275registerModuleFactory",function(){return ae}),n.d(t,"\u0275EMPTY_ARRAY",function(){return Ll}),n.d(t,"\u0275EMPTY_MAP",function(){return Fl}),n.d(t,"\u0275and",function(){return ut}),n.d(t,"\u0275ccf",function(){return Ct}),n.d(t,"\u0275cmf",function(){return ir}),n.d(t,"\u0275crt",function(){return Ae}),n.d(t,"\u0275did",function(){return Mt}),n.d(t,"\u0275eld",function(){return ct}),n.d(t,"\u0275elementEventFullName",function(){return Ue}),n.d(t,"\u0275getComponentViewDefinitionFactory",function(){return Et}),n.d(t,"\u0275inlineInterpolate",function(){return at}),n.d(t,"\u0275interpolate",function(){return lt}),n.d(t,"\u0275mod",function(){return mt}),n.d(t,"\u0275mpd",function(){return ht}),n.d(t,"\u0275ncd",function(){return Xt}),n.d(t,"\u0275nov",function(){return Dt}),n.d(t,"\u0275pid",function(){return Pt}),n.d(t,"\u0275prd",function(){return Nt}),n.d(t,"\u0275pad",function(){return tn}),n.d(t,"\u0275pod",function(){return nn}),n.d(t,"\u0275ppd",function(){return en}),n.d(t,"\u0275qud",function(){return Gt}),n.d(t,"\u0275ted",function(){return on}),n.d(t,"\u0275unv",function(){return Ne}),n.d(t,"\u0275vid",function(){return sn}),n.d(t,"AUTO_STYLE",function(){return ha}),n.d(t,"trigger",function(){return fr}),n.d(t,"animate",function(){return hr}),n.d(t,"group",function(){return mr}),n.d(t,"sequence",function(){return gr}),n.d(t,"style",function(){return yr}),n.d(t,"state",function(){return vr}),n.d(t,"keyframes",function(){return br}),n.d(t,"transition",function(){return _r}),n.d(t,"\u0275x",function(){return lr}),n.d(t,"\u0275y",function(){return ar}),n.d(t,"\u0275bc",function(){return dr}),n.d(t,"\u0275z",function(){return sr}),n.d(t,"\u0275bb",function(){return cr}),n.d(t,"\u0275ba",function(){return ur}),n.d(t,"\u0275bd",function(){return pr}),n.d(t,"\u0275w",function(){return or}),n.d(t,"\u0275k",function(){return _e}),n.d(t,"\u0275l",function(){return we}),n.d(t,"\u0275m",function(){return xe}),n.d(t,"\u0275f",function(){return F}),n.d(t,"\u0275g",function(){return yl}),n.d(t,"\u0275h",function(){return vl}),n.d(t,"\u0275i",function(){return ol}),n.d(t,"\u0275j",function(){return dl}),n.d(t,"\u0275b",function(){return Di}),n.d(t,"\u0275c",function(){return Gi}),n.d(t,"\u0275d",function(){return zi}),n.d(t,"\u0275e",function(){return I}),n.d(t,"\u0275n",function(){return go}),n.d(t,"\u0275p",function(){return H}),n.d(t,"\u0275o",function(){return B}),n.d(t,"\u0275s",function(){return U}),n.d(t,"\u0275q",function(){return W}),n.d(t,"\u0275r",function(){return q}),n.d(t,"\u0275a",function(){return o}),n.d(t,"\u0275t",function(){return At}),n.d(t,"\u0275u",function(){return Tl});var wr,xr,Cr,Er,Sr,Or,Tr=n("6Xbx"),kr=n("AP4T"),Dr=n("2kLc"),Ir=n("URbD"),Rr=n("TO51"),Mr=function(){function e(e){this._desc=e,this.ngMetadataName="InjectionToken"}return e.prototype.toString=function(){return"InjectionToken "+this._desc},e}(),Pr="__annotations__",Nr="__paramaters__",Ar="__prop__metadata__",Lr=new Mr("AnalyzeForEntryComponents"),Fr=o("Attribute",function(e){return{attributeName:e}}),jr=function(){},Vr=l("ContentChildren",function(e,t){return void 0===t&&(t={}),Object(Tr.__assign)({selector:e,first:!1,isViewQuery:!1,descendants:!1},t)},jr),zr=l("ContentChild",function(e,t){return void 0===t&&(t={}),Object(Tr.__assign)({selector:e,first:!0,isViewQuery:!1,descendants:!0},t)},jr),Br=l("ViewChildren",function(e,t){return void 0===t&&(t={}),Object(Tr.__assign)({selector:e,first:!1,isViewQuery:!0,descendants:!0},t)},jr),Hr=l("ViewChild",function(e,t){return Object(Tr.__assign)({selector:e,first:!0,isViewQuery:!0,descendants:!0},t)},jr),Wr=function(){var e={OnPush:0,Default:1};return e[e.OnPush]="OnPush",e[e.Default]="Default",e}(),qr=function(){var e={CheckOnce:0,Checked:1,CheckAlways:2,Detached:3,Errored:4,Destroyed:5};return e[e.CheckOnce]="CheckOnce",e[e.Checked]="Checked",e[e.CheckAlways]="CheckAlways",e[e.Detached]="Detached",e[e.Errored]="Errored",e[e.Destroyed]="Destroyed",e}(),Ur=r("Directive",function(e){return void 0===e&&(e={}),e}),Gr=r("Component",function(e){return void 0===e&&(e={}),Object(Tr.__assign)({changeDetection:Wr.Default},e)},Ur),Kr=r("Pipe",function(e){return Object(Tr.__assign)({pure:!0},e)}),$r=l("Input",function(e){return{bindingPropertyName:e}}),Zr=l("Output",function(e){return{bindingPropertyName:e}}),Qr=l("HostBinding",function(e){return{hostPropertyName:e}}),Yr=l("HostListener",function(e,t){return{eventName:e,args:t}}),Xr={name:"custom-elements"},Jr={name:"no-errors-schema"},ei=r("NgModule",function(e){return e}),ti=function(){var e={Emulated:0,Native:1,None:2};return e[e.Emulated]="Emulated",e[e.Native]="Native",e[e.None]="None",e}(),ni=function(e){this.full=e,this.major=e.split(".")[0],this.minor=e.split(".")[1],this.patch=e.split(".").slice(2).join(".")},ri=new ni("5.1.1"),ii=o("Inject",function(e){return{token:e}}),oi=o("Optional"),li=r("Injectable"),ai=o("Self"),si=o("SkipSelf"),ui=o("Host"),ci="undefined"!=typeof window&&window,di="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,pi=ci||void 0!==e&&e||di,fi=null,hi=new Object,mi=hi,gi=function(){function e(){}return e.prototype.get=function(e,t){if(void 0===t&&(t=hi),t===hi)throw new Error("NullInjectorError: No provider for "+d(e)+"!");return t},e}(),yi=function(){function e(){}return e.create=function(e,t){return new Di(e,t)},e.THROW_IF_NOT_FOUND=hi,e.NULL=new gi,e}(),vi=function(e){return e},bi=[],_i=vi,wi=function(){return Array.prototype.slice.call(arguments)},xi={},Ci=xi,Ei=function(e){for(var t in e)if(e[t]===xi)return t;throw Error("!prop")}({provide:String,useValue:Ci}),Si="ngTempTokenPath",Oi=yi.NULL,Ti=/\n/gm,ki="\u0275",Di=function(){function e(e,t){void 0===t&&(t=Oi),this.parent=t;var n=this._records=new Map;n.set(yi,{token:yi,fn:vi,deps:bi,value:this,useNew:!1}),m(n,e)}return e.prototype.get=function(e,t){var n=this._records.get(e);try{return g(e,n,this._records,this.parent,t)}catch(e){var r=e[Si];throw e.message=y("\n"+e.message,r),e.ngTokenPath=r,e[Si]=null,e}},e.prototype.toString=function(){var e=[];return this._records.forEach(function(t,n){return e.push(d(n))}),"StaticInjector["+e.join(", ")+"]"},e}(),Ii="ngDebugContext",Ri="ngOriginalError",Mi="ngErrorLogger",Pi=function(){function e(){this._console=console}return e.prototype.handleError=function(e){var t=this._findOriginalError(e),n=this._findContext(e),r=e[Mi]||function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];e.error.apply(e,t)};r(this._console,"ERROR",e),t&&r(this._console,"ORIGINAL ERROR",t),n&&r(this._console,"ERROR CONTEXT",n)},e.prototype._findContext=function(e){return e?b(e)?b(e):this._findContext(_(e)):null},e.prototype._findOriginalError=function(e){for(var t=_(e);t&&_(t);)t=_(t);return t},e}(),Ni=function(){function e(e,t){if(this.token=e,this.id=t,!e)throw new Error("Token must be defined!");this.displayName=d(this.token)}return e.get=function(e){return Ai.get(f(e))},Object.defineProperty(e,"numberOfKeys",{get:function(){return Ai.numberOfKeys},enumerable:!0,configurable:!0}),e}(),Ai=new(function(){function e(){this._allKeys=new Map}return e.prototype.get=function(e){if(e instanceof Ni)return e;if(this._allKeys.has(e))return this._allKeys.get(e);var t=new Ni(e,Ni.numberOfKeys);return this._allKeys.set(e,t),t},Object.defineProperty(e.prototype,"numberOfKeys",{get:function(){return this._allKeys.size},enumerable:!0,configurable:!0}),e}()),Li=Function,Fi=/^function\s+\S+\(\)\s*{[\s\S]+\.apply\(this,\s*arguments\)/,ji=function(){function e(e){this._reflect=e||pi.Reflect}return e.prototype.isReflectionEnabled=function(){return!0},e.prototype.factory=function(e){return function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return new(e.bind.apply(e,[void 0].concat(t)))}},e.prototype._zipTypesAndAnnotations=function(e,t){var n;n=void 0===e?new Array(t.length):new Array(e.length);for(var r=0;r<n.length;r++)n[r]=void 0===e?[]:e[r]!=Object?[e[r]]:[],t&&null!=t[r]&&(n[r]=n[r].concat(t[r]));return n},e.prototype._ownParameters=function(e,t){if(Fi.exec(e.toString()))return null;if(e.parameters&&e.parameters!==t.parameters)return e.parameters;var n=e.ctorParameters;if(n&&n!==t.ctorParameters){var r="function"==typeof n?n():n,i=r.map(function(e){return e&&e.type}),o=r.map(function(e){return e&&T(e.decorators)});return this._zipTypesAndAnnotations(i,o)}var l=e.hasOwnProperty(Nr)&&e[Nr],a=this._reflect&&this._reflect.getOwnMetadata&&this._reflect.getOwnMetadata("design:paramtypes",e);return a||l?this._zipTypesAndAnnotations(a,l):new Array(e.length).fill(void 0)},e.prototype.parameters=function(e){if(!O(e))return[];var t=k(e),n=this._ownParameters(e,t);return n||t===Object||(n=this.parameters(t)),n||[]},e.prototype._ownAnnotations=function(e,t){if(e.annotations&&e.annotations!==t.annotations){var n=e.annotations;return"function"==typeof n&&n.annotations&&(n=n.annotations),n}return e.decorators&&e.decorators!==t.decorators?T(e.decorators):e.hasOwnProperty(Pr)?e[Pr]:null},e.prototype.annotations=function(e){if(!O(e))return[];var t=k(e),n=this._ownAnnotations(e,t)||[];return(t!==Object?this.annotations(t):[]).concat(n)},e.prototype._ownPropMetadata=function(e,t){if(e.propMetadata&&e.propMetadata!==t.propMetadata){var n=e.propMetadata;return"function"==typeof n&&n.propMetadata&&(n=n.propMetadata),n}if(e.propDecorators&&e.propDecorators!==t.propDecorators){var r=e.propDecorators,i={};return Object.keys(r).forEach(function(e){i[e]=T(r[e])}),i}return e.hasOwnProperty(Ar)?e[Ar]:null},e.prototype.propMetadata=function(e){if(!O(e))return{};var t=k(e),n={};if(t!==Object){var r=this.propMetadata(t);Object.keys(r).forEach(function(e){n[e]=r[e]})}var i=this._ownPropMetadata(e,t);return i&&Object.keys(i).forEach(function(e){var t=[];n.hasOwnProperty(e)&&t.push.apply(t,n[e]),t.push.apply(t,i[e]),n[e]=t}),n},e.prototype.hasLifecycleHook=function(e,t){return e instanceof Li&&t in e.prototype},e.prototype.getter=function(e){return new Function("o","return o."+e+";")},e.prototype.setter=function(e){return new Function("o","v","return o."+e+" = v;")},e.prototype.method=function(e){var t="if (!o."+e+") throw new Error('\""+e+"\" is undefined');\n        return o."+e+".apply(o, args);";return new Function("o","args",t)},e.prototype.importUri=function(e){return"object"==typeof e&&e.filePath?e.filePath:"./"+d(e)},e.prototype.resourceUri=function(e){return"./"+d(e)},e.prototype.resolveIdentifier=function(e,t,n,r){return r},e.prototype.resolveEnum=function(e,t){return e[t]},e}(),Vi=new(function(){function e(e){this.reflectionCapabilities=e}return e.prototype.updateCapabilities=function(e){this.reflectionCapabilities=e},e.prototype.factory=function(e){return this.reflectionCapabilities.factory(e)},e.prototype.parameters=function(e){return this.reflectionCapabilities.parameters(e)},e.prototype.annotations=function(e){return this.reflectionCapabilities.annotations(e)},e.prototype.propMetadata=function(e){return this.reflectionCapabilities.propMetadata(e)},e.prototype.hasLifecycleHook=function(e,t){return this.reflectionCapabilities.hasLifecycleHook(e,t)},e.prototype.getter=function(e){return this.reflectionCapabilities.getter(e)},e.prototype.setter=function(e){return this.reflectionCapabilities.setter(e)},e.prototype.method=function(e){return this.reflectionCapabilities.method(e)},e.prototype.importUri=function(e){return this.reflectionCapabilities.importUri(e)},e.prototype.resourceUri=function(e){return this.reflectionCapabilities.resourceUri(e)},e.prototype.resolveIdentifier=function(e,t,n,r){return this.reflectionCapabilities.resolveIdentifier(e,t,n,r)},e.prototype.resolveEnum=function(e,t){return this.reflectionCapabilities.resolveEnum(e,t)},e}())(new ji),zi=function(){function e(e,t,n){this.key=e,this.optional=t,this.visibility=n}return e.fromKey=function(t){return new e(t,!1,null)},e}(),Bi=[],Hi=function(){function e(e,t,n){this.key=e,this.resolvedFactories=t,this.multiProvider=n}return Object.defineProperty(e.prototype,"resolvedFactory",{get:function(){return this.resolvedFactories[0]},enumerable:!0,configurable:!0}),e}(),Wi=function(e,t){this.factory=e,this.dependencies=t},qi=new Object,Ui=function(){function e(){}return e.resolve=function(e){return I(e)},e.resolveAndCreate=function(t,n){var r=e.resolve(t);return e.fromResolvedProviders(r,n)},e.fromResolvedProviders=function(e,t){return new Gi(e,t)},e}(),Gi=function(){function e(e,t){this._constructionCounter=0,this._providers=e,this.parent=t||null;var n=e.length;this.keyIds=new Array(n),this.objs=new Array(n);for(var r=0;r<n;r++)this.keyIds[r]=e[r].key.id,this.objs[r]=qi}return e.prototype.get=function(e,t){return void 0===t&&(t=mi),this._getByKey(Ni.get(e),null,t)},e.prototype.resolveAndCreateChild=function(e){var t=Ui.resolve(e);return this.createChildFromResolved(t)},e.prototype.createChildFromResolved=function(t){var n=new e(t);return n.parent=this,n},e.prototype.resolveAndInstantiate=function(e){return this.instantiateResolved(Ui.resolve([e])[0])},e.prototype.instantiateResolved=function(e){return this._instantiateProvider(e)},e.prototype.getProviderAtIndex=function(e){if(e<0||e>=this._providers.length)throw function(e){return Error("Index "+e+" is out-of-bounds.")}(e);return this._providers[e]},e.prototype._new=function(e){if(this._constructionCounter++>this._getMaxNumberOfObjects())throw function(t,n){return x(t,e.key,function(e){return"Cannot instantiate cyclic dependency!"+w(e)})}(this);return this._instantiateProvider(e)},e.prototype._getMaxNumberOfObjects=function(){return this.objs.length},e.prototype._instantiateProvider=function(e){if(e.multiProvider){for(var t=new Array(e.resolvedFactories.length),n=0;n<e.resolvedFactories.length;++n)t[n]=this._instantiate(e,e.resolvedFactories[n]);return t}return this._instantiate(e,e.resolvedFactories[0])},e.prototype._instantiate=function(e,t){var n,r=this,i=t.factory;try{n=t.dependencies.map(function(e){return r._getByReflectiveDependency(e)})}catch(t){throw t.addKey&&t.addKey(this,e.key),t}var o;try{o=i.apply(void 0,n)}catch(t){throw function(t,n,r,i){return x(t,e.key,function(e){var t=d(e[0].token);return n.message+": Error during instantiation of "+t+"!"+w(e)+"."},n)}(this,t)}return o},e.prototype._getByReflectiveDependency=function(e){return this._getByKey(e.key,e.visibility,e.optional?null:mi)},e.prototype._getByKey=function(t,n,r){return t===e.INJECTOR_KEY?this:n instanceof ai?this._getByKeySelf(t,r):this._getByKeyDefault(t,r,n)},e.prototype._getObjByKeyId=function(e){for(var t=0;t<this.keyIds.length;t++)if(this.keyIds[t]===e)return this.objs[t]===qi&&(this.objs[t]=this._new(this._providers[t])),this.objs[t];return qi},e.prototype._throwOrNull=function(e,t){if(t!==mi)return t;throw function(t,n){return x(t,e,function(e){return"No provider for "+d(e[0].token)+"!"+w(e)})}(this)},e.prototype._getByKeySelf=function(e,t){var n=this._getObjByKeyId(e.id);return n!==qi?n:this._throwOrNull(e,t)},e.prototype._getByKeyDefault=function(t,n,r){var i;for(i=r instanceof si?this.parent:this;i instanceof e;){var o=i,l=o._getObjByKeyId(t.id);if(l!==qi)return l;i=o.parent}return null!==i?i.get(t.token,n):this._throwOrNull(t,n)},Object.defineProperty(e.prototype,"displayName",{get:function(){return"ReflectiveInjector(providers: ["+function(e,t){for(var n=new Array(e._providers.length),r=0;r<e._providers.length;++r)n[r]=t(e.getProviderAtIndex(r));return n}(this,function(e){return' "'+e.key.displayName+'" '}).join(", ")+"])"},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.displayName},e.INJECTOR_KEY=Ni.get(yi),e}(),Ki=new Mr("Application Initializer"),$i=function(){function e(e){var t=this;this.appInits=e,this.initialized=!1,this.done=!1,this.donePromise=new Promise(function(e,n){t.resolve=e,t.reject=n})}return e.prototype.runInitializers=function(){var e=this;if(!this.initialized){var t=[],n=function(){e.done=!0,e.resolve()};if(this.appInits)for(var r=0;r<this.appInits.length;r++){var i=this.appInits[r]();A(i)&&t.push(i)}Promise.all(t).then(function(){n()}).catch(function(t){e.reject(t)}),0===t.length&&n(),this.initialized=!0}},e}(),Zi=new Mr("AppId"),Qi={provide:Zi,useFactory:F,deps:[]},Yi=new Mr("Platform Initializer"),Xi=new Mr("Platform ID"),Ji=new Mr("appBootstrapListener"),eo=new Mr("Application Packages Root URL"),to=function(){function e(){}return e.prototype.log=function(e){console.log(e)},e.prototype.warn=function(e){console.warn(e)},e.ctorParameters=function(){return[]},e}(),no=function(e,t){this.ngModuleFactory=e,this.componentFactories=t},ro=function(){function e(){}return e.prototype.compileModuleSync=function(e){throw V()},e.prototype.compileModuleAsync=function(e){throw V()},e.prototype.compileModuleAndAllComponentsSync=function(e){throw V()},e.prototype.compileModuleAndAllComponentsAsync=function(e){throw V()},e.prototype.clearCache=function(){},e.prototype.clearCacheFor=function(e){},e}(),io=new Mr("compilerOptions"),oo=function(){},lo=function(){},ao=function(){},so="ngComponent",uo=function(){function e(){}return e.prototype.resolveComponentFactory=function(e){throw z(e)},e}(),co=function(){function e(){}return e.NULL=new uo,e}(),po=function(){function e(e,t,n){this._parent=t,this._ngModule=n,this._factories=new Map;for(var r=0;r<e.length;r++){var i=e[r];this._factories.set(i.componentType,i)}}return e.prototype.resolveComponentFactory=function(e){var t=this._factories.get(e);if(!t&&this._parent&&(t=this._parent.resolveComponentFactory(e)),!t)throw z(e);return new fo(t,this._ngModule)},e}(),fo=function(e){function t(t,n){var r=e.call(this)||this;return r.factory=t,r.ngModule=n,r}return Object(Tr.__extends)(t,e),Object.defineProperty(t.prototype,"selector",{get:function(){return this.factory.selector},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"componentType",{get:function(){return this.factory.componentType},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"ngContentSelectors",{get:function(){return this.factory.ngContentSelectors},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"inputs",{get:function(){return this.factory.inputs},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"outputs",{get:function(){return this.factory.outputs},enumerable:!0,configurable:!0}),t.prototype.create=function(e,t,n,r){return this.factory.create(e,t,n,r||this.ngModule)},t}(ao),ho=function(){},mo=function(){},go=B(),yo=go?H:function(e,t){return G},vo=go?W:function(e,t){return t},bo=go?q:function(e,t){return null},_o=go?U:function(e){return null},wo=function(e){function t(t){void 0===t&&(t=!1);var n=e.call(this)||this;return n.__isAsync=t,n}return Object(Tr.__extends)(t,e),t.prototype.emit=function(t){e.prototype.next.call(this,t)},t.prototype.subscribe=function(t,n,r){var i,o=function(e){return null},l=function(){return null};return t&&"object"==typeof t?(i=this.__isAsync?function(e){setTimeout(function(){return t.next(e)})}:function(e){t.next(e)},t.error&&(o=this.__isAsync?function(e){setTimeout(function(){return t.error(e)})}:function(e){t.error(e)}),t.complete&&(l=this.__isAsync?function(){setTimeout(function(){return t.complete()})}:function(){t.complete()})):(i=this.__isAsync?function(e){setTimeout(function(){return t(e)})}:function(e){t(e)},n&&(o=this.__isAsync?function(e){setTimeout(function(){return n(e)})}:function(e){n(e)}),r&&(l=this.__isAsync?function(){setTimeout(function(){return r()})}:function(){r()})),e.prototype.subscribe.call(this,i,o,l)},t}(Rr.Subject),xo=function(){function e(e){var t=e.enableLongStackTrace,n=void 0!==t&&t;if(this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new wo(!1),this.onMicrotaskEmpty=new wo(!1),this.onStable=new wo(!1),this.onError=new wo(!1),"undefined"==typeof Zone)throw new Error("In this configuration Angular requires Zone.js");Zone.assertZonePatched(),this._nesting=0,this._outer=this._inner=Zone.current,Zone.wtfZoneSpec&&(this._inner=this._inner.fork(Zone.wtfZoneSpec)),n&&Zone.longStackTraceZoneSpec&&(this._inner=this._inner.fork(Zone.longStackTraceZoneSpec)),function(e){e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:function(t,n,r,i,o,l){try{return Z(e),t.invokeTask(r,i,o,l)}finally{Q(e)}},onInvoke:function(t,n,r,i,o,l,a){try{return Z(e),t.invoke(r,i,o,l,a)}finally{Q(e)}},onHasTask:function(t,n,r,i){t.hasTask(r,i),n===r&&("microTask"==i.change?(e.hasPendingMicrotasks=i.microTask,$(e)):"macroTask"==i.change&&(e.hasPendingMacrotasks=i.macroTask))},onHandleError:function(t,n,r,i){return t.handleError(r,i),e.runOutsideAngular(function(){return e.onError.emit(i)}),!1}})}(this)}return e.isInAngularZone=function(){return!0===Zone.current.get("isAngularZone")},e.assertInAngularZone=function(){if(!e.isInAngularZone())throw new Error("Expected to be in Angular Zone, but it is not!")},e.assertNotInAngularZone=function(){if(e.isInAngularZone())throw new Error("Expected to not be in Angular Zone, but it is!")},e.prototype.run=function(e,t,n){return this._inner.run(e,t,n)},e.prototype.runTask=function(e,t,n,r){var i=this._inner,o=i.scheduleEventTask("NgZoneEvent: "+r,e,Co,K,K);try{return i.runTask(o,t,n)}finally{i.cancelTask(o)}},e.prototype.runGuarded=function(e,t,n){return this._inner.runGuarded(e,t,n)},e.prototype.runOutsideAngular=function(e){return this._outer.run(e)},e}(),Co={},Eo=function(){function e(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new wo,this.onMicrotaskEmpty=new wo,this.onStable=new wo,this.onError=new wo}return e.prototype.run=function(e){return e()},e.prototype.runGuarded=function(e){return e()},e.prototype.runOutsideAngular=function(e){return e()},e.prototype.runTask=function(e){return e()},e}(),So=function(){function e(e){this._ngZone=e,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this._watchAngularEvents()}return e.prototype._watchAngularEvents=function(){var e=this;this._ngZone.onUnstable.subscribe({next:function(){e._didWork=!0,e._isZoneStable=!1}}),this._ngZone.runOutsideAngular(function(){e._ngZone.onStable.subscribe({next:function(){xo.assertNotInAngularZone(),u(function(){e._isZoneStable=!0,e._runCallbacksIfReady()})}})})},e.prototype.increasePendingRequestCount=function(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount},e.prototype.decreasePendingRequestCount=function(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount},e.prototype.isStable=function(){return this._isZoneStable&&0==this._pendingCount&&!this._ngZone.hasPendingMacrotasks},e.prototype._runCallbacksIfReady=function(){var e=this;this.isStable()?u(function(){for(;0!==e._callbacks.length;)e._callbacks.pop()(e._didWork);e._didWork=!1}):this._didWork=!0},e.prototype.whenStable=function(e){this._callbacks.push(e),this._runCallbacksIfReady()},e.prototype.getPendingRequestCount=function(){return this._pendingCount},e.prototype.findProviders=function(e,t,n){return[]},e}(),Oo=function(){function e(){this._applications=new Map,To.addToWindow(this)}return e.prototype.registerApplication=function(e,t){this._applications.set(e,t)},e.prototype.unregisterApplication=function(e){this._applications.delete(e)},e.prototype.unregisterAllApplications=function(){this._applications.clear()},e.prototype.getTestability=function(e){return this._applications.get(e)||null},e.prototype.getAllTestabilities=function(){return Array.from(this._applications.values())},e.prototype.getAllRootElements=function(){return Array.from(this._applications.keys())},e.prototype.findTestabilityInTree=function(e,t){return void 0===t&&(t=!0),To.findTestabilityInTree(this,e,t)},e.ctorParameters=function(){return[]},e}(),To=new(function(){function e(){}return e.prototype.addToWindow=function(e){},e.prototype.findTestabilityInTree=function(e,t,n){return null},e}()),ko=!0,Do=!1,Io=new Mr("AllowMultipleToken"),Ro=function(e,t){this.name=e,this.token=t},Mo=function(){function e(e){this._injector=e,this._modules=[],this._destroyListeners=[],this._destroyed=!1}return e.prototype.bootstrapModuleFactory=function(e,t){var n=this,r=function(e){return"noop"===e?new Eo:("zone.js"===e?void 0:e)||new xo({enableLongStackTrace:J()})}(t?t.ngZone:void 0);return r.run(function(){var t=yi.create([{provide:xo,useValue:r}],n.injector),i=e.create(t),o=i.injector.get(Pi,null);if(!o)throw new Error("No ErrorHandler. Is platform module (BrowserModule) included?");return i.onDestroy(function(){return le(n._modules,i)}),r.runOutsideAngular(function(){return r.onError.subscribe({next:function(e){o.handleError(e)}})}),function(e,t,r){try{var o=function(){var e=i.injector.get($i);return e.runInitializers(),e.donePromise.then(function(){return n._moduleDoBootstrap(i),i})}();return A(o)?o.catch(function(n){throw t.runOutsideAngular(function(){return e.handleError(n)}),n}):o}catch(n){throw t.runOutsideAngular(function(){return e.handleError(n)}),n}}(o,r)})},e.prototype.bootstrapModule=function(e,t){var n=this;void 0===t&&(t=[]);var r=this.injector.get(oo),i=oe({},t);return r.createCompiler([i]).compileModuleAsync(e).then(function(e){return n.bootstrapModuleFactory(e,i)})},e.prototype._moduleDoBootstrap=function(e){var t=e.injector.get(Po);if(e._bootstrapComponents.length>0)e._bootstrapComponents.forEach(function(e){return t.bootstrap(e)});else{if(!e.instance.ngDoBootstrap)throw new Error("The module "+d(e.instance.constructor)+' was bootstrapped, but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. Please define one of these.');e.instance.ngDoBootstrap(t)}this._modules.push(e)},e.prototype.onDestroy=function(e){this._destroyListeners.push(e)},Object.defineProperty(e.prototype,"injector",{get:function(){return this._injector},enumerable:!0,configurable:!0}),e.prototype.destroy=function(){if(this._destroyed)throw new Error("The platform has already been destroyed!");this._modules.slice().forEach(function(e){return e.destroy()}),this._destroyListeners.forEach(function(e){return e()}),this._destroyed=!0},Object.defineProperty(e.prototype,"destroyed",{get:function(){return this._destroyed},enumerable:!0,configurable:!0}),e}(),Po=function(){function e(e,t,n,r,i,o){var l=this;this._zone=e,this._console=t,this._injector=n,this._exceptionHandler=r,this._componentFactoryResolver=i,this._initStatus=o,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._enforceNoNewChanges=!1,this._stable=!0,this.componentTypes=[],this.components=[],this._enforceNoNewChanges=J(),this._zone.onMicrotaskEmpty.subscribe({next:function(){l._zone.run(function(){l.tick()})}});var a=new kr.a(function(e){l._stable=l._zone.isStable&&!l._zone.hasPendingMacrotasks&&!l._zone.hasPendingMicrotasks,l._zone.runOutsideAngular(function(){e.next(l._stable),e.complete()})}),s=new kr.a(function(e){var t;l._zone.runOutsideAngular(function(){t=l._zone.onStable.subscribe(function(){xo.assertNotInAngularZone(),u(function(){l._stable||l._zone.hasPendingMacrotasks||l._zone.hasPendingMicrotasks||(l._stable=!0,e.next(!0))})})});var n=l._zone.onUnstable.subscribe(function(){xo.assertInAngularZone(),l._stable&&(l._stable=!1,l._zone.runOutsideAngular(function(){e.next(!1)}))});return function(){t.unsubscribe(),n.unsubscribe()}});this.isStable=Object(Dr.a)(a,Ir.a.call(s))}return e.prototype.bootstrap=function(e,t){var n=this;if(!this._initStatus.done)throw new Error("Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.");var r;r=e instanceof ao?e:this._componentFactoryResolver.resolveComponentFactory(e),this.componentTypes.push(r.componentType);var i=r instanceof fo?null:this._injector.get(ho),o=r.create(yi.NULL,[],t||r.selector,i);o.onDestroy(function(){n._unloadComponent(o)});var l=o.injector.get(So,null);return l&&o.injector.get(Oo).registerApplication(o.location.nativeElement,l),this._loadComponent(o),J()&&this._console.log("Angular is running in the development mode. Call enableProdMode() to enable the production mode."),o},e.prototype.tick=function(){var t=this;if(this._runningTick)throw new Error("ApplicationRef.tick is called recursively");var n=e._tickScope();try{this._runningTick=!0,this._views.forEach(function(e){return e.detectChanges()}),this._enforceNoNewChanges&&this._views.forEach(function(e){return e.checkNoChanges()})}catch(e){this._zone.runOutsideAngular(function(){return t._exceptionHandler.handleError(e)})}finally{this._runningTick=!1,vo(n)}},e.prototype.attachView=function(e){var t=e;this._views.push(t),t.attachToAppRef(this)},e.prototype.detachView=function(e){var t=e;le(this._views,t),t.detachFromAppRef()},e.prototype._loadComponent=function(e){this.attachView(e.hostView),this.tick(),this.components.push(e),this._injector.get(Ji,[]).concat(this._bootstrapListeners).forEach(function(t){return t(e)})},e.prototype._unloadComponent=function(e){this.detachView(e.hostView),le(this.components,e)},e.prototype.ngOnDestroy=function(){this._views.slice().forEach(function(e){return e.destroy()})},Object.defineProperty(e.prototype,"viewCount",{get:function(){return this._views.length},enumerable:!0,configurable:!0}),e._tickScope=yo("ApplicationRef#tick()"),e}(),No=function(e,t,n,r,i,o){this.id=e,this.templateUrl=t,this.slotCount=n,this.encapsulation=r,this.styles=i,this.animations=o},Ao=function(){},Lo=function(){},Fo=function(){},jo=function(){},Vo=function(){var e={Important:1,DashCase:2};return e[e.Important]="Important",e[e.DashCase]="DashCase",e}(),zo=function(){},Bo=function(e){this.nativeElement=e},Ho=function(){},Wo=new Map,qo=function(){function e(){this.dirty=!0,this._results=[],this.changes=new wo}return Object.defineProperty(e.prototype,"length",{get:function(){return this._results.length},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"first",{get:function(){return this._results[0]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"last",{get:function(){return this._results[this.length-1]},enumerable:!0,configurable:!0}),e.prototype.map=function(e){return this._results.map(e)},e.prototype.filter=function(e){return this._results.filter(e)},e.prototype.find=function(e){return this._results.find(e)},e.prototype.reduce=function(e,t){return this._results.reduce(e,t)},e.prototype.forEach=function(e){this._results.forEach(e)},e.prototype.some=function(e){return this._results.some(e)},e.prototype.toArray=function(){return this._results.slice()},e.prototype[s()]=function(){return this._results[s()]()},e.prototype.toString=function(){return this._results.toString()},e.prototype.reset=function(e){this._results=ue(e),this.dirty=!1},e.prototype.notifyOnChanges=function(){this.changes.emit(this)},e.prototype.setDirty=function(){this.dirty=!0},e.prototype.destroy=function(){this.changes.complete(),this.changes.unsubscribe()},e}(),Uo=function(){},Go={factoryPathPrefix:"",factoryPathSuffix:".ngfactory"},Ko=function(){function e(e,t){this._compiler=e,this._config=t||Go}return e.prototype.load=function(e){return this._compiler instanceof ro?this.loadFactory(e):this.loadAndCompile(e)},e.prototype.loadAndCompile=function(e){var t=this,r=e.split("#"),i=r[0],o=r[1];return void 0===o&&(o="default"),n("YuZA")(i).then(function(e){return e[o]}).then(function(e){return ce(e,i,o)}).then(function(e){return t._compiler.compileModuleAsync(e)})},e.prototype.loadFactory=function(e){var t=e.split("#"),r=t[0],i=t[1],o="NgFactory";return void 0===i&&(i="default",o=""),n("YuZA")(this._config.factoryPathPrefix+r+this._config.factoryPathSuffix).then(function(e){return e[i+o]}).then(function(e){return ce(e,r,i)})},e}(),$o=function(){},Zo=function(){},Qo=function(){},Yo=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(Tr.__extends)(t,e),t}(Qo),Xo=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(Tr.__extends)(t,e),t}(Yo),Jo=function(){function e(e,t,n){this._debugContext=n,this.nativeNode=e,t&&t instanceof el?t.addChild(this):this.parent=null,this.listeners=[]}return Object.defineProperty(e.prototype,"injector",{get:function(){return this._debugContext.injector},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"componentInstance",{get:function(){return this._debugContext.component},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"context",{get:function(){return this._debugContext.context},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"references",{get:function(){return this._debugContext.references},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"providerTokens",{get:function(){return this._debugContext.providerTokens},enumerable:!0,configurable:!0}),e}(),el=function(e){function t(t,n,r){var i=e.call(this,t,n,r)||this;return i.properties={},i.attributes={},i.classes={},i.styles={},i.childNodes=[],i.nativeElement=t,i}return Object(Tr.__extends)(t,e),t.prototype.addChild=function(e){e&&(this.childNodes.push(e),e.parent=this)},t.prototype.removeChild=function(e){var t=this.childNodes.indexOf(e);-1!==t&&(e.parent=null,this.childNodes.splice(t,1))},t.prototype.insertChildrenAfter=function(e,t){var n=this,r=this.childNodes.indexOf(e);-1!==r&&((i=this.childNodes).splice.apply(i,[r+1,0].concat(t)),t.forEach(function(e){e.parent&&e.parent.removeChild(e),e.parent=n}));var i},t.prototype.insertBefore=function(e,t){var n=this.childNodes.indexOf(e);-1===n?this.addChild(t):(t.parent&&t.parent.removeChild(t),t.parent=this,this.childNodes.splice(n,0,t))},t.prototype.query=function(e){return this.queryAll(e)[0]||null},t.prototype.queryAll=function(e){var t=[];return pe(this,e,t),t},t.prototype.queryAllNodes=function(e){var t=[];return fe(this,e,t),t},Object.defineProperty(t.prototype,"children",{get:function(){return this.childNodes.filter(function(e){return e instanceof t})},enumerable:!0,configurable:!0}),t.prototype.triggerEventHandler=function(e,t){this.listeners.forEach(function(n){n.name==e&&n.callback(t)})},t}(Jo),tl=new Map,nl=function(){function e(e){this.wrapped=e}return e.wrap=function(t){return new e(t)},e}(),rl=function(){function e(){this.hasWrappedValue=!1}return e.prototype.unwrap=function(e){return e instanceof nl?(this.hasWrappedValue=!0,e.wrapped):e},e.prototype.reset=function(){this.hasWrappedValue=!1},e}(),il=function(){function e(e,t,n){this.previousValue=e,this.currentValue=t,this.firstChange=n}return e.prototype.isFirstChange=function(){return this.firstChange},e}(),ol=function(){function e(){}return e.prototype.supports=function(e){return ye(e)},e.prototype.create=function(e){return new al(e)},e}(),ll=function(e,t){return t},al=function(){function e(e){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=e||ll}return e.prototype.forEachItem=function(e){var t;for(t=this._itHead;null!==t;t=t._next)e(t)},e.prototype.forEachOperation=function(e){for(var t=this._itHead,n=this._removalsHead,r=0,i=null;t||n;){var o=!n||t&&t.currentIndex<be(n,r,i)?t:n,l=be(o,r,i),a=o.currentIndex;if(o===n)r--,n=n._nextRemoved;else if(t=t._next,null==o.previousIndex)r++;else{i||(i=[]);var s=l-r,u=a-r;if(s!=u){for(var c=0;c<s;c++){var d=c<i.length?i[c]:i[c]=0,p=d+c;u<=p&&p<s&&(i[c]=d+1)}i[o.previousIndex]=u-s}}l!==a&&e(o,l,a)}},e.prototype.forEachPreviousItem=function(e){var t;for(t=this._previousItHead;null!==t;t=t._nextPrevious)e(t)},e.prototype.forEachAddedItem=function(e){var t;for(t=this._additionsHead;null!==t;t=t._nextAdded)e(t)},e.prototype.forEachMovedItem=function(e){var t;for(t=this._movesHead;null!==t;t=t._nextMoved)e(t)},e.prototype.forEachRemovedItem=function(e){var t;for(t=this._removalsHead;null!==t;t=t._nextRemoved)e(t)},e.prototype.forEachIdentityChange=function(e){var t;for(t=this._identityChangesHead;null!==t;t=t._nextIdentityChange)e(t)},e.prototype.diff=function(e){if(null==e&&(e=[]),!ye(e))throw new Error("Error trying to diff '"+d(e)+"'. Only arrays and iterables are allowed");return this.check(e)?this:null},e.prototype.onDestroy=function(){},e.prototype.check=function(e){var t=this;this._reset();var n,r,i,o=this._itHead,l=!1;if(Array.isArray(e)){this.length=e.length;for(var a=0;a<this.length;a++)i=this._trackByFn(a,r=e[a]),null!==o&&c(o.trackById,i)?(l&&(o=this._verifyReinsertion(o,r,i,a)),c(o.item,r)||this._addIdentityChange(o,r)):(o=this._mismatch(o,r,i,a),l=!0),o=o._next}else n=0,function(e,t){if(Array.isArray(e))for(var n=0;n<e.length;n++)t(e[n]);else for(var r=e[s()](),i=void 0;!(i=r.next()).done;)t(i.value)}(e,function(e){i=t._trackByFn(n,e),null!==o&&c(o.trackById,i)?(l&&(o=t._verifyReinsertion(o,e,i,n)),c(o.item,e)||t._addIdentityChange(o,e)):(o=t._mismatch(o,e,i,n),l=!0),o=o._next,n++}),this.length=n;return this._truncate(o),this.collection=e,this.isDirty},Object.defineProperty(e.prototype,"isDirty",{get:function(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead},enumerable:!0,configurable:!0}),e.prototype._reset=function(){if(this.isDirty){var e=void 0,t=void 0;for(e=this._previousItHead=this._itHead;null!==e;e=e._next)e._nextPrevious=e._next;for(e=this._additionsHead;null!==e;e=e._nextAdded)e.previousIndex=e.currentIndex;for(this._additionsHead=this._additionsTail=null,e=this._movesHead;null!==e;e=t)e.previousIndex=e.currentIndex,t=e._nextMoved;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}},e.prototype._mismatch=function(e,t,n,r){var i;return null===e?i=this._itTail:(i=e._prev,this._remove(e)),null!==(e=null===this._linkedRecords?null:this._linkedRecords.get(n,r))?(c(e.item,t)||this._addIdentityChange(e,t),this._moveAfter(e,i,r)):null!==(e=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null))?(c(e.item,t)||this._addIdentityChange(e,t),this._reinsertAfter(e,i,r)):e=this._addAfter(new sl(t,n),i,r),e},e.prototype._verifyReinsertion=function(e,t,n,r){var i=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null);return null!==i?e=this._reinsertAfter(i,e._prev,r):e.currentIndex!=r&&(e.currentIndex=r,this._addToMoves(e,r)),e},e.prototype._truncate=function(e){for(;null!==e;){var t=e._next;this._addToRemovals(this._unlink(e)),e=t}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)},e.prototype._reinsertAfter=function(e,t,n){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(e);var r=e._prevRemoved,i=e._nextRemoved;return null===r?this._removalsHead=i:r._nextRemoved=i,null===i?this._removalsTail=r:i._prevRemoved=r,this._insertAfter(e,t,n),this._addToMoves(e,n),e},e.prototype._moveAfter=function(e,t,n){return this._unlink(e),this._insertAfter(e,t,n),this._addToMoves(e,n),e},e.prototype._addAfter=function(e,t,n){return this._insertAfter(e,t,n),this._additionsTail=null===this._additionsTail?this._additionsHead=e:this._additionsTail._nextAdded=e,e},e.prototype._insertAfter=function(e,t,n){var r=null===t?this._itHead:t._next;return e._next=r,e._prev=t,null===r?this._itTail=e:r._prev=e,null===t?this._itHead=e:t._next=e,null===this._linkedRecords&&(this._linkedRecords=new cl),this._linkedRecords.put(e),e.currentIndex=n,e},e.prototype._remove=function(e){return this._addToRemovals(this._unlink(e))},e.prototype._unlink=function(e){null!==this._linkedRecords&&this._linkedRecords.remove(e);var t=e._prev,n=e._next;return null===t?this._itHead=n:t._next=n,null===n?this._itTail=t:n._prev=t,e},e.prototype._addToMoves=function(e,t){return e.previousIndex===t?e:(this._movesTail=null===this._movesTail?this._movesHead=e:this._movesTail._nextMoved=e,e)},e.prototype._addToRemovals=function(e){return null===this._unlinkedRecords&&(this._unlinkedRecords=new cl),this._unlinkedRecords.put(e),e.currentIndex=null,e._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=e,e._prevRemoved=null):(e._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=e),e},e.prototype._addIdentityChange=function(e,t){return e.item=t,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=e:this._identityChangesTail._nextIdentityChange=e,e},e}(),sl=function(e,t){this.item=e,this.trackById=t,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null},ul=function(){function e(){this._head=null,this._tail=null}return e.prototype.add=function(e){null===this._head?(this._head=this._tail=e,e._nextDup=null,e._prevDup=null):(this._tail._nextDup=e,e._prevDup=this._tail,e._nextDup=null,this._tail=e)},e.prototype.get=function(e,t){var n;for(n=this._head;null!==n;n=n._nextDup)if((null===t||t<=n.currentIndex)&&c(n.trackById,e))return n;return null},e.prototype.remove=function(e){var t=e._prevDup,n=e._nextDup;return null===t?this._head=n:t._nextDup=n,null===n?this._tail=t:n._prevDup=t,null===this._head},e}(),cl=function(){function e(){this.map=new Map}return e.prototype.put=function(e){var t=e.trackById,n=this.map.get(t);n||(n=new ul,this.map.set(t,n)),n.add(e)},e.prototype.get=function(e,t){var n=this.map.get(e);return n?n.get(e,t):null},e.prototype.remove=function(e){var t=e.trackById;return this.map.get(t).remove(e)&&this.map.delete(t),e},Object.defineProperty(e.prototype,"isEmpty",{get:function(){return 0===this.map.size},enumerable:!0,configurable:!0}),e.prototype.clear=function(){this.map.clear()},e}(),dl=function(){function e(){}return e.prototype.supports=function(e){return e instanceof Map||ve(e)},e.prototype.create=function(){return new pl},e}(),pl=function(){function e(){this._records=new Map,this._mapHead=null,this._appendAfter=null,this._previousMapHead=null,this._changesHead=null,this._changesTail=null,this._additionsHead=null,this._additionsTail=null,this._removalsHead=null,this._removalsTail=null}return Object.defineProperty(e.prototype,"isDirty",{get:function(){return null!==this._additionsHead||null!==this._changesHead||null!==this._removalsHead},enumerable:!0,configurable:!0}),e.prototype.forEachItem=function(e){var t;for(t=this._mapHead;null!==t;t=t._next)e(t)},e.prototype.forEachPreviousItem=function(e){var t;for(t=this._previousMapHead;null!==t;t=t._nextPrevious)e(t)},e.prototype.forEachChangedItem=function(e){var t;for(t=this._changesHead;null!==t;t=t._nextChanged)e(t)},e.prototype.forEachAddedItem=function(e){var t;for(t=this._additionsHead;null!==t;t=t._nextAdded)e(t)},e.prototype.forEachRemovedItem=function(e){var t;for(t=this._removalsHead;null!==t;t=t._nextRemoved)e(t)},e.prototype.diff=function(e){if(e){if(!(e instanceof Map||ve(e)))throw new Error("Error trying to diff '"+d(e)+"'. Only maps and objects are allowed")}else e=new Map;return this.check(e)?this:null},e.prototype.onDestroy=function(){},e.prototype.check=function(e){var t=this;this._reset();var n=this._mapHead;if(this._appendAfter=null,this._forEach(e,function(e,r){if(n&&n.key===r)t._maybeAddToChanges(n,e),t._appendAfter=n,n=n._next;else{var i=t._getOrCreateRecordForKey(r,e);n=t._insertBeforeOrAppend(n,i)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(var r=n;null!==r;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty},e.prototype._insertBeforeOrAppend=function(e,t){if(e){var n=e._prev;return t._next=e,t._prev=n,e._prev=t,n&&(n._next=t),e===this._mapHead&&(this._mapHead=t),this._appendAfter=e,e}return this._appendAfter?(this._appendAfter._next=t,t._prev=this._appendAfter):this._mapHead=t,this._appendAfter=t,null},e.prototype._getOrCreateRecordForKey=function(e,t){if(this._records.has(e)){var n=this._records.get(e);this._maybeAddToChanges(n,t);var r=n._prev,i=n._next;return r&&(r._next=i),i&&(i._prev=r),n._next=null,n._prev=null,n}var o=new fl(e);return this._records.set(e,o),o.currentValue=t,this._addToAdditions(o),o},e.prototype._reset=function(){if(this.isDirty){var e=void 0;for(this._previousMapHead=this._mapHead,e=this._previousMapHead;null!==e;e=e._next)e._nextPrevious=e._next;for(e=this._changesHead;null!==e;e=e._nextChanged)e.previousValue=e.currentValue;for(e=this._additionsHead;null!=e;e=e._nextAdded)e.previousValue=e.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}},e.prototype._maybeAddToChanges=function(e,t){c(t,e.currentValue)||(e.previousValue=e.currentValue,e.currentValue=t,this._addToChanges(e))},e.prototype._addToAdditions=function(e){null===this._additionsHead?this._additionsHead=this._additionsTail=e:(this._additionsTail._nextAdded=e,this._additionsTail=e)},e.prototype._addToChanges=function(e){null===this._changesHead?this._changesHead=this._changesTail=e:(this._changesTail._nextChanged=e,this._changesTail=e)},e.prototype._forEach=function(e,t){e instanceof Map?e.forEach(t):Object.keys(e).forEach(function(n){return t(e[n],n)})},e}(),fl=function(e){this.key=e,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null},hl=function(){function e(e){this.factories=e}return e.create=function(t,n){if(null!=n){var r=n.factories.slice();return t=t.concat(r),new e(t)}return new e(t)},e.extend=function(t){return{provide:e,useFactory:function(n){if(!n)throw new Error("Cannot extend IterableDiffers without a parent injector");return e.create(t,n)},deps:[[e,new si,new oi]]}},e.prototype.find=function(e){var t=this.factories.find(function(t){return t.supports(e)});if(null!=t)return t;throw new Error("Cannot find a differ supporting object '"+e+"' of type '"+(e.name||typeof e)+"'")},e}(),ml=function(){function e(e){this.factories=e}return e.create=function(t,n){if(n){var r=n.factories.slice();t=t.concat(r)}return new e(t)},e.extend=function(t){return{provide:e,useFactory:function(n){if(!n)throw new Error("Cannot extend KeyValueDiffers without a parent injector");return e.create(t,n)},deps:[[e,new si,new oi]]}},e.prototype.find=function(e){var t=this.factories.find(function(t){return t.supports(e)});if(t)return t;throw new Error("Cannot find a differ supporting object '"+e+"'")},e}(),gl=[new dl],yl=new hl([new ol]),vl=new ml(gl),bl=te(null,"core",[{provide:Xi,useValue:"unknown"},{provide:Mo,deps:[yi]},{provide:Oo,deps:[]},{provide:to,deps:[]}]),_l=new Mr("LocaleId"),wl=new Mr("Translations"),xl=new Mr("TranslationsFormat"),Cl=function(){var e={Error:0,Warning:1,Ignore:2};return e[e.Error]="Error",e[e.Warning]="Warning",e[e.Ignore]="Ignore",e}(),El=function(e){},Sl=function(){var e={NONE:0,HTML:1,STYLE:2,SCRIPT:3,URL:4,RESOURCE_URL:5};return e[e.NONE]="NONE",e[e.HTML]="HTML",e[e.STYLE]="STYLE",e[e.SCRIPT]="SCRIPT",e[e.URL]="URL",e[e.RESOURCE_URL]="RESOURCE_URL",e}(),Ol=function(){},Tl=function(){},kl={setCurrentNode:void 0,createRootView:void 0,createEmbeddedView:void 0,createComponentView:void 0,createNgModuleRef:void 0,overrideProvider:void 0,overrideComponentView:void 0,clearOverrides:void 0,checkAndUpdateView:void 0,checkNoChangesView:void 0,destroyView:void 0,resolveDep:void 0,createDebugContext:void 0,handleEvent:void 0,updateDirectives:void 0,updateRenderer:void 0,dirtyParentQueries:void 0},Dl=function(){},Il=new Map,Rl="$$undefined",Ml="$$empty",Pl=0,Nl=new WeakMap,Al=/^:([^:]+):(.+)$/,Ll=[],Fl={},jl=new Object,Vl=Pe(yi),zl=Pe(ho),Bl=new Object,Hl=function(e){function t(t,n,r,i,o,l){var a=e.call(this)||this;return a.selector=t,a.componentType=n,a._inputs=i,a._outputs=o,a.ngContentSelectors=l,a.viewDefFactory=r,a}return Object(Tr.__extends)(t,e),Object.defineProperty(t.prototype,"inputs",{get:function(){var e=[],t=this._inputs;for(var n in t)e.push({propName:n,templateName:t[n]});return e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"outputs",{get:function(){var e=[];for(var t in this._outputs)e.push({propName:t,templateName:this._outputs[t]});return e},enumerable:!0,configurable:!0}),t.prototype.create=function(e,t,n,r){if(!r)throw new Error("ngModule should be provided");var i=Xe(this.viewDefFactory),o=i.nodes[0].element.componentProvider.nodeIndex,l=kl.createRootView(e,t||[],n,i,r,Bl),a=Te(l,o).instance;return n&&l.renderer.setAttribute(Oe(l,0).renderElement,"ng-version",ri.full),new Wl(l,new Ul(l),a)},t}(ao),Wl=function(e){function t(t,n,r){var i=e.call(this)||this;return i._view=t,i._viewRef=n,i._component=r,i._elDef=i._view.def.nodes[0],i.hostView=n,i.changeDetectorRef=n,i.instance=r,i}return Object(Tr.__extends)(t,e),Object.defineProperty(t.prototype,"location",{get:function(){return new Bo(Oe(this._view,this._elDef.nodeIndex).renderElement)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"injector",{get:function(){return new Kl(this._view,this._elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"componentType",{get:function(){return this._component.constructor},enumerable:!0,configurable:!0}),t.prototype.destroy=function(){this._viewRef.destroy()},t.prototype.onDestroy=function(e){this._viewRef.onDestroy(e)},t}(lo),ql=function(){function e(e,t,n){this._view=e,this._elDef=t,this._data=n,this._embeddedViews=[]}return Object.defineProperty(e.prototype,"element",{get:function(){return new Bo(this._data.renderElement)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"injector",{get:function(){return new Kl(this._view,this._elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"parentInjector",{get:function(){for(var e=this._view,t=this._elDef.parent;!t&&e;)t=We(e),e=e.parent;return e?new Kl(e,t):new Kl(this._view,null)},enumerable:!0,configurable:!0}),e.prototype.clear=function(){for(var e=this._embeddedViews.length-1;e>=0;e--){var t=vt(this._data,e);kl.destroyView(t)}},e.prototype.get=function(e){var t=this._embeddedViews[e];if(t){var n=new Ul(t);return n.attachToViewContainerRef(this),n}return null},Object.defineProperty(e.prototype,"length",{get:function(){return this._embeddedViews.length},enumerable:!0,configurable:!0}),e.prototype.createEmbeddedView=function(e,t,n){var r=e.createEmbeddedView(t||{});return this.insert(r,n),r},e.prototype.createComponent=function(e,t,n,r,i){var o=n||this.parentInjector;i||e instanceof fo||(i=o.get(ho));var l=e.create(o,r,void 0,i);return this.insert(l.hostView,t),l},e.prototype.insert=function(e,t){if(e.destroyed)throw new Error("Cannot insert a destroyed View in a ViewContainer!");var n=e;return function(e,t,n,r){var i=t.viewContainer._embeddedViews;null!==n&&void 0!==n||(n=i.length),r.viewContainerParent=e,wt(i,n,r),function(e,t){var n=He(t);if(n&&n!==e&&!(16&t.state)){t.state|=16;var r=n.template._projectedViews;r||(r=n.template._projectedViews=[]),r.push(t),function(e,n){if(!(4&n.flags)){t.parent.def.nodeFlags|=4,n.flags|=4;for(var r=n.parent;r;)r.childFlags|=4,r=r.parent}}(0,t.parentNodeDef)}}(t,r),kl.dirtyParentQueries(r),bt(t,n>0?i[n-1]:null,r)}(this._view,this._data,t,n._view),n.attachToViewContainerRef(this),e},e.prototype.move=function(e,t){if(e.destroyed)throw new Error("Cannot move a destroyed View in a ViewContainer!");var n=this._embeddedViews.indexOf(e._view);return function(e,t,r){var i=e.viewContainer._embeddedViews,o=i[n];xt(i,n),null==r&&(r=i.length),wt(i,r,o),kl.dirtyParentQueries(o),_t(o),bt(e,r>0?i[r-1]:null,o)}(this._data,0,t),e},e.prototype.indexOf=function(e){return this._embeddedViews.indexOf(e._view)},e.prototype.remove=function(e){var t=vt(this._data,e);t&&kl.destroyView(t)},e.prototype.detach=function(e){var t=vt(this._data,e);return t?new Ul(t):null},e}(),Ul=function(){function e(e){this._view=e,this._viewContainerRef=null,this._appRef=null}return Object.defineProperty(e.prototype,"rootNodes",{get:function(){return function(e){var t=[];return Je(e,0,void 0,void 0,t),t}(this._view)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"context",{get:function(){return this._view.context},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"destroyed",{get:function(){return 0!=(128&this._view.state)},enumerable:!0,configurable:!0}),e.prototype.markForCheck=function(){Ve(this._view)},e.prototype.detach=function(){this._view.state&=-5},e.prototype.detectChanges=function(){var e=this._view.root.rendererFactory;e.begin&&e.begin();try{kl.checkAndUpdateView(this._view)}finally{e.end&&e.end()}},e.prototype.checkNoChanges=function(){kl.checkNoChangesView(this._view)},e.prototype.reattach=function(){this._view.state|=4},e.prototype.onDestroy=function(e){this._view.disposables||(this._view.disposables=[]),this._view.disposables.push(e)},e.prototype.destroy=function(){this._appRef?this._appRef.detachView(this):this._viewContainerRef&&this._viewContainerRef.detach(this._viewContainerRef.indexOf(this)),kl.destroyView(this._view)},e.prototype.detachFromAppRef=function(){this._appRef=null,_t(this._view),kl.dirtyParentQueries(this._view)},e.prototype.attachToAppRef=function(e){if(this._viewContainerRef)throw new Error("This view is already attached to a ViewContainer!");this._appRef=e},e.prototype.attachToViewContainerRef=function(e){if(this._appRef)throw new Error("This view is already attached directly to the ApplicationRef!");this._viewContainerRef=e},e}(),Gl=function(e){function t(t,n){var r=e.call(this)||this;return r._parentView=t,r._def=n,r}return Object(Tr.__extends)(t,e),t.prototype.createEmbeddedView=function(e){return new Ul(kl.createEmbeddedView(this._parentView,this._def,this._def.element.template,e))},Object.defineProperty(t.prototype,"elementRef",{get:function(){return new Bo(Oe(this._parentView,this._def.nodeIndex).renderElement)},enumerable:!0,configurable:!0}),t}($o),Kl=function(){function e(e,t){this.view=e,this.elDef=t}return e.prototype.get=function(e,t){return void 0===t&&(t=yi.THROW_IF_NOT_FOUND),kl.resolveDep(this.view,this.elDef,!!this.elDef&&0!=(33554432&this.elDef.flags),{flags:0,token:e,tokenKey:Pe(e)},t)},e}(),$l=function(){function e(e){this.delegate=e}return e.prototype.selectRootElement=function(e){return this.delegate.selectRootElement(e)},e.prototype.createElement=function(e,t){var n=it(t),r=this.delegate.createElement(n[1],n[0]);return e&&this.delegate.appendChild(e,r),r},e.prototype.createViewRoot=function(e){return e},e.prototype.createTemplateAnchor=function(e){var t=this.delegate.createComment("");return e&&this.delegate.appendChild(e,t),t},e.prototype.createText=function(e,t){var n=this.delegate.createText(t);return e&&this.delegate.appendChild(e,n),n},e.prototype.projectNodes=function(e,t){for(var n=0;n<t.length;n++)this.delegate.appendChild(e,t[n])},e.prototype.attachViewAfter=function(e,t){for(var n=this.delegate.parentNode(e),r=this.delegate.nextSibling(e),i=0;i<t.length;i++)this.delegate.insertBefore(n,t[i],r)},e.prototype.detachView=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=this.delegate.parentNode(n);this.delegate.removeChild(r,n)}},e.prototype.destroyView=function(e,t){for(var n=0;n<t.length;n++)this.delegate.destroyNode(t[n])},e.prototype.listen=function(e,t,n){return this.delegate.listen(e,t,n)},e.prototype.listenGlobal=function(e,t,n){return this.delegate.listen(e,t,n)},e.prototype.setElementProperty=function(e,t,n){this.delegate.setProperty(e,t,n)},e.prototype.setElementAttribute=function(e,t,n){var r=it(t),i=r[0],o=r[1];null!=n?this.delegate.setAttribute(e,o,n,i):this.delegate.removeAttribute(e,o,i)},e.prototype.setBindingDebugInfo=function(e,t,n){},e.prototype.setElementClass=function(e,t,n){n?this.delegate.addClass(e,t):this.delegate.removeClass(e,t)},e.prototype.setElementStyle=function(e,t,n){null!=n?this.delegate.setStyle(e,t,n):this.delegate.removeStyle(e,t)},e.prototype.invokeElementMethod=function(e,t,n){e[t].apply(e,n)},e.prototype.setText=function(e,t){this.delegate.setValue(e,t)},e.prototype.animate=function(){throw new Error("Renderer.animate is no longer supported!")},e}(),Zl=function(){function e(e,t,n,r){this._moduleType=e,this._parent=t,this._bootstrapComponents=n,this._def=r,this._destroyListeners=[],this._destroyed=!1,function(e){for(var t=e._def,n=e._providers=new Array(t.providers.length),r=0;r<t.providers.length;r++){var i=t.providers[r];4096&i.flags||(n[r]=yt(e,i))}}(this)}return e.prototype.get=function(e,t){return void 0===t&&(t=yi.THROW_IF_NOT_FOUND),gt(this,{token:e,tokenKey:Pe(e),flags:0},t)},Object.defineProperty(e.prototype,"instance",{get:function(){return this.get(this._moduleType)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"componentFactoryResolver",{get:function(){return this.get(co)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"injector",{get:function(){return this},enumerable:!0,configurable:!0}),e.prototype.destroy=function(){if(this._destroyed)throw new Error("The ng module "+d(this.instance.constructor)+" has already been destroyed.");this._destroyed=!0,function(e,t){for(var n=e._def,r=0;r<n.providers.length;r++)if(131072&n.providers[r].flags){var i=e._providers[r];i&&i!==jl&&i.ngOnDestroy()}}(this),this._destroyListeners.forEach(function(e){return e()})},e.prototype.onDestroy=function(e){this._destroyListeners.push(e)},e}(),Ql=Pe(Lo),Yl=Pe(zo),Xl=Pe(Bo),Jl=Pe(Zo),ea=Pe($o),ta=Pe(Qo),na=Pe(yi),ra={},ia=function(){var e={CreateViewNodes:0,CheckNoChanges:1,CheckNoChangesProjectedViews:2,CheckAndUpdate:3,CheckAndUpdateProjectedViews:4,Destroy:5};return e[e.CreateViewNodes]="CreateViewNodes",e[e.CheckNoChanges]="CheckNoChanges",e[e.CheckNoChangesProjectedViews]="CheckNoChangesProjectedViews",e[e.CheckAndUpdate]="CheckAndUpdate",e[e.CheckAndUpdateProjectedViews]="CheckAndUpdateProjectedViews",e[e.Destroy]="Destroy",e}(),oa=!1,la=new Map,aa=new Map,sa=function(){var e={create:0,detectChanges:1,checkNoChanges:2,destroy:3,handleEvent:4};return e[e.create]="create",e[e.detectChanges]="detectChanges",e[e.checkNoChanges]="checkNoChanges",e[e.destroy]="destroy",e[e.handleEvent]="handleEvent",e}(),ua=/([A-Z])/g,ca=function(){function e(e,t){this.view=e,this.nodeIndex=t,null==t&&(this.nodeIndex=t=0),this.nodeDef=e.def.nodes[t];for(var n=this.nodeDef,r=e;n&&0==(1&n.flags);)n=n.parent;if(!n)for(;!n&&r;)n=We(r),r=r.parent;this.elDef=n,this.elView=r}return Object.defineProperty(e.prototype,"elOrCompView",{get:function(){return Oe(this.elView,this.elDef.nodeIndex).componentView||this.view},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"injector",{get:function(){return kt(this.elView,this.elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"component",{get:function(){return this.elOrCompView.component},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"context",{get:function(){return this.elOrCompView.context},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"providerTokens",{get:function(){var e=[];if(this.elDef)for(var t=this.elDef.nodeIndex+1;t<=this.elDef.nodeIndex+this.elDef.childCount;t++){var n=this.elView.def.nodes[t];20224&n.flags&&e.push(n.provider.token),t+=n.childCount}return e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"references",{get:function(){var e={};if(this.elDef){Xn(this.elView,this.elDef,e);for(var t=this.elDef.nodeIndex+1;t<=this.elDef.nodeIndex+this.elDef.childCount;t++){var n=this.elView.def.nodes[t];20224&n.flags&&Xn(this.elView,n,e),t+=n.childCount}}return e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"componentRenderElement",{get:function(){var e=function(e){for(;e&&!Ge(e);)e=e.parent;return e.parent?Oe(e.parent,We(e).nodeIndex):null}(this.elOrCompView);return e?e.renderElement:void 0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"renderNode",{get:function(){return 2&this.nodeDef.flags?qe(this.view,this.nodeDef):qe(this.elView,this.elDef)},enumerable:!0,configurable:!0}),e.prototype.logError=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r,i;2&this.nodeDef.flags?(r=this.view.def,i=this.nodeDef.nodeIndex):(r=this.elView.def,i=this.elDef.nodeIndex);var o=function(e,t){for(var n=-1,r=0;r<=t;r++)3&e.nodes[r].flags&&n++;return n}(r,i),l=-1;r.factory(function(){return++l===o?(n=e.error).bind.apply(n,[e].concat(t)):Dl;var n}),l<o&&(e.error("Illegal state: the ViewDefinitionFactory did not call the logger!"),e.error.apply(e,t))},e}(),da=function(){function e(e){this.delegate=e}return e.prototype.createRenderer=function(e,t){return new pa(this.delegate.createRenderer(e,t))},e.prototype.begin=function(){this.delegate.begin&&this.delegate.begin()},e.prototype.end=function(){this.delegate.end&&this.delegate.end()},e.prototype.whenRenderingDone=function(){return this.delegate.whenRenderingDone?this.delegate.whenRenderingDone():Promise.resolve(null)},e}(),pa=function(){function e(e){this.delegate=e}return Object.defineProperty(e.prototype,"data",{get:function(){return this.delegate.data},enumerable:!0,configurable:!0}),e.prototype.destroyNode=function(e){!function(e){tl.delete(e.nativeNode)}(he(e)),this.delegate.destroyNode&&this.delegate.destroyNode(e)},e.prototype.destroy=function(){this.delegate.destroy()},e.prototype.createElement=function(e,t){var n=this.delegate.createElement(e,t),r=er();if(r){var i=new el(n,null,r);i.name=e,me(i)}return n},e.prototype.createComment=function(e){var t=this.delegate.createComment(e),n=er();return n&&me(new Jo(t,null,n)),t},e.prototype.createText=function(e){var t=this.delegate.createText(e),n=er();return n&&me(new Jo(t,null,n)),t},e.prototype.appendChild=function(e,t){var n=he(e),r=he(t);n&&r&&n instanceof el&&n.addChild(r),this.delegate.appendChild(e,t)},e.prototype.insertBefore=function(e,t,n){var r=he(e),i=he(t),o=he(n);r&&i&&r instanceof el&&r.insertBefore(o,i),this.delegate.insertBefore(e,t,n)},e.prototype.removeChild=function(e,t){var n=he(e),r=he(t);n&&r&&n instanceof el&&n.removeChild(r),this.delegate.removeChild(e,t)},e.prototype.selectRootElement=function(e){var t=this.delegate.selectRootElement(e),n=er();return n&&me(new el(t,null,n)),t},e.prototype.setAttribute=function(e,t,n,r){var i=he(e);i&&i instanceof el&&(i.attributes[r?r+":"+t:t]=n),this.delegate.setAttribute(e,t,n,r)},e.prototype.removeAttribute=function(e,t,n){var r=he(e);r&&r instanceof el&&(r.attributes[n?n+":"+t:t]=null),this.delegate.removeAttribute(e,t,n)},e.prototype.addClass=function(e,t){var n=he(e);n&&n instanceof el&&(n.classes[t]=!0),this.delegate.addClass(e,t)},e.prototype.removeClass=function(e,t){var n=he(e);n&&n instanceof el&&(n.classes[t]=!1),this.delegate.removeClass(e,t)},e.prototype.setStyle=function(e,t,n,r){var i=he(e);i&&i instanceof el&&(i.styles[t]=n),this.delegate.setStyle(e,t,n,r)},e.prototype.removeStyle=function(e,t,n){var r=he(e);r&&r instanceof el&&(r.styles[t]=null),this.delegate.removeStyle(e,t,n)},e.prototype.setProperty=function(e,t,n){var r=he(e);r&&r instanceof el&&(r.properties[t]=n),this.delegate.setProperty(e,t,n)},e.prototype.listen=function(e,t,n){if("string"!=typeof e){var r=he(e);r&&r.listeners.push(new function(e,t){this.name=e,this.callback=t}(t,n))}return this.delegate.listen(e,t,n)},e.prototype.parentNode=function(e){return this.delegate.parentNode(e)},e.prototype.nextSibling=function(e){return this.delegate.nextSibling(e)},e.prototype.setValue=function(e,t){return this.delegate.setValue(e,t)},e}(),fa=function(e){function t(t,n,r){var i=e.call(this)||this;return i.moduleType=t,i._bootstrapComponents=n,i._ngModuleDefFactory=r,i}return Object(Tr.__extends)(t,e),t.prototype.create=function(e){kn();var t=Xe(this._ngModuleDefFactory);return kl.createNgModuleRef(this.moduleType,e||yi.NULL,this._bootstrapComponents,t)},t}(mo),ha="*"}.call(t,n("fRUx"))},LaOa:function(e,t,n){"use strict";t.a=function(e,t){return function(n){return n.lift(new o(e,t))}};var r=n("6Xbx"),i=n("E9/g"),o=function(){function e(e,t){this.predicate=e,this.thisArg=t}return e.prototype.call=function(e,t){return t.subscribe(new l(e,this.predicate,this.thisArg))},e}(),l=function(e){function t(t,n,r){e.call(this,t),this.predicate=n,this.thisArg=r,this.count=0}return Object(r.__extends)(t,e),t.prototype._next=function(e){var t;try{t=this.predicate.call(this.thisArg,e,this.count++)}catch(e){return void this.destination.error(e)}t&&this.destination.next(e)},t}(i.a)},Lcie:function(e,t){e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e}},MwgA:function(e,t){e.exports=function(){throw new Error("define cannot be used indirect")}},NGRF:function(e,t,n){"use strict";t.a=function(e){return null!=e&&"object"==typeof e}},NePw:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r={e:{}}},Oryw:function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r=n("6Xbx"),i=n("AP4T"),o=n("8Ut3"),l=n("Ecq+"),a=n("3iOE"),s=function(e){function t(t,n){e.call(this),this.array=t,this.scheduler=n,n||1!==t.length||(this._isScalar=!0,this.value=t[0])}return Object(r.__extends)(t,e),t.create=function(e,n){return new t(e,n)},t.of=function(){for(var e=[],n=0;n<arguments.length;n++)e[n-0]=arguments[n];var r=e[e.length-1];Object(a.a)(r)?e.pop():r=null;var i=e.length;return i>1?new t(e,r):1===i?new o.a(e[0],r):new l.a(r)},t.dispatch=function(e){var t=e.array,n=e.index,r=e.subscriber;n>=e.count?r.complete():(r.next(t[n]),r.closed||(e.index=n+1,this.schedule(e)))},t.prototype._subscribe=function(e){var n=this.array,r=n.length,i=this.scheduler;if(i)return i.schedule(t.dispatch,0,{array:n,index:0,count:r,subscriber:e});for(var o=0;o<r&&!e.closed;o++)e.next(n[o]);e.complete()},t}(i.a)},P0cP:function(e,t,n){"use strict";var r=n("6Xbx").__decorate;Object.defineProperty(t,"__esModule",{value:!0});var i=n("LMZF"),o=function(){function e(){}return e.prototype.equals=function(e,t,n){return n?this.resolveFieldData(e,n)===this.resolveFieldData(t,n):this.equalsByValue(e,t)},e.prototype.equalsByValue=function(e,t){if(null==e&&null==t)return!0;if(null==e||null==t)return!1;if(e==t)return delete e._$visited,!0;if("object"==typeof e&&"object"==typeof t){e._$visited=!0;for(var n in e)if("_$visited"!==n){if(e.hasOwnProperty(n)!==t.hasOwnProperty(n))return!1;switch(typeof e[n]){case"object":if(e[n]&&e[n]._$visited||!this.equals(e[n],t[n]))return!1;break;case"function":if(void 0===t[n]||"compare"!=n&&e[n].toString()!=t[n].toString())return!1;break;default:if(e[n]!=t[n])return!1}}for(var n in t)if(void 0===e[n])return!1;return delete e._$visited,!0}return!1},e.prototype.resolveFieldData=function(e,t){if(e&&t){if(-1==t.indexOf("."))return e[t];for(var n=t.split("."),r=e,i=0,o=n.length;i<o;++i){if(null==r)return null;r=r[n[i]]}return r}return null},e.prototype.filter=function(e,t,n){var r=[];if(e)for(var i=0,o=e;i<o.length;i++)for(var l=o[i],a=0,s=t;a<s.length;a++){var u=s[a];if(String(this.resolveFieldData(l,u)).toLowerCase().indexOf(n.toLowerCase())>-1){r.push(l);break}}return r},e.prototype.reorderArray=function(e,t,n){var r;if(e&&t!==n){if(n>=e.length)for(r=n-e.length;1+r--;)e.push(void 0);e.splice(n,0,e.splice(t,1)[0])}},e.prototype.generateSelectItems=function(e,t){var n;if(e&&e.length){n=[];for(var r=0,i=e;r<i.length;r++){var o=i[r];n.push({label:this.resolveFieldData(o,t),value:o})}}return n},e}();o=r([i.Injectable()],o),t.ObjectUtils=o},P6IN:function(e,t,n){var r=n("tose").f,i=n("rMsi"),o=n("3r0D")("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},PAZ8:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("AP4T"),i=function(){function e(e,t,n){this.kind=e,this.value=t,this.error=n,this.hasValue="N"===e}return e.prototype.observe=function(e){switch(this.kind){case"N":return e.next&&e.next(this.value);case"E":return e.error&&e.error(this.error);case"C":return e.complete&&e.complete()}},e.prototype.do=function(e,t,n){switch(this.kind){case"N":return e&&e(this.value);case"E":return t&&t(this.error);case"C":return n&&n()}},e.prototype.accept=function(e,t,n){return e&&"function"==typeof e.next?this.observe(e):this.do(e,t,n)},e.prototype.toObservable=function(){switch(this.kind){case"N":return r.a.of(this.value);case"E":return r.a.throw(this.error);case"C":return r.a.empty()}throw new Error("unexpected notification kind value")},e.createNext=function(t){return void 0!==t?new e("N",t):e.undefinedValueNotification},e.createError=function(t){return new e("E",void 0,t)},e.createComplete=function(){return e.completeNotification},e.completeNotification=new e("C"),e.undefinedValueNotification=new e("N",void 0),e}()},"PR+T":function(e,t,n){"use strict";t.a=function(){}},Ps07:function(e,t,n){"use strict";var r=n("3LDD"),i=n("Y5fy");e.exports=n("cpZ/")("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return r.def(i(this,"Set"),e=0===e?0:e,e)}},r)},QZhw:function(e,t,n){"use strict";var r,i=n("BCYq")(0),o=n("lfBE"),l=n("xI8H"),a=n("rIdM"),s=n("XRS9"),u=n("JXkd"),c=n("umMR"),d=n("Y5fy"),p=l.getWeak,f=Object.isExtensible,h=s.ufstore,m={},g=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},y={get:function(e){if(u(e)){var t=p(e);return!0===t?h(d(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return s.def(d(this,"WeakMap"),e,t)}},v=e.exports=n("cpZ/")("WeakMap",g,y,s,!0,!0);c(function(){return 7!=(new v).set((Object.freeze||Object)(m),7).get(m)})&&(a((r=s.getConstructor(g,"WeakMap")).prototype,y),l.NEED=!0,i(["delete","has","get","set"],function(e){var t=v.prototype,n=t[e];o(t,e,function(t,i){if(u(t)&&!f(t)){this._f||(this._f=new r);var o=this._f[e](t,i);return"set"==e?this:o}return n.call(this,t,i)})}))},QhpF:function(e,t,n){"use strict";var r=n("6Xbx").__decorate,i=n("6Xbx").__metadata,o=n("6Xbx").__param;Object.defineProperty(t,"__esModule",{value:!0});var l=n("LMZF"),a=n("LMZF"),s=n("Un6q"),u=n("/zAi"),c=n("/zAi"),d=(n("H0Ur"),function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.template,{$implicit:this.node})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}());r([l.Input(),i("design:type",Object)],d.prototype,"node",void 0),r([l.Input(),i("design:type",l.TemplateRef)],d.prototype,"template",void 0),d=r([l.Component({selector:"p-treeNodeTemplateLoader",template:""})],d),t.TreeNodeTemplateLoader=d;var p=m=function(){function e(e){this.tree=e}return e.prototype.ngOnInit=function(){this.node.parent=this.parentNode},e.prototype.getIcon=function(){var e;return e=this.node.icon?this.node.icon:this.node.expanded&&this.node.children&&this.node.children.length?this.node.expandedIcon:this.node.collapsedIcon,m.ICON_CLASS+" "+e},e.prototype.isLeaf=function(){return 0!=this.node.leaf&&!(this.node.children&&this.node.children.length)},e.prototype.toggle=function(e){this.node.expanded?this.tree.onNodeCollapse.emit({originalEvent:e,node:this.node}):this.tree.onNodeExpand.emit({originalEvent:e,node:this.node}),this.node.expanded=!this.node.expanded},e.prototype.onNodeClick=function(e){this.tree.onNodeClick(e,this.node)},e.prototype.onNodeTouchEnd=function(){this.tree.onNodeTouchEnd()},e.prototype.onNodeRightClick=function(e){this.tree.onNodeRightClick(e,this.node)},e.prototype.isSelected=function(){return this.tree.isSelected(this.node)},e.prototype.onDropPoint=function(e,t){e.preventDefault();var n=this.tree.dragNode,r=this.tree.dragNodeIndex,i=this.tree.dragNodeTree!==this.tree||1===t||r!==this.index-1;if(this.tree.allowDrop(n,this.node,this.tree.dragNodeScope)&&i){var o=this.node.parent?this.node.parent.children:this.tree.value;this.tree.dragNodeSubNodes.splice(r,1);var l=this.index;t<0?o.splice(l=this.tree.dragNodeSubNodes===o?this.tree.dragNodeIndex>this.index?this.index:this.index-1:this.index,0,n):(l=o.length,o.push(n)),this.tree.dragDropService.stopDrag({node:n,subNodes:this.node.parent?this.node.parent.children:this.tree.value,index:r}),this.tree.onNodeDrop.emit({originalEvent:e,dragNode:n,dropNode:this.node,dropIndex:l})}this.draghoverPrev=!1,this.draghoverNext=!1},e.prototype.onDropPointDragOver=function(e){e.dataTransfer.dropEffect="move",e.preventDefault()},e.prototype.onDropPointDragEnter=function(e,t){this.tree.allowDrop(this.tree.dragNode,this.node,this.tree.dragNodeScope)&&(t<0?this.draghoverPrev=!0:this.draghoverNext=!0)},e.prototype.onDropPointDragLeave=function(e){this.draghoverPrev=!1,this.draghoverNext=!1},e.prototype.onDragStart=function(e){this.tree.draggableNodes&&!1!==this.node.draggable?(e.dataTransfer.setData("text","data"),this.tree.dragDropService.startDrag({tree:this,node:this.node,subNodes:this.node.parent?this.node.parent.children:this.tree.value,index:this.index,scope:this.tree.draggableScope})):e.preventDefault()},e.prototype.onDragStop=function(e){this.tree.dragDropService.stopDrag({node:this.node,subNodes:this.node.parent?this.node.parent.children:this.tree.value,index:this.index})},e.prototype.onDropNodeDragOver=function(e){e.dataTransfer.dropEffect="move",this.tree.droppableNodes&&(e.preventDefault(),e.stopPropagation())},e.prototype.onDropNode=function(e){if(this.tree.droppableNodes&&!1!==this.node.droppable){e.preventDefault(),e.stopPropagation();var t=this.tree.dragNode;this.tree.allowDrop(t,this.node,this.tree.dragNodeScope)&&(this.tree.dragNodeSubNodes.splice(this.tree.dragNodeIndex,1),this.node.children?this.node.children.push(t):this.node.children=[t],this.tree.dragDropService.stopDrag({node:t,subNodes:this.node.parent?this.node.parent.children:this.tree.value,index:this.tree.dragNodeIndex}),this.tree.onNodeDrop.emit({originalEvent:e,dragNode:t,dropNode:this.node,index:this.index}))}this.draghoverNode=!1},e.prototype.onDropNodeDragEnter=function(e){this.tree.droppableNodes&&!1!==this.node.droppable&&this.tree.allowDrop(this.tree.dragNode,this.node,this.tree.dragNodeScope)&&(this.draghoverNode=!0)},e.prototype.onDropNodeDragLeave=function(e){if(this.tree.droppableNodes){var t=e.currentTarget.getBoundingClientRect();(e.x>t.left+t.width||e.x<t.left||e.y>=Math.floor(t.top+t.height)||e.y<t.top)&&(this.draghoverNode=!1)}},e}();p.ICON_CLASS="ui-treenode-icon fa fa-fw",r([l.Input(),i("design:type",Object)],p.prototype,"node",void 0),r([l.Input(),i("design:type",Object)],p.prototype,"parentNode",void 0),r([l.Input(),i("design:type",Boolean)],p.prototype,"root",void 0),r([l.Input(),i("design:type",Number)],p.prototype,"index",void 0),r([l.Input(),i("design:type",Boolean)],p.prototype,"firstChild",void 0),r([l.Input(),i("design:type",Boolean)],p.prototype,"lastChild",void 0),p=m=r([l.Component({selector:"p-treeNode",template:'\n        <ng-template [ngIf]="node">\n            <li *ngIf="tree.droppableNodes" class="ui-treenode-droppoint" [ngClass]="{\'ui-treenode-droppoint-active ui-state-highlight\':draghoverPrev}"\n            (drop)="onDropPoint($event,-1)" (dragover)="onDropPointDragOver($event)" (dragenter)="onDropPointDragEnter($event,-1)" (dragleave)="onDropPointDragLeave($event)"></li>\n            <li *ngIf="!tree.horizontal" [ngClass]="[\'ui-treenode\',node.styleClass||\'\', isLeaf() ? \'ui-treenode-leaf\': \'\']">\n                <div class="ui-treenode-content" (click)="onNodeClick($event)" (contextmenu)="onNodeRightClick($event)" (touchend)="onNodeTouchEnd()"\n                    (drop)="onDropNode($event)" (dragover)="onDropNodeDragOver($event)" (dragenter)="onDropNodeDragEnter($event)" (dragleave)="onDropNodeDragLeave($event)"\n                    [ngClass]="{\'ui-treenode-selectable\':tree.selectionMode && node.selectable !== false,\'ui-treenode-dragover\':draghoverNode, \'ui-treenode-content-selected\':isSelected()}" [draggable]="tree.draggableNodes" (dragstart)="onDragStart($event)" (dragend)="onDragStop($event)">\n                    <span class="ui-tree-toggler  fa fa-fw" [ngClass]="{\'fa-caret-right\':!node.expanded,\'fa-caret-down\':node.expanded}"\n                            (click)="toggle($event)"></span\n                    ><div class="ui-chkbox" *ngIf="tree.selectionMode == \'checkbox\'"><div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default">\n                        <span class="ui-chkbox-icon ui-clickable fa" \n                            [ngClass]="{\'fa-check\':isSelected(),\'fa-minus\':node.partialSelected}"></span></div></div\n                    ><span [class]="getIcon()" *ngIf="node.icon||node.expandedIcon||node.collapsedIcon"></span\n                    ><span class="ui-treenode-label ui-corner-all" \n                        [ngClass]="{\'ui-state-highlight\':isSelected()}">\n                            <span *ngIf="!tree.getTemplateForNode(node)">{{node.label}}</span>\n                            <span *ngIf="tree.getTemplateForNode(node)">\n                                <p-treeNodeTemplateLoader [node]="node" [template]="tree.getTemplateForNode(node)"></p-treeNodeTemplateLoader>\n                            </span>\n                    </span>\n                </div>\n                <ul class="ui-treenode-children" style="display: none;" *ngIf="node.children && node.expanded" [style.display]="node.expanded ? \'block\' : \'none\'">\n                    <p-treeNode *ngFor="let childNode of node.children;let firstChild=first;let lastChild=last; let index=index" [node]="childNode" [parentNode]="node"\n                        [firstChild]="firstChild" [lastChild]="lastChild" [index]="index"></p-treeNode>\n                </ul>\n            </li>\n            <li *ngIf="tree.droppableNodes&&lastChild" class="ui-treenode-droppoint" [ngClass]="{\'ui-treenode-droppoint-active ui-state-highlight\':draghoverNext}"\n            (drop)="onDropPoint($event,1)" (dragover)="onDropPointDragOver($event)" (dragenter)="onDropPointDragEnter($event,1)" (dragleave)="onDropPointDragLeave($event)"></li>\n            <table *ngIf="tree.horizontal" [class]="node.styleClass">\n                <tbody>\n                    <tr>\n                        <td class="ui-treenode-connector" *ngIf="!root">\n                            <table class="ui-treenode-connector-table">\n                                <tbody>\n                                    <tr>\n                                        <td [ngClass]="{\'ui-treenode-connector-line\':!firstChild}"></td>\n                                    </tr>\n                                    <tr>\n                                        <td [ngClass]="{\'ui-treenode-connector-line\':!lastChild}"></td>\n                                    </tr>\n                                </tbody>\n                            </table>\n                        </td>\n                        <td class="ui-treenode" [ngClass]="{\'ui-treenode-collapsed\':!node.expanded}">\n                            <div class="ui-treenode-content ui-state-default ui-corner-all" \n                                [ngClass]="{\'ui-treenode-selectable\':tree.selectionMode,\'ui-state-highlight\':isSelected()}" (click)="onNodeClick($event)" (contextmenu)="onNodeRightClick($event)"\n                                (touchend)="onNodeTouchEnd()">\n                                <span class="ui-tree-toggler fa fa-fw" [ngClass]="{\'fa-plus\':!node.expanded,\'fa-minus\':node.expanded}" *ngIf="!isLeaf()"\n                                        (click)="toggle($event)"></span\n                                ><span [class]="getIcon()" *ngIf="node.icon||node.expandedIcon||node.collapsedIcon"></span\n                                ><span class="ui-treenode-label ui-corner-all">\n                                        <span *ngIf="!tree.getTemplateForNode(node)">{{node.label}}</span>\n                                        <span *ngIf="tree.getTemplateForNode(node)">\n                                            <p-treeNodeTemplateLoader [node]="node" [template]="tree.getTemplateForNode(node)"></p-treeNodeTemplateLoader>\n                                        </span>\n                                </span>\n                            </div>\n                        </td>\n                        <td class="ui-treenode-children-container" *ngIf="node.children && node.expanded" [style.display]="node.expanded ? \'table-cell\' : \'none\'">\n                            <div class="ui-treenode-children">\n                                <p-treeNode *ngFor="let childNode of node.children;let firstChild=first;let lastChild=last;" [node]="childNode" \n                                        [firstChild]="firstChild" [lastChild]="lastChild"></p-treeNode>\n                            </div>\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </ng-template>\n    '}),o(0,l.Inject(l.forwardRef(function(){return f})))],p),t.UITreeNode=p;var f=function(){function e(e){this.dragDropService=e,this.selectionChange=new l.EventEmitter,this.onNodeSelect=new l.EventEmitter,this.onNodeUnselect=new l.EventEmitter,this.onNodeExpand=new l.EventEmitter,this.onNodeCollapse=new l.EventEmitter,this.onNodeContextMenuSelect=new l.EventEmitter,this.onNodeDrop=new l.EventEmitter,this.layout="vertical",this.metaKeySelection=!0,this.propagateSelectionUp=!0,this.propagateSelectionDown=!0,this.loadingIcon="fa-circle-o-notch"}return e.prototype.ngOnInit=function(){var e=this;this.droppableNodes&&(this.dragStartSubscription=this.dragDropService.dragStart$.subscribe(function(t){e.dragNodeTree=t.tree,e.dragNode=t.node,e.dragNodeSubNodes=t.subNodes,e.dragNodeIndex=t.index,e.dragNodeScope=t.scope}),this.dragStopSubscription=this.dragDropService.dragStop$.subscribe(function(t){e.dragNodeTree=null,e.dragNode=null,e.dragNodeSubNodes=null,e.dragNodeIndex=null,e.dragNodeScope=null,e.dragHover=!1}))},Object.defineProperty(e.prototype,"horizontal",{get:function(){return"horizontal"==this.layout},enumerable:!0,configurable:!0}),e.prototype.ngAfterContentInit=function(){var e=this;this.templates.length&&(this.templateMap={}),this.templates.forEach(function(t){e.templateMap[t.name]=t.template})},e.prototype.onNodeClick=function(e,t){var n=e.target;if(!n.className||0!==n.className.indexOf("ui-tree-toggler")){if(this.selectionMode){if(!1===t.selectable)return;var r=this.findIndexInSelection(t),i=r>=0;if(this.isCheckboxSelectionMode())i?(this.propagateSelectionDown?this.propagateDown(t,!1):this.selection=this.selection.filter(function(e,t){return t!=r}),this.propagateSelectionUp&&t.parent&&this.propagateUp(t.parent,!1),this.selectionChange.emit(this.selection),this.onNodeUnselect.emit({originalEvent:e,node:t})):(this.propagateSelectionDown?this.propagateDown(t,!0):this.selection=(this.selection||[]).concat([t]),this.propagateSelectionUp&&t.parent&&this.propagateUp(t.parent,!0),this.selectionChange.emit(this.selection),this.onNodeSelect.emit({originalEvent:e,node:t}));else if(!this.nodeTouched&&this.metaKeySelection){var o=e.metaKey||e.ctrlKey;i&&o?(this.isSingleSelectionMode()?this.selectionChange.emit(null):(this.selection=this.selection.filter(function(e,t){return t!=r}),this.selectionChange.emit(this.selection)),this.onNodeUnselect.emit({originalEvent:e,node:t})):(this.isSingleSelectionMode()?this.selectionChange.emit(t):this.isMultipleSelectionMode()&&(this.selection=o?this.selection||[]:[],this.selection=this.selection.concat([t]),this.selectionChange.emit(this.selection)),this.onNodeSelect.emit({originalEvent:e,node:t}))}else this.isSingleSelectionMode()?i?(this.selection=null,this.onNodeUnselect.emit({originalEvent:e,node:t})):(this.selection=t,this.onNodeSelect.emit({originalEvent:e,node:t})):i?(this.selection=this.selection.filter(function(e,t){return t!=r}),this.onNodeUnselect.emit({originalEvent:e,node:t})):(this.selection=(this.selection||[]).concat([t]),this.onNodeSelect.emit({originalEvent:e,node:t})),this.selectionChange.emit(this.selection)}this.nodeTouched=!1}},e.prototype.onNodeTouchEnd=function(){this.nodeTouched=!0},e.prototype.onNodeRightClick=function(e,t){if(this.contextMenu){var n=e.target;if(n.className&&0===n.className.indexOf("ui-tree-toggler"))return;this.findIndexInSelection(t)>=0||(this.isSingleSelectionMode()?this.selectionChange.emit(t):this.selectionChange.emit([t])),this.contextMenu.show(e),this.onNodeContextMenuSelect.emit({originalEvent:e,node:t})}},e.prototype.findIndexInSelection=function(e){var t=-1;if(this.selectionMode&&this.selection)if(this.isSingleSelectionMode())t=this.selection==e?0:-1;else for(var n=0;n<this.selection.length;n++)if(this.selection[n]==e){t=n;break}return t},e.prototype.propagateUp=function(e,t){if(e.children&&e.children.length){for(var n=0,r=!1,i=0,o=e.children;i<o.length;i++){var l=o[i];this.isSelected(l)?n++:l.partialSelected&&(r=!0)}if(t&&n==e.children.length)this.selection=(this.selection||[]).concat([e]),e.partialSelected=!1;else{if(!t){var a=this.findIndexInSelection(e);a>=0&&(this.selection=this.selection.filter(function(e,t){return t!=a}))}e.partialSelected=!!(r||n>0&&n!=e.children.length)}}var s=e.parent;s&&this.propagateUp(s,t)},e.prototype.propagateDown=function(e,t){var n=this.findIndexInSelection(e);if(t&&-1==n?this.selection=(this.selection||[]).concat([e]):!t&&n>-1&&(this.selection=this.selection.filter(function(e,t){return t!=n})),e.partialSelected=!1,e.children&&e.children.length)for(var r=0,i=e.children;r<i.length;r++)this.propagateDown(i[r],t)},e.prototype.isSelected=function(e){return-1!=this.findIndexInSelection(e)},e.prototype.isSingleSelectionMode=function(){return this.selectionMode&&"single"==this.selectionMode},e.prototype.isMultipleSelectionMode=function(){return this.selectionMode&&"multiple"==this.selectionMode},e.prototype.isCheckboxSelectionMode=function(){return this.selectionMode&&"checkbox"==this.selectionMode},e.prototype.getTemplateForNode=function(e){return this.templateMap?e.type?this.templateMap[e.type]:this.templateMap.default:null},e.prototype.onDragOver=function(e){!this.droppableNodes||this.value&&0!==this.value.length||(e.dataTransfer.dropEffect="move",e.preventDefault())},e.prototype.onDrop=function(e){if(this.droppableNodes&&(!this.value||0===this.value.length)){e.preventDefault();var t=this.dragNode;this.allowDrop(t,null,this.dragNodeScope)&&(this.dragNodeSubNodes.splice(this.dragNodeIndex,1),this.value=this.value||[],this.value.push(t),this.dragDropService.stopDrag({node:t}))}},e.prototype.onDragEnter=function(e){this.droppableNodes&&this.allowDrop(this.dragNode,null,this.dragNodeScope)&&(this.dragHover=!0)},e.prototype.onDragLeave=function(e){if(this.droppableNodes){var t=e.currentTarget.getBoundingClientRect();(e.x>t.left+t.width||e.x<t.left||e.y>t.top+t.height||e.y<t.top)&&(this.dragHover=!1)}},e.prototype.allowDrop=function(e,t,n){if(this.isValidDragScope(n)){var r=!0;if(t)if(e===t)r=!1;else for(var i=t.parent;null!=i;){if(i===e){r=!1;break}i=i.parent}return r}return!1},e.prototype.isValidDragScope=function(e){var t=this.droppableScope;if(t){if("string"==typeof t){if("string"==typeof e)return t===e;if(e instanceof Array)return-1!=e.indexOf(t)}else if(t instanceof Array){if("string"==typeof e)return-1!=t.indexOf(e);if(e instanceof Array)for(var n=0,r=t;n<r.length;n++)for(var i=r[n],o=0,l=e;o<l.length;o++)if(i===l[o])return!0}return!1}return!0},e.prototype.ngOnDestroy=function(){this.dragStartSubscription&&this.dragStartSubscription.unsubscribe(),this.dragStopSubscription&&this.dragStopSubscription.unsubscribe()},e}();r([l.Input(),i("design:type",Array)],f.prototype,"value",void 0),r([l.Input(),i("design:type",String)],f.prototype,"selectionMode",void 0),r([l.Input(),i("design:type",Object)],f.prototype,"selection",void 0),r([l.Output(),i("design:type",l.EventEmitter)],f.prototype,"selectionChange",void 0),r([l.Output(),i("design:type",l.EventEmitter)],f.prototype,"onNodeSelect",void 0),r([l.Output(),i("design:type",l.EventEmitter)],f.prototype,"onNodeUnselect",void 0),r([l.Output(),i("design:type",l.EventEmitter)],f.prototype,"onNodeExpand",void 0),r([l.Output(),i("design:type",l.EventEmitter)],f.prototype,"onNodeCollapse",void 0),r([l.Output(),i("design:type",l.EventEmitter)],f.prototype,"onNodeContextMenuSelect",void 0),r([l.Output(),i("design:type",l.EventEmitter)],f.prototype,"onNodeDrop",void 0),r([l.Input(),i("design:type",Object)],f.prototype,"style",void 0),r([l.Input(),i("design:type",String)],f.prototype,"styleClass",void 0),r([l.Input(),i("design:type",Object)],f.prototype,"contextMenu",void 0),r([l.Input(),i("design:type",String)],f.prototype,"layout",void 0),r([l.Input(),i("design:type",Object)],f.prototype,"draggableScope",void 0),r([l.Input(),i("design:type",Object)],f.prototype,"droppableScope",void 0),r([l.Input(),i("design:type",Boolean)],f.prototype,"draggableNodes",void 0),r([l.Input(),i("design:type",Boolean)],f.prototype,"droppableNodes",void 0),r([l.Input(),i("design:type",Boolean)],f.prototype,"metaKeySelection",void 0),r([l.Input(),i("design:type",Boolean)],f.prototype,"propagateSelectionUp",void 0),r([l.Input(),i("design:type",Boolean)],f.prototype,"propagateSelectionDown",void 0),r([l.Input(),i("design:type",Boolean)],f.prototype,"loading",void 0),r([l.Input(),i("design:type",String)],f.prototype,"loadingIcon",void 0),r([l.ContentChildren(c.PrimeTemplate),i("design:type",l.QueryList)],f.prototype,"templates",void 0),f=r([l.Component({selector:"p-tree",template:'\n        <div [ngClass]="{\'ui-tree ui-widget ui-widget-content ui-corner-all\':true,\'ui-tree-selectable\':selectionMode,\'ui-treenode-dragover\':dragHover,\'ui-tree-loading\': loading}" [ngStyle]="style" [class]="styleClass" *ngIf="!horizontal"\n            (drop)="onDrop($event)" (dragover)="onDragOver($event)" (dragenter)="onDragEnter($event)" (dragleave)="onDragLeave($event)">\n            <div class="ui-tree-loading-mask ui-widget-overlay" *ngIf="loading"></div>\n            <div class="ui-tree-loading-content" *ngIf="loading">\n                <i [class]="\'fa fa-spin fa-2x \' + loadingIcon"></i>\n            </div>\n            <ul class="ui-tree-container">\n                <p-treeNode *ngFor="let node of value;let firstChild=first;let lastChild=last; let index=index" [node]="node" \n                [firstChild]="firstChild" [lastChild]="lastChild" [index]="index"></p-treeNode>\n            </ul>\n        </div>\n        <div [ngClass]="{\'ui-tree ui-tree-horizontal ui-widget ui-widget-content ui-corner-all\':true,\'ui-tree-selectable\':selectionMode}"  [ngStyle]="style" [class]="styleClass" *ngIf="horizontal">\n            <div class="ui-tree-loading ui-widget-overlay" *ngIf="loading"></div>\n            <div class="ui-tree-loading-content" *ngIf="loading">\n                <i [class]="\'fa fa-spin fa-2x \' + loadingIcon"></i>\n            </div>\n            <table *ngIf="value&&value[0]">\n                <p-treeNode [node]="value[0]" [root]="true"></p-treeNode>\n            </table>\n        </div>\n    '}),o(0,a.Optional())],f),t.Tree=f;var h=function(){};h=r([l.NgModule({imports:[s.CommonModule],exports:[f,u.SharedModule],declarations:[f,p,d]})],h),t.TreeModule=h;var m},R5c1:function(e,t,n){var r=n("rMsi"),i=n("+GRi"),o=n("vyV2")(!1),l=n("yIWP")("IE_PROTO");e.exports=function(e,t){var n,a=i(e),s=0,u=[];for(n in a)n!=l&&r(a,n)&&u.push(n);for(;t.length>s;)r(a,n=t[s++])&&(~o(u,n)||u.push(n));return u}},RT4T:function(e,t,n){var r=n("Wy9r");e.exports=function(e){return Object(r(e))}},Rs3a:function(e,t,n){"use strict";var r=n("6Xbx").__decorate,i=n("6Xbx").__metadata;Object.defineProperty(t,"__esModule",{value:!0});var o=n("LMZF"),l=n("Un6q"),a=n("0nO6"),s=n("wRXj"),u=function(){function e(){this.pageLinkSize=5,this.onPageChange=new o.EventEmitter,this.alwaysShow=!0,this._totalRecords=0,this._first=0,this._rows=0}return Object.defineProperty(e.prototype,"totalRecords",{get:function(){return this._totalRecords},set:function(e){this._totalRecords=e,this.updatePageLinks()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"first",{get:function(){return this._first},set:function(e){this._first=e,this.updatePageLinks()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rows",{get:function(){return this._rows},set:function(e){this._rows=e,this.updatePageLinks()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rowsPerPageOptions",{get:function(){return this._rowsPerPageOptions},set:function(e){if(this._rowsPerPageOptions=e,this._rowsPerPageOptions){this.rowsPerPageItems=[];for(var t=0,n=this._rowsPerPageOptions;t<n.length;t++){var r=n[t];this.rowsPerPageItems.push({label:String(r),value:r})}}},enumerable:!0,configurable:!0}),e.prototype.isFirstPage=function(){return 0===this.getPage()},e.prototype.isLastPage=function(){return this.getPage()===this.getPageCount()-1},e.prototype.getPageCount=function(){return Math.ceil(this.totalRecords/this.rows)||1},e.prototype.calculatePageLinkBoundaries=function(){var e=this.getPageCount(),t=Math.min(this.pageLinkSize,e),n=Math.max(0,Math.ceil(this.getPage()-t/2)),r=Math.min(e-1,n+t-1),i=this.pageLinkSize-(r-n+1);return n=Math.max(0,n-i),[n,r]},e.prototype.updatePageLinks=function(){this.pageLinks=[];for(var e=this.calculatePageLinkBoundaries(),t=e[1],n=e[0];n<=t;n++)this.pageLinks.push(n+1)},e.prototype.changePage=function(e){var t=this.getPageCount();if(e>=0&&e<t){this.first=this.rows*e;var n={page:e,first:this.first,rows:this.rows,pageCount:t};this.updatePageLinks(),this.onPageChange.emit(n)}},e.prototype.getPage=function(){return Math.floor(this.first/this.rows)},e.prototype.changePageToFirst=function(e){this.isFirstPage()||this.changePage(0),e.preventDefault()},e.prototype.changePageToPrev=function(e){this.changePage(this.getPage()-1),e.preventDefault()},e.prototype.changePageToNext=function(e){this.changePage(this.getPage()+1),e.preventDefault()},e.prototype.changePageToLast=function(e){this.isLastPage()||this.changePage(this.getPageCount()-1),e.preventDefault()},e.prototype.onPageLinkClick=function(e,t){this.changePage(t),e.preventDefault()},e.prototype.onRppChange=function(e){this.changePage(this.getPage())},e}();r([o.Input(),i("design:type",Number)],u.prototype,"pageLinkSize",void 0),r([o.Output(),i("design:type",o.EventEmitter)],u.prototype,"onPageChange",void 0),r([o.Input(),i("design:type",Object)],u.prototype,"style",void 0),r([o.Input(),i("design:type",String)],u.prototype,"styleClass",void 0),r([o.Input(),i("design:type",Boolean)],u.prototype,"alwaysShow",void 0),r([o.Input(),i("design:type",Number),i("design:paramtypes",[Number])],u.prototype,"totalRecords",null),r([o.Input(),i("design:type",Number),i("design:paramtypes",[Number])],u.prototype,"first",null),r([o.Input(),i("design:type",Number),i("design:paramtypes",[Number])],u.prototype,"rows",null),r([o.Input(),i("design:type",Array),i("design:paramtypes",[Array])],u.prototype,"rowsPerPageOptions",null),u=r([o.Component({selector:"p-paginator",template:'\n        <div [class]="styleClass" [ngStyle]="style" [ngClass]="\'ui-paginator ui-widget ui-widget-header ui-unselectable-text\'"\n            *ngIf="alwaysShow ? true : (pageLinks && pageLinks.length > 1)">\n            <a href="#" class="ui-paginator-first ui-paginator-element ui-state-default ui-corner-all"\n                    (click)="changePageToFirst($event)" [ngClass]="{\'ui-state-disabled\':isFirstPage()}" [tabindex]="isFirstPage() ? -1 : null">\n                <span class="fa fa-step-backward"></span>\n            </a>\n            <a href="#" class="ui-paginator-prev ui-paginator-element ui-state-default ui-corner-all"\n                    (click)="changePageToPrev($event)" [ngClass]="{\'ui-state-disabled\':isFirstPage()}" [tabindex]="isFirstPage() ? -1 : null">\n                <span class="fa fa-backward"></span>\n            </a>\n            <span class="ui-paginator-pages">\n                <a href="#" *ngFor="let pageLink of pageLinks" class="ui-paginator-page ui-paginator-element ui-state-default ui-corner-all"\n                    (click)="onPageLinkClick($event, pageLink - 1)" [ngClass]="{\'ui-state-active\': (pageLink-1 == getPage())}">{{pageLink}}</a>\n            </span>\n            <a href="#" class="ui-paginator-next ui-paginator-element ui-state-default ui-corner-all"\n                    (click)="changePageToNext($event)" [ngClass]="{\'ui-state-disabled\':isLastPage()}" [tabindex]="isLastPage() ? -1 : null">\n                <span class="fa fa-forward"></span>\n            </a>\n            <a href="#" class="ui-paginator-last ui-paginator-element ui-state-default ui-corner-all"\n                    (click)="changePageToLast($event)" [ngClass]="{\'ui-state-disabled\':isLastPage()}" [tabindex]="isLastPage() ? -1 : null">\n                <span class="fa fa-step-forward"></span>\n            </a>\n            <p-dropdown [options]="rowsPerPageItems" [(ngModel)]="rows" *ngIf="rowsPerPageOptions" \n                (onChange)="onRppChange($event)" [lazy]="false" [autoWidth]="false"></p-dropdown>\n        </div>\n    '})],u),t.Paginator=u;var c=function(){};c=r([o.NgModule({imports:[l.CommonModule,s.DropdownModule,a.FormsModule],exports:[u,s.DropdownModule,a.FormsModule],declarations:[u]})],c),t.PaginatorModule=c},RyBE:function(e,t,n){"use strict";function r(){return x}function i(){return!!window.history.pushState}function o(e,t){"undefined"!=typeof COMPILED&&COMPILED||((_["\u0275global"].ng=_["\u0275global"].ng||{})[e]=t)}function l(e){return Object(_.getDebugNode)(e)}function a(e){return o(j,l),o(V,Object(w.__assign)({},F,(e||[]).reduce(function(e,t){return e[t.name]=t.token,e},{}))),function(){return l}}function s(e,t,n){for(var r=0;r<t.length;r++){var i=t[r];Array.isArray(i)?s(e,i,n):(i=i.replace(G,e),n.push(i))}return n}function u(e){return function(t){!1===e(t)&&(t.preventDefault(),t.returnValue=!1)}}function c(e,t){if(e.charCodeAt(0)===Y)throw new Error("Found the synthetic "+t+" "+e+'. Please include either "BrowserAnimationsModule" or "NoopAnimationsModule" in your application.')}function d(e){return(e=String(e)).match(ye)||e.match(ve)?e:(Object(_.isDevMode)()&&r().log("WARNING: sanitizing unsafe URL value "+e+" (see http://g.co/ng/security#xss)"),"unsafe:"+e)}function p(e){for(var t={},n=0,r=e.split(",");n<r.length;n++)t[r[n]]=!0;return t}function f(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n={},r=0,i=e;r<i.length;r++){var o=i[r];for(var l in o)o.hasOwnProperty(l)&&(n[l]=!0)}return n}function h(e,t){if(t&&_e.contains(e,t))throw new Error("Failed to sanitize html because the element is clobbered: "+_e.getOuterHTML(e));return t}function m(e){return e.replace(/&/g,"&amp;").replace(Ie,function(e){return"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";"}).replace(Re,function(e){return"&#"+e.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function g(e){_e.attributeMap(e).forEach(function(t,n){"xmlns:ns1"!==n&&0!==n.indexOf("ns1:")||_e.removeAttribute(e,n)});for(var t=0,n=_e.childNodesAsList(e);t<n.length;t++){var r=n[t];_e.isElementNode(r)&&g(r)}}function y(){return new _.ErrorHandler}n.d(t,"a",function(){return qe}),n.d(t,"j",function(){return We}),n.d(t,"h",function(){return M}),n.d(t,"i",function(){return L}),n.d(t,"b",function(){return I}),n.d(t,"d",function(){return z}),n.d(t,"e",function(){return B}),n.d(t,"f",function(){return de}),n.d(t,"g",function(){return pe}),n.d(t,"c",function(){return Ne}),n.d(t,"s",function(){return r}),n.d(t,"l",function(){return Z}),n.d(t,"k",function(){return ue}),n.d(t,"n",function(){return fe}),n.d(t,"o",function(){return ge}),n.d(t,"m",function(){return q}),n.d(t,"p",function(){return W}),n.d(t,"q",function(){return y}),n.d(t,"t",function(){return a}),n.d(t,"r",function(){return Ae});var v,b=n("Un6q"),_=n("LMZF"),w=n("6Xbx"),x=null,C={class:"className",innerHtml:"innerHTML",readonly:"readOnly",tabindex:"tabIndex"},E={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},S={A:"1",B:"2",C:"3",D:"4",E:"5",F:"6",G:"7",H:"8",I:"9",J:"*",K:"+",M:"-",N:".",O:"/","`":"0","\x90":"NumLock"};_["\u0275global"].Node&&(v=_["\u0275global"].Node.prototype.contains||function(e){return!!(16&this.compareDocumentPosition(e))});var O,T,k=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(w.__extends)(t,e),t.prototype.parse=function(e){throw new Error("parse not implemented")},t.makeCurrent=function(){!function(e){x||(x=e)}(new t)},t.prototype.hasProperty=function(e,t){return t in e},t.prototype.setProperty=function(e,t,n){e[t]=n},t.prototype.getProperty=function(e,t){return e[t]},t.prototype.invoke=function(e,t,n){(r=e)[t].apply(r,n);var r},t.prototype.logError=function(e){window.console&&(console.error?console.error(e):console.log(e))},t.prototype.log=function(e){window.console&&window.console.log&&window.console.log(e)},t.prototype.logGroup=function(e){window.console&&window.console.group&&window.console.group(e)},t.prototype.logGroupEnd=function(){window.console&&window.console.groupEnd&&window.console.groupEnd()},Object.defineProperty(t.prototype,"attrToPropMap",{get:function(){return C},enumerable:!0,configurable:!0}),t.prototype.contains=function(e,t){return v.call(e,t)},t.prototype.querySelector=function(e,t){return e.querySelector(t)},t.prototype.querySelectorAll=function(e,t){return e.querySelectorAll(t)},t.prototype.on=function(e,t,n){e.addEventListener(t,n,!1)},t.prototype.onAndCancel=function(e,t,n){return e.addEventListener(t,n,!1),function(){e.removeEventListener(t,n,!1)}},t.prototype.dispatchEvent=function(e,t){e.dispatchEvent(t)},t.prototype.createMouseEvent=function(e){var t=this.getDefaultDocument().createEvent("MouseEvent");return t.initEvent(e,!0,!0),t},t.prototype.createEvent=function(e){var t=this.getDefaultDocument().createEvent("Event");return t.initEvent(e,!0,!0),t},t.prototype.preventDefault=function(e){e.preventDefault(),e.returnValue=!1},t.prototype.isPrevented=function(e){return e.defaultPrevented||null!=e.returnValue&&!e.returnValue},t.prototype.getInnerHTML=function(e){return e.innerHTML},t.prototype.getTemplateContent=function(e){return"content"in e&&this.isTemplateElement(e)?e.content:null},t.prototype.getOuterHTML=function(e){return e.outerHTML},t.prototype.nodeName=function(e){return e.nodeName},t.prototype.nodeValue=function(e){return e.nodeValue},t.prototype.type=function(e){return e.type},t.prototype.content=function(e){return this.hasProperty(e,"content")?e.content:e},t.prototype.firstChild=function(e){return e.firstChild},t.prototype.nextSibling=function(e){return e.nextSibling},t.prototype.parentElement=function(e){return e.parentNode},t.prototype.childNodes=function(e){return e.childNodes},t.prototype.childNodesAsList=function(e){for(var t=e.childNodes,n=new Array(t.length),r=0;r<t.length;r++)n[r]=t[r];return n},t.prototype.clearNodes=function(e){for(;e.firstChild;)e.removeChild(e.firstChild)},t.prototype.appendChild=function(e,t){e.appendChild(t)},t.prototype.removeChild=function(e,t){e.removeChild(t)},t.prototype.replaceChild=function(e,t,n){e.replaceChild(t,n)},t.prototype.remove=function(e){return e.parentNode&&e.parentNode.removeChild(e),e},t.prototype.insertBefore=function(e,t,n){e.insertBefore(n,t)},t.prototype.insertAllBefore=function(e,t,n){n.forEach(function(n){return e.insertBefore(n,t)})},t.prototype.insertAfter=function(e,t,n){e.insertBefore(n,t.nextSibling)},t.prototype.setInnerHTML=function(e,t){e.innerHTML=t},t.prototype.getText=function(e){return e.textContent},t.prototype.setText=function(e,t){e.textContent=t},t.prototype.getValue=function(e){return e.value},t.prototype.setValue=function(e,t){e.value=t},t.prototype.getChecked=function(e){return e.checked},t.prototype.setChecked=function(e,t){e.checked=t},t.prototype.createComment=function(e){return this.getDefaultDocument().createComment(e)},t.prototype.createTemplate=function(e){var t=this.getDefaultDocument().createElement("template");return t.innerHTML=e,t},t.prototype.createElement=function(e,t){return(t=t||this.getDefaultDocument()).createElement(e)},t.prototype.createElementNS=function(e,t,n){return(n=n||this.getDefaultDocument()).createElementNS(e,t)},t.prototype.createTextNode=function(e,t){return(t=t||this.getDefaultDocument()).createTextNode(e)},t.prototype.createScriptTag=function(e,t,n){var r=(n=n||this.getDefaultDocument()).createElement("SCRIPT");return r.setAttribute(e,t),r},t.prototype.createStyleElement=function(e,t){var n=(t=t||this.getDefaultDocument()).createElement("style");return this.appendChild(n,this.createTextNode(e,t)),n},t.prototype.createShadowRoot=function(e){return e.createShadowRoot()},t.prototype.getShadowRoot=function(e){return e.shadowRoot},t.prototype.getHost=function(e){return e.host},t.prototype.clone=function(e){return e.cloneNode(!0)},t.prototype.getElementsByClassName=function(e,t){return e.getElementsByClassName(t)},t.prototype.getElementsByTagName=function(e,t){return e.getElementsByTagName(t)},t.prototype.classList=function(e){return Array.prototype.slice.call(e.classList,0)},t.prototype.addClass=function(e,t){e.classList.add(t)},t.prototype.removeClass=function(e,t){e.classList.remove(t)},t.prototype.hasClass=function(e,t){return e.classList.contains(t)},t.prototype.setStyle=function(e,t,n){e.style[t]=n},t.prototype.removeStyle=function(e,t){e.style[t]=""},t.prototype.getStyle=function(e,t){return e.style[t]},t.prototype.hasStyle=function(e,t,n){var r=this.getStyle(e,t)||"";return n?r==n:r.length>0},t.prototype.tagName=function(e){return e.tagName},t.prototype.attributeMap=function(e){for(var t=new Map,n=e.attributes,r=0;r<n.length;r++){var i=n.item(r);t.set(i.name,i.value)}return t},t.prototype.hasAttribute=function(e,t){return e.hasAttribute(t)},t.prototype.hasAttributeNS=function(e,t,n){return e.hasAttributeNS(t,n)},t.prototype.getAttribute=function(e,t){return e.getAttribute(t)},t.prototype.getAttributeNS=function(e,t,n){return e.getAttributeNS(t,n)},t.prototype.setAttribute=function(e,t,n){e.setAttribute(t,n)},t.prototype.setAttributeNS=function(e,t,n,r){e.setAttributeNS(t,n,r)},t.prototype.removeAttribute=function(e,t){e.removeAttribute(t)},t.prototype.removeAttributeNS=function(e,t,n){e.removeAttributeNS(t,n)},t.prototype.templateAwareRoot=function(e){return this.isTemplateElement(e)?this.content(e):e},t.prototype.createHtmlDocument=function(){return document.implementation.createHTMLDocument("fakeTitle")},t.prototype.getDefaultDocument=function(){return document},t.prototype.getBoundingClientRect=function(e){try{return e.getBoundingClientRect()}catch(e){return{top:0,bottom:0,left:0,right:0,width:0,height:0}}},t.prototype.getTitle=function(e){return e.title},t.prototype.setTitle=function(e,t){e.title=t||""},t.prototype.elementMatches=function(e,t){return!!this.isElementNode(e)&&(e.matches&&e.matches(t)||e.msMatchesSelector&&e.msMatchesSelector(t)||e.webkitMatchesSelector&&e.webkitMatchesSelector(t))},t.prototype.isTemplateElement=function(e){return this.isElementNode(e)&&"TEMPLATE"===e.nodeName},t.prototype.isTextNode=function(e){return e.nodeType===Node.TEXT_NODE},t.prototype.isCommentNode=function(e){return e.nodeType===Node.COMMENT_NODE},t.prototype.isElementNode=function(e){return e.nodeType===Node.ELEMENT_NODE},t.prototype.hasShadowRoot=function(e){return null!=e.shadowRoot&&e instanceof HTMLElement},t.prototype.isShadowRoot=function(e){return e instanceof DocumentFragment},t.prototype.importIntoDoc=function(e){return document.importNode(this.templateAwareRoot(e),!0)},t.prototype.adoptNode=function(e){return document.adoptNode(e)},t.prototype.getHref=function(e){return e.getAttribute("href")},t.prototype.getEventKey=function(e){var t=e.key;if(null==t){if(null==(t=e.keyIdentifier))return"Unidentified";t.startsWith("U+")&&(t=String.fromCharCode(parseInt(t.substring(2),16)),3===e.location&&S.hasOwnProperty(t)&&(t=S[t]))}return E[t]||t},t.prototype.getGlobalEventTarget=function(e,t){return"window"===t?window:"document"===t?e:"body"===t?e.body:null},t.prototype.getHistory=function(){return window.history},t.prototype.getLocation=function(){return window.location},t.prototype.getBaseHref=function(e){var t=D||(D=document.querySelector("base"))?D.getAttribute("href"):null;return null==t?null:function(e){return O||(O=document.createElement("a")),O.setAttribute("href",e),"/"===O.pathname.charAt(0)?O.pathname:"/"+O.pathname}(t)},t.prototype.resetBaseElement=function(){D=null},t.prototype.getUserAgent=function(){return window.navigator.userAgent},t.prototype.setData=function(e,t,n){this.setAttribute(e,"data-"+t,n)},t.prototype.getData=function(e,t){return this.getAttribute(e,"data-"+t)},t.prototype.getComputedStyle=function(e){return getComputedStyle(e)},t.prototype.supportsWebAnimation=function(){return"function"==typeof Element.prototype.animate},t.prototype.performanceNow=function(){return window.performance&&window.performance.now?window.performance.now():(new Date).getTime()},t.prototype.supportsCookies=function(){return!0},t.prototype.getCookie=function(e){return Object(b["\u0275parseCookieValue"])(document.cookie,e)},t.prototype.setCookie=function(e,t){document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(t)},t}(function(e){function t(){var t=e.call(this)||this;t._animationPrefix=null,t._transitionEnd=null;try{var n=t.createElement("div",document);if(null!=t.getStyle(n,"animationName"))t._animationPrefix="";else for(var r=["Webkit","Moz","O","ms"],i=0;i<r.length;i++)if(null!=t.getStyle(n,r[i]+"AnimationName")){t._animationPrefix="-"+r[i].toLowerCase()+"-";break}var o={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};Object.keys(o).forEach(function(e){null!=t.getStyle(n,e)&&(t._transitionEnd=o[e])})}catch(e){t._animationPrefix=null,t._transitionEnd=null}return t}return Object(w.__extends)(t,e),t.prototype.getDistributedNodes=function(e){return e.getDistributedNodes()},t.prototype.resolveAndSetHref=function(e,t,n){e.href=null==n?t:t+"/../"+n},t.prototype.supportsDOMEvents=function(){return!0},t.prototype.supportsNativeShadowDOM=function(){return"function"==typeof document.body.createShadowRoot},t.prototype.getAnimationPrefix=function(){return this._animationPrefix?this._animationPrefix:""},t.prototype.getTransitionEnd=function(){return this._transitionEnd?this._transitionEnd:""},t.prototype.supportsAnimation=function(){return null!=this._animationPrefix&&null!=this._transitionEnd},t}(function(){function e(){this.resourceLoaderType=null}return Object.defineProperty(e.prototype,"attrToPropMap",{get:function(){return this._attrToPropMap},set:function(e){this._attrToPropMap=e},enumerable:!0,configurable:!0}),e}())),D=null,I=b.DOCUMENT,R=function(e){function t(t){var n=e.call(this)||this;return n._doc=t,n._init(),n}return Object(w.__extends)(t,e),t.prototype._init=function(){this.location=r().getLocation(),this._history=r().getHistory()},t.prototype.getBaseHrefFromDOM=function(){return r().getBaseHref(this._doc)},t.prototype.onPopState=function(e){r().getGlobalEventTarget(this._doc,"window").addEventListener("popstate",e,!1)},t.prototype.onHashChange=function(e){r().getGlobalEventTarget(this._doc,"window").addEventListener("hashchange",e,!1)},Object.defineProperty(t.prototype,"pathname",{get:function(){return this.location.pathname},set:function(e){this.location.pathname=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"search",{get:function(){return this.location.search},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hash",{get:function(){return this.location.hash},enumerable:!0,configurable:!0}),t.prototype.pushState=function(e,t,n){i()?this._history.pushState(e,t,n):this.location.hash=n},t.prototype.replaceState=function(e,t,n){i()?this._history.replaceState(e,t,n):this.location.hash=n},t.prototype.forward=function(){this._history.forward()},t.prototype.back=function(){this._history.back()},t.ctorParameters=function(){return[{type:void 0,decorators:[{type:_.Inject,args:[I]}]}]},t}(b.PlatformLocation),M=function(){function e(e){this._doc=e,this._dom=r()}return e.prototype.addTag=function(e,t){return void 0===t&&(t=!1),e?this._getOrCreateElement(e,t):null},e.prototype.addTags=function(e,t){var n=this;return void 0===t&&(t=!1),e?e.reduce(function(e,r){return r&&e.push(n._getOrCreateElement(r,t)),e},[]):[]},e.prototype.getTag=function(e){return e?this._dom.querySelector(this._doc,"meta["+e+"]")||null:null},e.prototype.getTags=function(e){if(!e)return[];var t=this._dom.querySelectorAll(this._doc,"meta["+e+"]");return t?[].slice.call(t):[]},e.prototype.updateTag=function(e,t){if(!e)return null;t=t||this._parseSelector(e);var n=this.getTag(t);return n?this._setMetaElementAttributes(e,n):this._getOrCreateElement(e,!0)},e.prototype.removeTag=function(e){this.removeTagElement(this.getTag(e))},e.prototype.removeTagElement=function(e){e&&this._dom.remove(e)},e.prototype._getOrCreateElement=function(e,t){if(void 0===t&&(t=!1),!t){var n=this._parseSelector(e),r=this.getTag(n);if(r&&this._containsAttributes(e,r))return r}var i=this._dom.createElement("meta");this._setMetaElementAttributes(e,i);var o=this._dom.getElementsByTagName(this._doc,"head")[0];return this._dom.appendChild(o,i),i},e.prototype._setMetaElementAttributes=function(e,t){var n=this;return Object.keys(e).forEach(function(r){return n._dom.setAttribute(t,r,e[r])}),t},e.prototype._parseSelector=function(e){var t=e.name?"name":"property";return t+'="'+e[t]+'"'},e.prototype._containsAttributes=function(e,t){var n=this;return Object.keys(e).every(function(r){return n._dom.getAttribute(t,r)===e[r]})},e}(),P=new _.InjectionToken("TRANSITION_ID"),N=[{provide:_.APP_INITIALIZER,useFactory:function(e,t,n){return function(){n.get(_.ApplicationInitStatus).donePromise.then(function(){var n=r();Array.prototype.slice.apply(n.querySelectorAll(t,"style[ng-transition]")).filter(function(t){return n.getAttribute(t,"ng-transition")===e}).forEach(function(e){return n.remove(e)})})}},deps:[P,I,_.Injector],multi:!0}],A=function(){function e(){}return e.init=function(){Object(_.setTestabilityGetter)(new e)},e.prototype.addToWindow=function(e){_["\u0275global"].getAngularTestability=function(t,n){void 0===n&&(n=!0);var r=e.findTestabilityInTree(t,n);if(null==r)throw new Error("Could not find testability for element.");return r},_["\u0275global"].getAllAngularTestabilities=function(){return e.getAllTestabilities()},_["\u0275global"].getAllAngularRootElements=function(){return e.getAllRootElements()},_["\u0275global"].frameworkStabilizers||(_["\u0275global"].frameworkStabilizers=[]),_["\u0275global"].frameworkStabilizers.push(function(e){var t=_["\u0275global"].getAllAngularTestabilities(),n=t.length,r=!1,i=function(t){r=r||t,0==--n&&e(r)};t.forEach(function(e){e.whenStable(i)})})},e.prototype.findTestabilityInTree=function(e,t,n){if(null==t)return null;var i=e.getTestability(t);return null!=i?i:n?r().isShadowRoot(t)?this.findTestabilityInTree(e,r().getHost(t),!0):this.findTestabilityInTree(e,r().parentElement(t),!0):null},e}(),L=function(){function e(e){this._doc=e}return e.prototype.getTitle=function(){return r().getTitle(this._doc)},e.prototype.setTitle=function(e){r().setTitle(this._doc,e)},e}(),F={ApplicationRef:_.ApplicationRef,NgZone:_.NgZone},j="probe",V="coreTokens",z=new _.InjectionToken("EventManagerPlugins"),B=function(){function e(e,t){var n=this;this._zone=t,this._eventNameToPlugin=new Map,e.forEach(function(e){return e.manager=n}),this._plugins=e.slice().reverse()}return e.prototype.addEventListener=function(e,t,n){return this._findPluginFor(t).addEventListener(e,t,n)},e.prototype.addGlobalEventListener=function(e,t,n){return this._findPluginFor(t).addGlobalEventListener(e,t,n)},e.prototype.getZone=function(){return this._zone},e.prototype._findPluginFor=function(e){var t=this._eventNameToPlugin.get(e);if(t)return t;for(var n=this._plugins,r=0;r<n.length;r++){var i=n[r];if(i.supports(e))return this._eventNameToPlugin.set(e,i),i}throw new Error("No event manager plugin found for event "+e)},e}(),H=function(){function e(e){this._doc=e}return e.prototype.addGlobalEventListener=function(e,t,n){var i=r().getGlobalEventTarget(this._doc,e);if(!i)throw new Error("Unsupported event target "+i+" for event "+t);return this.addEventListener(i,t,n)},e}(),W=function(){function e(){this._stylesSet=new Set}return e.prototype.addStyles=function(e){var t=this,n=new Set;e.forEach(function(e){t._stylesSet.has(e)||(t._stylesSet.add(e),n.add(e))}),this.onStylesAdded(n)},e.prototype.onStylesAdded=function(e){},e.prototype.getAllStyles=function(){return Array.from(this._stylesSet)},e}(),q=function(e){function t(t){var n=e.call(this)||this;return n._doc=t,n._hostNodes=new Set,n._styleNodes=new Set,n._hostNodes.add(t.head),n}return Object(w.__extends)(t,e),t.prototype._addStylesToHost=function(e,t){var n=this;e.forEach(function(e){var r=n._doc.createElement("style");r.textContent=e,n._styleNodes.add(t.appendChild(r))})},t.prototype.addHost=function(e){this._addStylesToHost(this._stylesSet,e),this._hostNodes.add(e)},t.prototype.removeHost=function(e){this._hostNodes.delete(e)},t.prototype.onStylesAdded=function(e){var t=this;this._hostNodes.forEach(function(n){return t._addStylesToHost(e,n)})},t.prototype.ngOnDestroy=function(){this._styleNodes.forEach(function(e){return r().remove(e)})},t}(W),U={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},G=/%COMP%/g,K="_nghost-%COMP%",$="_ngcontent-%COMP%",Z=function(){function e(e,t){this.eventManager=e,this.sharedStylesHost=t,this.rendererByCompId=new Map,this.defaultRenderer=new Q(e)}return e.prototype.createRenderer=function(e,t){if(!e||!t)return this.defaultRenderer;switch(t.encapsulation){case _.ViewEncapsulation.Emulated:var n=this.rendererByCompId.get(t.id);return n||(n=new X(this.eventManager,this.sharedStylesHost,t),this.rendererByCompId.set(t.id,n)),n.applyToHost(e),n;case _.ViewEncapsulation.Native:return new J(this.eventManager,this.sharedStylesHost,e,t);default:if(!this.rendererByCompId.has(t.id)){var r=s(t.id,t.styles,[]);this.sharedStylesHost.addStyles(r),this.rendererByCompId.set(t.id,this.defaultRenderer)}return this.defaultRenderer}},e.prototype.begin=function(){},e.prototype.end=function(){},e}(),Q=function(){function e(e){this.eventManager=e,this.data=Object.create(null)}return e.prototype.destroy=function(){},e.prototype.createElement=function(e,t){return t?document.createElementNS(U[t],e):document.createElement(e)},e.prototype.createComment=function(e){return document.createComment(e)},e.prototype.createText=function(e){return document.createTextNode(e)},e.prototype.appendChild=function(e,t){e.appendChild(t)},e.prototype.insertBefore=function(e,t,n){e&&e.insertBefore(t,n)},e.prototype.removeChild=function(e,t){e&&e.removeChild(t)},e.prototype.selectRootElement=function(e){var t="string"==typeof e?document.querySelector(e):e;if(!t)throw new Error('The selector "'+e+'" did not match any elements');return t.textContent="",t},e.prototype.parentNode=function(e){return e.parentNode},e.prototype.nextSibling=function(e){return e.nextSibling},e.prototype.setAttribute=function(e,t,n,r){if(r){t=r+":"+t;var i=U[r];i?e.setAttributeNS(i,t,n):e.setAttribute(t,n)}else e.setAttribute(t,n)},e.prototype.removeAttribute=function(e,t,n){if(n){var r=U[n];r?e.removeAttributeNS(r,t):e.removeAttribute(n+":"+t)}else e.removeAttribute(t)},e.prototype.addClass=function(e,t){e.classList.add(t)},e.prototype.removeClass=function(e,t){e.classList.remove(t)},e.prototype.setStyle=function(e,t,n,r){r&_.RendererStyleFlags2.DashCase?e.style.setProperty(t,n,r&_.RendererStyleFlags2.Important?"important":""):e.style[t]=n},e.prototype.removeStyle=function(e,t,n){n&_.RendererStyleFlags2.DashCase?e.style.removeProperty(t):e.style[t]=""},e.prototype.setProperty=function(e,t,n){c(t,"property"),e[t]=n},e.prototype.setValue=function(e,t){e.nodeValue=t},e.prototype.listen=function(e,t,n){return c(t,"listener"),"string"==typeof e?this.eventManager.addGlobalEventListener(e,t,u(n)):this.eventManager.addEventListener(e,t,u(n))},e}(),Y="@".charCodeAt(0),X=function(e){function t(t,n,r){var i=e.call(this,t)||this;i.component=r;var o=s(r.id,r.styles,[]);return n.addStyles(o),i.contentAttr=$.replace(G,r.id),i.hostAttr=K.replace(G,r.id),i}return Object(w.__extends)(t,e),t.prototype.applyToHost=function(t){e.prototype.setAttribute.call(this,t,this.hostAttr,"")},t.prototype.createElement=function(t,n){var r=e.prototype.createElement.call(this,t,n);return e.prototype.setAttribute.call(this,r,this.contentAttr,""),r},t}(Q),J=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;o.sharedStylesHost=n,o.hostEl=r,o.component=i,o.shadowRoot=r.createShadowRoot(),o.sharedStylesHost.addHost(o.shadowRoot);for(var l=s(i.id,i.styles,[]),a=0;a<l.length;a++){var u=document.createElement("style");u.textContent=l[a],o.shadowRoot.appendChild(u)}return o}return Object(w.__extends)(t,e),t.prototype.nodeOrShadowRoot=function(e){return e===this.hostEl?this.shadowRoot:e},t.prototype.destroy=function(){this.sharedStylesHost.removeHost(this.shadowRoot)},t.prototype.appendChild=function(t,n){return e.prototype.appendChild.call(this,this.nodeOrShadowRoot(t),n)},t.prototype.insertBefore=function(t,n,r){return e.prototype.insertBefore.call(this,this.nodeOrShadowRoot(t),n,r)},t.prototype.removeChild=function(t,n){return e.prototype.removeChild.call(this,this.nodeOrShadowRoot(t),n)},t.prototype.parentNode=function(t){return this.nodeOrShadowRoot(e.prototype.parentNode.call(this,this.nodeOrShadowRoot(t)))},t}(Q),ee="undefined"!=typeof Zone&&Zone.__symbol__||function(e){return"__zone_symbol__"+e},te=ee("addEventListener"),ne=ee("removeEventListener"),re={},ie="removeEventListener",oe="__zone_symbol__propagationStopped",le="__zone_symbol__stopImmediatePropagation";"undefined"!=typeof Zone&&Zone[ee("BLACK_LISTED_EVENTS")]&&(T={});var ae=function(e){return!!T&&T.hasOwnProperty(e)},se=function(e){var t=re[e.type];if(t){var n=this[t];if(n){var r=[e];if(1===n.length)return(l=n[0]).zone!==Zone.current?l.zone.run(l.handler,this,r):l.handler.apply(this,r);for(var i=n.slice(),o=0;o<i.length&&!0!==e[oe];o++){var l;(l=i[o]).zone!==Zone.current?l.zone.run(l.handler,this,r):l.handler.apply(this,r)}}}},ue=function(e){function t(t,n){var r=e.call(this,t)||this;return r.ngZone=n,r.patchEvent(),r}return Object(w.__extends)(t,e),t.prototype.patchEvent=function(){if(Event&&Event.prototype&&!Event.prototype[le]){var e=Event.prototype[le]=Event.prototype.stopImmediatePropagation;Event.prototype.stopImmediatePropagation=function(){this&&(this[oe]=!0),e&&e.apply(this,arguments)}}},t.prototype.supports=function(e){return!0},t.prototype.addEventListener=function(e,t,n){var r=this,i=n;if(!e[te]||_.NgZone.isInAngularZone()&&!ae(t))e.addEventListener(t,i,!1);else{var o=re[t];o||(o=re[t]=ee("ANGULAR"+t+"FALSE"));var l=e[o],a=l&&l.length>0;l||(l=e[o]=[]);var s=ae(t)?Zone.root:Zone.current;if(0===l.length)l.push({zone:s,handler:i});else{for(var u=!1,c=0;c<l.length;c++)if(l[c].handler===i){u=!0;break}u||l.push({zone:s,handler:i})}a||e[te](t,se,!1)}return function(){return r.removeEventListener(e,t,i)}},t.prototype.removeEventListener=function(e,t,n){var r=e[ne];if(!r)return e[ie].apply(e,[t,n,!1]);var i=re[t],o=i&&e[i];if(!o)return e[ie].apply(e,[t,n,!1]);for(var l=!1,a=0;a<o.length;a++)if(o[a].handler===n){l=!0,o.splice(a,1);break}l?0===o.length&&r.apply(e,[t,se,!1]):e[ie].apply(e,[t,n,!1])},t}(H),ce={pan:!0,panstart:!0,panmove:!0,panend:!0,pancancel:!0,panleft:!0,panright:!0,panup:!0,pandown:!0,pinch:!0,pinchstart:!0,pinchmove:!0,pinchend:!0,pinchcancel:!0,pinchin:!0,pinchout:!0,press:!0,pressup:!0,rotate:!0,rotatestart:!0,rotatemove:!0,rotateend:!0,rotatecancel:!0,swipe:!0,swipeleft:!0,swiperight:!0,swipeup:!0,swipedown:!0,tap:!0},de=new _.InjectionToken("HammerGestureConfig"),pe=function(){function e(){this.events=[],this.overrides={}}return e.prototype.buildHammer=function(e){var t=new Hammer(e);t.get("pinch").set({enable:!0}),t.get("rotate").set({enable:!0});for(var n in this.overrides)t.get(n).set(this.overrides[n]);return t},e}(),fe=function(e){function t(t,n){var r=e.call(this,t)||this;return r._config=n,r}return Object(w.__extends)(t,e),t.prototype.supports=function(e){if(!ce.hasOwnProperty(e.toLowerCase())&&!this.isCustomEvent(e))return!1;if(!window.Hammer)throw new Error("Hammer.js is not loaded, can not bind "+e+" event");return!0},t.prototype.addEventListener=function(e,t,n){var r=this,i=this.manager.getZone();return t=t.toLowerCase(),i.runOutsideAngular(function(){var o=r._config.buildHammer(e),l=function(e){i.runGuarded(function(){n(e)})};return o.on(t,l),function(){return o.off(t,l)}})},t.prototype.isCustomEvent=function(e){return this._config.events.indexOf(e)>-1},t}(H),he=["alt","control","meta","shift"],me={alt:function(e){return e.altKey},control:function(e){return e.ctrlKey},meta:function(e){return e.metaKey},shift:function(e){return e.shiftKey}},ge=function(e){function t(t){return e.call(this,t)||this}return Object(w.__extends)(t,e),t.prototype.supports=function(e){return null!=t.parseEventName(e)},t.prototype.addEventListener=function(e,n,i){var o=t.parseEventName(n),l=t.eventCallback(o.fullKey,i,this.manager.getZone());return this.manager.getZone().runOutsideAngular(function(){return r().onAndCancel(e,o.domEventName,l)})},t.parseEventName=function(e){var n=e.toLowerCase().split("."),r=n.shift();if(0===n.length||"keydown"!==r&&"keyup"!==r)return null;var i=t._normalizeKey(n.pop()),o="";if(he.forEach(function(e){var t=n.indexOf(e);t>-1&&(n.splice(t,1),o+=e+".")}),o+=i,0!=n.length||0===i.length)return null;var l={};return l.domEventName=r,l.fullKey=o,l},t.getEventFullKey=function(e){var t="",n=r().getEventKey(e);return" "===(n=n.toLowerCase())?n="space":"."===n&&(n="dot"),he.forEach(function(r){r!=n&&(0,me[r])(e)&&(t+=r+".")}),t+=n},t.eventCallback=function(e,n,r){return function(i){t.getEventFullKey(i)===e&&r.runGuarded(function(){return n(i)})}},t._normalizeKey=function(e){switch(e){case"esc":return"escape";default:return e}},t}(H),ye=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,ve=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i,be=null,_e=null,we=p("area,br,col,hr,img,wbr"),xe=p("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),Ce=p("rp,rt"),Ee=f(Ce,xe),Se=f(we,f(xe,p("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),f(Ce,p("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),Ee),Oe=p("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),Te=p("srcset"),ke=f(Oe,Te,p("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width")),De=function(){function e(){this.sanitizedSomething=!1,this.buf=[]}return e.prototype.sanitizeChildren=function(e){for(var t=e.firstChild;t;)if(_e.isElementNode(t)?this.startElement(t):_e.isTextNode(t)?this.chars(_e.nodeValue(t)):this.sanitizedSomething=!0,_e.firstChild(t))t=_e.firstChild(t);else for(;t;){_e.isElementNode(t)&&this.endElement(t);var n=h(t,_e.nextSibling(t));if(n){t=n;break}t=h(t,_e.parentElement(t))}return this.buf.join("")},e.prototype.startElement=function(e){var t=this,n=_e.nodeName(e).toLowerCase();Se.hasOwnProperty(n)?(this.buf.push("<"),this.buf.push(n),_e.attributeMap(e).forEach(function(e,n){var r=n.toLowerCase();ke.hasOwnProperty(r)?(Oe[r]&&(e=d(e)),Te[r]&&(e=function(e){return(e=String(e)).split(",").map(function(e){return d(e.trim())}).join(", ")}(e)),t.buf.push(" "),t.buf.push(n),t.buf.push('="'),t.buf.push(m(e)),t.buf.push('"')):t.sanitizedSomething=!0}),this.buf.push(">")):this.sanitizedSomething=!0},e.prototype.endElement=function(e){var t=_e.nodeName(e).toLowerCase();Se.hasOwnProperty(t)&&!we.hasOwnProperty(t)&&(this.buf.push("</"),this.buf.push(t),this.buf.push(">"))},e.prototype.chars=function(e){this.buf.push(m(e))},e}(),Ie=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Re=/([^\#-~ |!])/g,Me=new RegExp("^([-,.\"'%_!# a-zA-Z0-9]+|(?:(?:matrix|translate|scale|rotate|skew|perspective)(?:X|Y|3d)?|(?:rgb|hsl)a?|(?:repeating-)?(?:linear|radial)-gradient|(?:calc|attr))\\([-0-9.%, #a-zA-Z]+\\))$","g"),Pe=/^url\(([^)]+)\)$/,Ne=function(){},Ae=function(e){function t(t){var n=e.call(this)||this;return n._doc=t,n}return Object(w.__extends)(t,e),t.prototype.sanitize=function(e,t){if(null==t)return null;switch(e){case _.SecurityContext.NONE:return t;case _.SecurityContext.HTML:return t instanceof Fe?t.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(t,"HTML"),function(e,t){try{var n=function(){if(be)return be;var e=(_e=r()).createElement("template");if("content"in e)return e;var t=_e.createHtmlDocument();if(null==(be=_e.querySelector(t,"body"))){var n=_e.createElement("html",t);be=_e.createElement("body",t),_e.appendChild(n,be),_e.appendChild(t,n)}return be}(),i=t?String(t):"",o=5,l=i;do{if(0===o)throw new Error("Failed to sanitize html because the input is unstable");o--,_e.setInnerHTML(n,i=l),e.documentMode&&g(n),l=_e.getInnerHTML(n)}while(i!==l);for(var a=new De,s=a.sanitizeChildren(_e.getTemplateContent(n)||n),u=_e.getTemplateContent(n)||n,c=0,d=_e.childNodesAsList(u);c<d.length;c++)_e.removeChild(u,d[c]);return Object(_.isDevMode)()&&a.sanitizedSomething&&_e.log("WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss)."),s}catch(e){throw be=null,e}}(this._doc,String(t)));case _.SecurityContext.STYLE:return t instanceof je?t.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(t,"Style"),function(e){if(!(e=String(e).trim()))return"";var t=e.match(Pe);return t&&d(t[1])===t[1]||e.match(Me)&&function(e){for(var t=!0,n=!0,r=0;r<e.length;r++){var i=e.charAt(r);"'"===i&&n?t=!t:'"'===i&&t&&(n=!n)}return t&&n}(e)?e:(Object(_.isDevMode)()&&r().log("WARNING: sanitizing unsafe style value "+e+" (see http://g.co/ng/security#xss)."),"unsafe")}(t));case _.SecurityContext.SCRIPT:if(t instanceof Ve)return t.changingThisBreaksApplicationSecurity;throw this.checkNotSafeValue(t,"Script"),new Error("unsafe value used in a script context");case _.SecurityContext.URL:return t instanceof Be||t instanceof ze?t.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(t,"URL"),d(String(t)));case _.SecurityContext.RESOURCE_URL:if(t instanceof Be)return t.changingThisBreaksApplicationSecurity;throw this.checkNotSafeValue(t,"ResourceURL"),new Error("unsafe value used in a resource URL context (see http://g.co/ng/security#xss)");default:throw new Error("Unexpected SecurityContext "+e+" (see http://g.co/ng/security#xss)")}},t.prototype.checkNotSafeValue=function(e,t){if(e instanceof Le)throw new Error("Required a safe "+t+", got a "+e.getTypeName()+" (see http://g.co/ng/security#xss)")},t.prototype.bypassSecurityTrustHtml=function(e){return new Fe(e)},t.prototype.bypassSecurityTrustStyle=function(e){return new je(e)},t.prototype.bypassSecurityTrustScript=function(e){return new Ve(e)},t.prototype.bypassSecurityTrustUrl=function(e){return new ze(e)},t.prototype.bypassSecurityTrustResourceUrl=function(e){return new Be(e)},t}(Ne),Le=function(){function e(e){this.changingThisBreaksApplicationSecurity=e}return e.prototype.toString=function(){return"SafeValue must use [property]=binding: "+this.changingThisBreaksApplicationSecurity+" (see http://g.co/ng/security#xss)"},e}(),Fe=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(w.__extends)(t,e),t.prototype.getTypeName=function(){return"HTML"},t}(Le),je=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(w.__extends)(t,e),t.prototype.getTypeName=function(){return"Style"},t}(Le),Ve=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(w.__extends)(t,e),t.prototype.getTypeName=function(){return"Script"},t}(Le),ze=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(w.__extends)(t,e),t.prototype.getTypeName=function(){return"URL"},t}(Le),Be=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(w.__extends)(t,e),t.prototype.getTypeName=function(){return"ResourceURL"},t}(Le),He=[{provide:_.PLATFORM_ID,useValue:b["\u0275PLATFORM_BROWSER_ID"]},{provide:_.PLATFORM_INITIALIZER,useValue:function(){k.makeCurrent(),A.init()},multi:!0},{provide:b.PlatformLocation,useClass:R,deps:[I]},{provide:I,useFactory:function(){return document},deps:[]}],We=Object(_.createPlatformFactory)(_.platformCore,"browser",He),qe=function(){function e(e){if(e)throw new Error("BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.")}return e.withServerTransition=function(t){return{ngModule:e,providers:[{provide:_.APP_ID,useValue:t.appId},{provide:P,useExisting:_.APP_ID},N]}},e}();"undefined"!=typeof window&&window},TJLg:function(e,t,n){var r=n("rMsi"),i=n("RT4T"),o=n("yIWP")("IE_PROTO"),l=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=i(e),r(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?l:null}},TO51:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"SubjectSubscriber",function(){return c}),n.d(t,"Subject",function(){return d}),n.d(t,"AnonymousSubject",function(){return p});var r=n("6Xbx"),i=n("AP4T"),o=n("E9/g"),l=n("qLnt"),a=n("Upor"),s=n("jaVc"),u=n("V7AE"),c=function(e){function t(t){e.call(this,t),this.destination=t}return Object(r.__extends)(t,e),t}(o.a),d=function(e){function t(){e.call(this),this.observers=[],this.closed=!1,this.isStopped=!1,this.hasError=!1,this.thrownError=null}return Object(r.__extends)(t,e),t.prototype[u.a]=function(){return new c(this)},t.prototype.lift=function(e){var t=new p(this,this);return t.operator=e,t},t.prototype.next=function(e){if(this.closed)throw new a.a;if(!this.isStopped)for(var t=this.observers,n=t.length,r=t.slice(),i=0;i<n;i++)r[i].next(e)},t.prototype.error=function(e){if(this.closed)throw new a.a;this.hasError=!0,this.thrownError=e,this.isStopped=!0;for(var t=this.observers,n=t.length,r=t.slice(),i=0;i<n;i++)r[i].error(e);this.observers.length=0},t.prototype.complete=function(){if(this.closed)throw new a.a;this.isStopped=!0;for(var e=this.observers,t=e.length,n=e.slice(),r=0;r<t;r++)n[r].complete();this.observers.length=0},t.prototype.unsubscribe=function(){this.isStopped=!0,this.closed=!0,this.observers=null},t.prototype._trySubscribe=function(t){if(this.closed)throw new a.a;return e.prototype._trySubscribe.call(this,t)},t.prototype._subscribe=function(e){if(this.closed)throw new a.a;return this.hasError?(e.error(this.thrownError),l.a.EMPTY):this.isStopped?(e.complete(),l.a.EMPTY):(this.observers.push(e),new s.a(this,e))},t.prototype.asObservable=function(){var e=new i.a;return e.source=this,e},t.create=function(e,t){return new p(e,t)},t}(i.a),p=function(e){function t(t,n){e.call(this),this.destination=t,this.source=n}return Object(r.__extends)(t,e),t.prototype.next=function(e){var t=this.destination;t&&t.next&&t.next(e)},t.prototype.error=function(e){var t=this.destination;t&&t.error&&this.destination.error(e)},t.prototype.complete=function(){var e=this.destination;e&&e.complete&&this.destination.complete()},t.prototype._subscribe=function(e){return this.source?this.source.subscribe(e):l.a.EMPTY},t}(d)},"TU+8":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("+iEx"),i=(n.n(r),n("eFQL"));n.n(i)},ThPn:function(e,t,n){"use strict";var r=n("6Xbx"),i=n("lI6h"),o=n("qgI0"),l=function(){function e(e,t){this.observables=e,this.project=t}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.observables,this.project))},e}(),a=function(e){function t(t,n,r){e.call(this,t),this.observables=n,this.project=r,this.toRespond=[];var i=n.length;this.values=new Array(i);for(var l=0;l<i;l++)this.toRespond.push(l);for(l=0;l<i;l++){var a=n[l];this.add(Object(o.a)(this,a,a,l))}}return Object(r.__extends)(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.values[n]=t;var o=this.toRespond;if(o.length>0){var l=o.indexOf(n);-1!==l&&o.splice(l,1)}},t.prototype.notifyComplete=function(){},t.prototype._next=function(e){if(0===this.toRespond.length){var t=[e].concat(this.values);this.project?this._tryProject(t):this.destination.next(t)}},t.prototype._tryProject=function(e){var t;try{t=this.project.apply(this,e)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(i.a);t.a=function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return function(t){var n;return"function"==typeof e[e.length-1]&&(n=e.pop()),t.lift(new l(e,n))}}.apply(void 0,e)(this)}},UKZQ:function(e,t,n){var r=n("a7b8");e.exports=function(e,t){return new(r(e))(t)}},ULWX:function(e,t,n){var r=n("+pQw");e.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&r(o.call(e)),t}}},URbD:function(e,t,n){"use strict";t.a=function(){return Object(r.a)()(this)};var r=n("eIqN")},UlVq:function(e,t,n){var r=n("3r0D")("iterator"),i=!1;try{var o=[7][r]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!i)return!1;var n=!1;try{var o=[7],l=o[r]();l.next=function(){return{done:n=!0}},o[r]=function(){return l},e(o)}catch(e){}return n}},Ula3:function(e,t,n){var r=n("JXkd"),i=n("5oDA").set;e.exports=function(e,t,n){var o,l=t.constructor;return l!==n&&"function"==typeof l&&(o=l.prototype)!==n.prototype&&r(o)&&i&&i(e,o),e}},Un6q:function(e,t,n){"use strict";function r(e){return e.replace(/\/index.html$/,"")}function i(e,t,n){"string"!=typeof t&&(n=t,t=e[0]),t=t.toLowerCase().replace(/_/g,"-"),me[t]=e,n&&(me[t][18]=n)}function o(e){return S(e)[0]}function l(e,t,n){var r=S(e);return C(C([r[1],r[2]],t),n)}function a(e,t,n){var r=S(e);return C(C([r[3],r[4]],t),n)}function s(e,t,n){var r=S(e);return C(C([r[5],r[6]],t),n)}function u(e,t){return C(S(e)[7],t)}function c(e){return S(e)[8]}function d(e){return S(e)[9]}function p(e,t){return S(e)[10][t]}function f(e,t){return S(e)[11][t]}function h(e,t){return C(S(e)[12],t)}function m(e,t){var n=S(e),r=n[13][t];if(void 0===r){if(t===we.CurrencyDecimal)return n[13][we.Decimal];if(t===we.CurrencyGroup)return n[13][we.Group]}return r}function g(e,t){return S(e)[14][t]}function y(e){return S(e)[15]||null}function v(e){return S(e)[16]||null}function b(e){return S(e)[17]}function _(e){if(!e[18])throw new Error('Missing extra locale data for the locale "'+e[0]+'". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.')}function w(e){var t=S(e);return _(t),(t[18][2]||[]).map(function(e){return"string"==typeof e?E(e):[E(e[0]),E(e[1])]})}function x(e,t,n){var r=S(e);return _(r),C(C([r[18][0],r[18][1]],t)||[],n)||[]}function C(e,t){for(var n=t;n>-1;n--)if(void 0!==e[n])return e[n];throw new Error("Locale data API: locale data undefined")}function E(e){var t=e.split(":");return{hours:+t[0],minutes:+t[1]}}function S(e){var t=e.toLowerCase().replace(/_/g,"-"),n=me[t];if(n)return n;var r=t.split("-")[0];if(n=me[r])return n;if("en"===r)return he;throw new Error('Missing locale data for the locale "'+e+'".')}function O(e,t,n,r){var i="="+e;if(t.indexOf(i)>-1)return i;if(i=n.getPluralCategory(e,r),t.indexOf(i)>-1)return i;if(t.indexOf("other")>-1)return"other";throw new Error('No plural message found for value "'+e+'"')}function T(e,t){"string"==typeof t&&(t=parseInt(t,10));var n=t,r=n.toString().replace(/^[^.]*\.?/,""),i=Math.floor(Math.abs(n)),o=r.length,l=parseInt(r,10),a=parseInt(n.toString().replace(/^[^.]*\.?|0+$/g,""),10)||0;switch(e.split("-")[0].toLowerCase()){case"af":case"asa":case"az":case"bem":case"bez":case"bg":case"brx":case"ce":case"cgg":case"chr":case"ckb":case"ee":case"el":case"eo":case"es":case"eu":case"fo":case"fur":case"gsw":case"ha":case"haw":case"hu":case"jgo":case"jmc":case"ka":case"kk":case"kkj":case"kl":case"ks":case"ksb":case"ky":case"lb":case"lg":case"mas":case"mgo":case"ml":case"mn":case"nb":case"nd":case"ne":case"nn":case"nnh":case"nyn":case"om":case"or":case"os":case"ps":case"rm":case"rof":case"rwk":case"saq":case"seh":case"sn":case"so":case"sq":case"ta":case"te":case"teo":case"tk":case"tr":case"ug":case"uz":case"vo":case"vun":case"wae":case"xog":return 1===n?ye.One:ye.Other;case"ak":case"ln":case"mg":case"pa":case"ti":return n===Math.floor(n)&&n>=0&&n<=1?ye.One:ye.Other;case"am":case"as":case"bn":case"fa":case"gu":case"hi":case"kn":case"mr":case"zu":return 0===i||1===n?ye.One:ye.Other;case"ar":return 0===n?ye.Zero:1===n?ye.One:2===n?ye.Two:n%100===Math.floor(n%100)&&n%100>=3&&n%100<=10?ye.Few:n%100===Math.floor(n%100)&&n%100>=11&&n%100<=99?ye.Many:ye.Other;case"ast":case"ca":case"de":case"en":case"et":case"fi":case"fy":case"gl":case"it":case"nl":case"sv":case"sw":case"ur":case"yi":return 1===i&&0===o?ye.One:ye.Other;case"be":return n%10==1&&n%100!=11?ye.One:n%10===Math.floor(n%10)&&n%10>=2&&n%10<=4&&!(n%100>=12&&n%100<=14)?ye.Few:n%10==0||n%10===Math.floor(n%10)&&n%10>=5&&n%10<=9||n%100===Math.floor(n%100)&&n%100>=11&&n%100<=14?ye.Many:ye.Other;case"br":return n%10==1&&n%100!=11&&n%100!=71&&n%100!=91?ye.One:n%10==2&&n%100!=12&&n%100!=72&&n%100!=92?ye.Two:n%10===Math.floor(n%10)&&(n%10>=3&&n%10<=4||n%10==9)&&!(n%100>=10&&n%100<=19||n%100>=70&&n%100<=79||n%100>=90&&n%100<=99)?ye.Few:0!==n&&n%1e6==0?ye.Many:ye.Other;case"bs":case"hr":case"sr":return 0===o&&i%10==1&&i%100!=11||l%10==1&&l%100!=11?ye.One:0===o&&i%10===Math.floor(i%10)&&i%10>=2&&i%10<=4&&!(i%100>=12&&i%100<=14)||l%10===Math.floor(l%10)&&l%10>=2&&l%10<=4&&!(l%100>=12&&l%100<=14)?ye.Few:ye.Other;case"cs":case"sk":return 1===i&&0===o?ye.One:i===Math.floor(i)&&i>=2&&i<=4&&0===o?ye.Few:0!==o?ye.Many:ye.Other;case"cy":return 0===n?ye.Zero:1===n?ye.One:2===n?ye.Two:3===n?ye.Few:6===n?ye.Many:ye.Other;case"da":return 1===n||0!==a&&(0===i||1===i)?ye.One:ye.Other;case"dsb":case"hsb":return 0===o&&i%100==1||l%100==1?ye.One:0===o&&i%100==2||l%100==2?ye.Two:0===o&&i%100===Math.floor(i%100)&&i%100>=3&&i%100<=4||l%100===Math.floor(l%100)&&l%100>=3&&l%100<=4?ye.Few:ye.Other;case"ff":case"fr":case"hy":case"kab":return 0===i||1===i?ye.One:ye.Other;case"fil":return 0===o&&(1===i||2===i||3===i)||0===o&&i%10!=4&&i%10!=6&&i%10!=9||0!==o&&l%10!=4&&l%10!=6&&l%10!=9?ye.One:ye.Other;case"ga":return 1===n?ye.One:2===n?ye.Two:n===Math.floor(n)&&n>=3&&n<=6?ye.Few:n===Math.floor(n)&&n>=7&&n<=10?ye.Many:ye.Other;case"gd":return 1===n||11===n?ye.One:2===n||12===n?ye.Two:n===Math.floor(n)&&(n>=3&&n<=10||n>=13&&n<=19)?ye.Few:ye.Other;case"gv":return 0===o&&i%10==1?ye.One:0===o&&i%10==2?ye.Two:0!==o||i%100!=0&&i%100!=20&&i%100!=40&&i%100!=60&&i%100!=80?0!==o?ye.Many:ye.Other:ye.Few;case"he":return 1===i&&0===o?ye.One:2===i&&0===o?ye.Two:0!==o||n>=0&&n<=10||n%10!=0?ye.Other:ye.Many;case"is":return 0===a&&i%10==1&&i%100!=11||0!==a?ye.One:ye.Other;case"ksh":return 0===n?ye.Zero:1===n?ye.One:ye.Other;case"kw":case"naq":case"se":case"smn":return 1===n?ye.One:2===n?ye.Two:ye.Other;case"lag":return 0===n?ye.Zero:0!==i&&1!==i||0===n?ye.Other:ye.One;case"lt":return n%10!=1||n%100>=11&&n%100<=19?n%10===Math.floor(n%10)&&n%10>=2&&n%10<=9&&!(n%100>=11&&n%100<=19)?ye.Few:0!==l?ye.Many:ye.Other:ye.One;case"lv":case"prg":return n%10==0||n%100===Math.floor(n%100)&&n%100>=11&&n%100<=19||2===o&&l%100===Math.floor(l%100)&&l%100>=11&&l%100<=19?ye.Zero:n%10==1&&n%100!=11||2===o&&l%10==1&&l%100!=11||2!==o&&l%10==1?ye.One:ye.Other;case"mk":return 0===o&&i%10==1||l%10==1?ye.One:ye.Other;case"mt":return 1===n?ye.One:0===n||n%100===Math.floor(n%100)&&n%100>=2&&n%100<=10?ye.Few:n%100===Math.floor(n%100)&&n%100>=11&&n%100<=19?ye.Many:ye.Other;case"pl":return 1===i&&0===o?ye.One:0===o&&i%10===Math.floor(i%10)&&i%10>=2&&i%10<=4&&!(i%100>=12&&i%100<=14)?ye.Few:0===o&&1!==i&&i%10===Math.floor(i%10)&&i%10>=0&&i%10<=1||0===o&&i%10===Math.floor(i%10)&&i%10>=5&&i%10<=9||0===o&&i%100===Math.floor(i%100)&&i%100>=12&&i%100<=14?ye.Many:ye.Other;case"pt":return n===Math.floor(n)&&n>=0&&n<=2&&2!==n?ye.One:ye.Other;case"ro":return 1===i&&0===o?ye.One:0!==o||0===n||1!==n&&n%100===Math.floor(n%100)&&n%100>=1&&n%100<=19?ye.Few:ye.Other;case"ru":case"uk":return 0===o&&i%10==1&&i%100!=11?ye.One:0===o&&i%10===Math.floor(i%10)&&i%10>=2&&i%10<=4&&!(i%100>=12&&i%100<=14)?ye.Few:0===o&&i%10==0||0===o&&i%10===Math.floor(i%10)&&i%10>=5&&i%10<=9||0===o&&i%100===Math.floor(i%100)&&i%100>=11&&i%100<=14?ye.Many:ye.Other;case"shi":return 0===i||1===n?ye.One:n===Math.floor(n)&&n>=2&&n<=10?ye.Few:ye.Other;case"si":return 0===n||1===n||0===i&&1===l?ye.One:ye.Other;case"sl":return 0===o&&i%100==1?ye.One:0===o&&i%100==2?ye.Two:0===o&&i%100===Math.floor(i%100)&&i%100>=3&&i%100<=4||0!==o?ye.Few:ye.Other;case"tzm":return n===Math.floor(n)&&n>=0&&n<=1||n===Math.floor(n)&&n>=11&&n<=99?ye.One:ye.Other;default:return ye.Other}}function k(e,t){t=encodeURIComponent(t);for(var n=0,r=e.split(";");n<r.length;n++){var i=r[n],o=i.indexOf("="),l=-1==o?[i,""]:[i.slice(0,o),i.slice(o+1)],a=l[1];if(l[0].trim()===t)return decodeURIComponent(a)}return null}function D(e,t){var n=o(e);if(He[n]=He[n]||{},He[n][t])return He[n][t];var r="";switch(t){case"shortDate":r=p(e,_e.Short);break;case"mediumDate":r=p(e,_e.Medium);break;case"longDate":r=p(e,_e.Long);break;case"fullDate":r=p(e,_e.Full);break;case"shortTime":r=f(e,_e.Short);break;case"mediumTime":r=f(e,_e.Medium);break;case"longTime":r=f(e,_e.Long);break;case"fullTime":r=f(e,_e.Full);break;case"short":var i=D(e,"shortTime"),l=D(e,"shortDate");r=I(h(e,_e.Short),[i,l]);break;case"medium":var a=D(e,"mediumTime"),s=D(e,"mediumDate");r=I(h(e,_e.Medium),[a,s]);break;case"long":var u=D(e,"longTime"),c=D(e,"longDate");r=I(h(e,_e.Long),[u,c]);break;case"full":var d=D(e,"fullTime"),m=D(e,"fullDate");r=I(h(e,_e.Full),[d,m])}return r&&(He[n][t]=r),r}function I(e,t){return t&&(e=e.replace(/\{([^}]+)}/g,function(e,n){return null!=t&&n in t?t[n]:e})),e}function R(e,t,n,r,i){void 0===n&&(n="-");var o="";(e<0||i&&e<=0)&&(i?e=1-e:(e=-e,o=n));for(var l=""+e;l.length<t;)l="0"+l;return r&&(l=l.substr(l.length-t)),o+l}function M(e,t,n,r,i){return void 0===n&&(n=0),void 0===r&&(r=!1),void 0===i&&(i=!1),function(o,l){var a=function(e,t,n){switch(e){case Ue.FullYear:return t.getFullYear();case Ue.Month:return t.getMonth();case Ue.Date:return t.getDate();case Ue.Hours:return t.getHours();case Ue.Minutes:return t.getMinutes();case Ue.Seconds:return t.getSeconds();case Ue.Milliseconds:var r=1===n?100:2===n?10:1;return Math.round(t.getMilliseconds()/r);case Ue.Day:return t.getDay();default:throw new Error('Unknown DateType value "'+e+'".')}}(e,o,t);return(n>0||a>-n)&&(a+=n),e===Ue.Hours&&0===a&&-12===n&&(a=12),R(a,t,m(l,we.MinusSign),r,i)}}function P(e,t,n,r){return void 0===n&&(n=ve.Format),void 0===r&&(r=!1),function(i,o){return function(t,n,r,i,o,c){switch(e){case Ge.Months:return s(n,o,i)[t.getMonth()];case Ge.Days:return a(n,o,i)[t.getDay()];case Ge.DayPeriods:var d=t.getHours(),p=t.getMinutes();if(c){var f,h=w(n),m=x(n,o,i);if(h.forEach(function(e,t){if(Array.isArray(e)){var n=e[0],r=e[1],i=r.hours;d>=n.hours&&p>=n.minutes&&(d<i||d===i&&p<r.minutes)&&(f=m[t])}else e.hours===d&&e.minutes===p&&(f=m[t])}),f)return f}return l(n,o,i)[d<12?0:1];case Ge.Eras:return u(n,i)[t.getFullYear()<=0?0:1]}}(i,o,0,t,n,r)}}function N(e){return function(t,n,r){var i=-1*r,o=m(n,we.MinusSign),l=i>0?Math.floor(i/60):Math.ceil(i/60);switch(e){case qe.Short:return(i>=0?"+":"")+R(l,2,o)+R(Math.abs(i%60),2,o);case qe.ShortGMT:return"GMT"+(i>=0?"+":"")+R(l,1,o);case qe.Long:return"GMT"+(i>=0?"+":"")+R(l,2,o)+":"+R(Math.abs(i%60),2,o);case qe.Extended:return 0===r?"Z":(i>=0?"+":"")+R(l,2,o)+":"+R(Math.abs(i%60),2,o);default:throw new Error('Unknown zone width "'+e+'"')}}}function A(e,t){return void 0===t&&(t=!1),function(n,r){var i;if(t){var o=new Date(n.getFullYear(),n.getMonth(),1).getDay()-1,l=n.getDate();i=1+Math.floor((l+o)/7)}else{var a=function(e){var t=new Date(e,Ke,1).getDay();return new Date(e,0,1+(t<=$e?$e:$e+7)-t)}(n.getFullYear()),s=function(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate()+($e-e.getDay()))}(n).getTime()-a.getTime();i=1+Math.round(s/6048e5)}return R(i,e,m(r,we.MinusSign))}}function L(e,t){e=e.replace(/:/g,"");var n=Date.parse("Jan 01, 1970 00:00:00 "+e)/6e4;return isNaN(n)?t:n}function F(e,t){return Error("InvalidPipeArgument: '"+t+"' for pipe '"+Object(ie["\u0275stringify"])(e)+"'")}function j(e){var t=new Date(0),n=0,r=0,i=e[8]?t.setUTCHours:t.setHours;e[9]&&(n=+(e[9]+e[10]),r=+(e[9]+e[11])),(e[8]?t.setUTCFullYear:t.setFullYear).call(t,+e[1],+e[2]-1,+e[3]);var o=+(e[4]||"0")-n,l=+(e[5]||"0")-r,a=+(e[6]||"0"),s=Math.round(1e3*parseFloat("0."+(e[7]||0)));return i.call(t,o,l,a,s),t}function V(e){return e instanceof Date&&!isNaN(e.valueOf())}function z(e){return function(t,n){var r=e(t,n);return 1==r.length?"0"+r:r}}function B(e){return function(t,n){return e(t,n).split(" ")[0]}}function H(e,t,n){return new Intl.DateTimeFormat(t,n).format(e).replace(/[\u200e\u200f]/g,"")}function W(e){var t={hour:"2-digit",hour12:!1,timeZoneName:e};return function(e,n){var r=H(e,n,t);return r?r.substring(3):""}}function q(e,t){return e.hour12=t,e}function U(e,t){return function(){var n={};return n[e]=2===t?"2-digit":"numeric",n}()}function G(e,t){var n={};return n[e]=t<4?t>1?"short":"narrow":"long",n}function K(e){return e.reduce(function(e,t){return Object(oe.__assign)({},e,t)},{})}function $(e){return function(t,n){return H(t,n,e)}}function Z(e){return e instanceof Date&&!isNaN(e.valueOf())}function Q(e,t,n,r,i){void 0===i&&(i=null);var o,l={str:null},a=g(t,n);if("string"!=typeof e||isNaN(+e-parseFloat(e))){if("number"!=typeof e)return l.error=e+" is not a number",l;o=e}else o=+e;n===ge.Percent&&(o*=100);var s=Math.abs(o)+"",u=function(e,t){void 0===t&&(t="-");var n={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},r=e.split(ut),i=r[0],o=r[1],l=-1!==i.indexOf(at)?i.split(at):[i.substring(0,i.lastIndexOf(st)+1),i.substring(i.lastIndexOf(st)+1)],a=l[0],s=l[1]||"";n.posPre=a.substr(0,a.indexOf(dt));for(var u=0;u<s.length;u++){var c=s.charAt(u);c===st?n.minFrac=n.maxFrac=u+1:c===dt?n.maxFrac=u+1:n.posSuf+=c}var d=a.split(ct);if(n.gSize=d[1]?d[1].length:0,n.lgSize=d[2]||d[1]?(d[2]||d[1]).length:0,o){var p=i.length-n.posPre.length-n.posSuf.length,f=o.indexOf(dt);n.negPre=o.substr(0,f).replace(/'/g,""),n.negSuf=o.substr(f+p).replace(/'/g,"")}else n.negPre=t+n.posPre,n.negSuf=n.posSuf;return n}(a,m(t,we.MinusSign)),c="",d=!1;if(isFinite(o)){var p=function(e){var t,n,r,i,o,l=0;for((n=e.indexOf(at))>-1&&(e=e.replace(at,"")),(r=e.search(/e/i))>0?(n<0&&(n=r),n+=+e.slice(r+1),e=e.substring(0,r)):n<0&&(n=e.length),r=0;e.charAt(r)===st;r++);if(r===(o=e.length))t=[0],n=1;else{for(o--;e.charAt(o)===st;)o--;for(n-=r,t=[],i=0;r<=o;r++,i++)t[i]=+e.charAt(r)}return n>lt&&(t=t.splice(0,lt-1),l=n-1,n=1),{digits:t,exponent:l,integerLen:n}}(s),f=u.minInt,h=u.minFrac,y=u.maxFrac;if(r){var v=r.match(ot);if(null===v)return l.error=r+" is not a valid digit info",l;var b=v[1],_=v[3],w=v[5];null!=b&&(f=Y(b)),null!=_&&(h=Y(_)),null!=w?y=Y(w):null!=_&&h>y&&(y=h)}!function(e,t,n){if(t>n)throw new Error("The minimum number of digits after fraction ("+t+") is higher than the maximum ("+n+").");var r=e.digits,i=r.length-e.integerLen,o=Math.min(Math.max(t,i),n),l=o+e.integerLen,a=r[l];if(l>0){r.splice(Math.max(e.integerLen,l));for(var s=l;s<r.length;s++)r[s]=0}else{i=Math.max(0,i),e.integerLen=1,r.length=Math.max(1,l=o+1),r[0]=0;for(var u=1;u<l;u++)r[u]=0}if(a>=5)if(l-1<0){for(var c=0;c>l;c--)r.unshift(0),e.integerLen++;r.unshift(1),e.integerLen++}else r[l-1]++;for(;i<Math.max(0,o);i++)r.push(0);var d=r.reduceRight(function(e,t,n,r){return t+=e,r[n]=t%10,Math.floor(t/10)},0);d&&(r.unshift(d),e.integerLen++)}(p,h,y);var x=p.digits,C=p.integerLen,E=p.exponent,S=[];for(d=x.every(function(e){return!e});C<f;C++)x.unshift(0);for(;C<0;C++)x.unshift(0);C>0?S=x.splice(C,x.length):(S=x,x=[0]);var O=[];for(x.length>=u.lgSize&&O.unshift(x.splice(-u.lgSize,x.length).join(""));x.length>u.gSize;)O.unshift(x.splice(-u.gSize,x.length).join(""));x.length&&O.unshift(x.join("")),c=O.join(m(t,i?we.CurrencyGroup:we.Group)),S.length&&(c+=m(t,i?we.CurrencyDecimal:we.Decimal)+S.join("")),E&&(c+=m(t,we.Exponential)+"+"+E)}else c=m(t,we.Infinity);return c=o<0&&!d?u.negPre+c+u.negSuf:u.posPre+c+u.posSuf,n===ge.Currency&&null!==i?(l.str=c.replace(pt,i).replace(pt,""),l):n===ge.Percent?(l.str=c.replace(new RegExp(ft,"g"),m(t,we.PercentSign)),l):(l.str=c,l)}function Y(e){var t=parseInt(e);if(isNaN(t))throw new Error("Invalid integer literal when parsing "+e);return t}function X(e,t,n,r,i,o,l){if(void 0===o&&(o=null),void 0===l&&(l=!1),null==n)return null;if("number"!=typeof(n="string"!=typeof n||isNaN(+n-parseFloat(n))?n:+n))throw F(e,n);var a,s,u;if(r!==ge.Currency&&(a=1,s=0,u=3),i){var c=i.match(ot);if(null===c)throw new Error(i+" is not a valid digit info for number pipes");null!=c[1]&&(a=Y(c[1])),null!=c[3]&&(s=Y(c[3])),null!=c[5]&&(u=Y(c[5]))}return Xe.format(n,t,r,{minimumIntegerDigits:a,minimumFractionDigits:s,maximumFractionDigits:u,currency:o,currencyAsSymbol:l})}function J(e){return null==e||""===e||e!=e}function ee(e){return e===Ft}function te(e){return e===jt}function ne(e){return e===Vt}function re(e){return e===zt}Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"NgLocaleLocalization",function(){return Se}),n.d(t,"NgLocalization",function(){return Ee}),n.d(t,"registerLocaleData",function(){return i}),n.d(t,"Plural",function(){return ye}),n.d(t,"NumberFormatStyle",function(){return ge}),n.d(t,"FormStyle",function(){return ve}),n.d(t,"TranslationWidth",function(){return be}),n.d(t,"FormatWidth",function(){return _e}),n.d(t,"NumberSymbol",function(){return we}),n.d(t,"WeekDay",function(){return xe}),n.d(t,"getLocaleDayPeriods",function(){return l}),n.d(t,"getLocaleDayNames",function(){return a}),n.d(t,"getLocaleMonthNames",function(){return s}),n.d(t,"getLocaleId",function(){return o}),n.d(t,"getLocaleEraNames",function(){return u}),n.d(t,"getLocaleWeekEndRange",function(){return d}),n.d(t,"getLocaleFirstDayOfWeek",function(){return c}),n.d(t,"getLocaleDateFormat",function(){return p}),n.d(t,"getLocaleDateTimeFormat",function(){return h}),n.d(t,"getLocaleExtraDayPeriodRules",function(){return w}),n.d(t,"getLocaleExtraDayPeriods",function(){return x}),n.d(t,"getLocalePluralCase",function(){return b}),n.d(t,"getLocaleTimeFormat",function(){return f}),n.d(t,"getLocaleNumberSymbol",function(){return m}),n.d(t,"getLocaleNumberFormat",function(){return g}),n.d(t,"getLocaleCurrencyName",function(){return v}),n.d(t,"getLocaleCurrencySymbol",function(){return y}),n.d(t,"CURRENCIES",function(){return fe}),n.d(t,"\u0275parseCookieValue",function(){return k}),n.d(t,"CommonModule",function(){return Nt}),n.d(t,"DeprecatedI18NPipesModule",function(){return At}),n.d(t,"NgClass",function(){return Oe}),n.d(t,"NgForOf",function(){return De}),n.d(t,"NgForOfContext",function(){return ke}),n.d(t,"NgIf",function(){return Re}),n.d(t,"NgIfContext",function(){return Me}),n.d(t,"NgPlural",function(){return Fe}),n.d(t,"NgPluralCase",function(){return je}),n.d(t,"NgStyle",function(){return Ve}),n.d(t,"NgSwitch",function(){return Ne}),n.d(t,"NgSwitchCase",function(){return Ae}),n.d(t,"NgSwitchDefault",function(){return Le}),n.d(t,"NgTemplateOutlet",function(){return ze}),n.d(t,"NgComponentOutlet",function(){return Te}),n.d(t,"DOCUMENT",function(){return Lt}),n.d(t,"AsyncPipe",function(){return wt}),n.d(t,"DatePipe",function(){return Ye}),n.d(t,"I18nPluralPipe",function(){return Ot}),n.d(t,"I18nSelectPipe",function(){return Tt}),n.d(t,"JsonPipe",function(){return kt}),n.d(t,"LowerCasePipe",function(){return xt}),n.d(t,"CurrencyPipe",function(){return Rt}),n.d(t,"DecimalPipe",function(){return Dt}),n.d(t,"PercentPipe",function(){return It}),n.d(t,"SlicePipe",function(){return Mt}),n.d(t,"UpperCasePipe",function(){return Et}),n.d(t,"TitleCasePipe",function(){return Ct}),n.d(t,"DeprecatedDatePipe",function(){return it}),n.d(t,"DeprecatedCurrencyPipe",function(){return gt}),n.d(t,"DeprecatedDecimalPipe",function(){return ht}),n.d(t,"DeprecatedPercentPipe",function(){return mt}),n.d(t,"\u0275PLATFORM_BROWSER_ID",function(){return Ft}),n.d(t,"\u0275PLATFORM_SERVER_ID",function(){return jt}),n.d(t,"\u0275PLATFORM_WORKER_APP_ID",function(){return Vt}),n.d(t,"\u0275PLATFORM_WORKER_UI_ID",function(){return zt}),n.d(t,"isPlatformBrowser",function(){return ee}),n.d(t,"isPlatformServer",function(){return te}),n.d(t,"isPlatformWorkerApp",function(){return ne}),n.d(t,"isPlatformWorkerUi",function(){return re}),n.d(t,"VERSION",function(){return Bt}),n.d(t,"PlatformLocation",function(){return le}),n.d(t,"LOCATION_INITIALIZED",function(){return ae}),n.d(t,"LocationStrategy",function(){return se}),n.d(t,"APP_BASE_HREF",function(){return ue}),n.d(t,"HashLocationStrategy",function(){return de}),n.d(t,"PathLocationStrategy",function(){return pe}),n.d(t,"Location",function(){return ce}),n.d(t,"\u0275e",function(){return Be}),n.d(t,"\u0275d",function(){return S}),n.d(t,"\u0275a",function(){return Ce}),n.d(t,"\u0275b",function(){return T}),n.d(t,"\u0275g",function(){return yt}),n.d(t,"\u0275f",function(){return Pt});var ie=n("LMZF"),oe=n("6Xbx"),le=function(){},ae=new ie.InjectionToken("Location Initialized"),se=function(){},ue=new ie.InjectionToken("appBaseHref"),ce=function(){function e(t){var n=this;this._subject=new ie.EventEmitter,this._platformStrategy=t;var i=this._platformStrategy.getBaseHref();this._baseHref=e.stripTrailingSlash(r(i)),this._platformStrategy.onPopState(function(e){n._subject.emit({url:n.path(!0),pop:!0,type:e.type})})}return e.prototype.path=function(e){return void 0===e&&(e=!1),this.normalize(this._platformStrategy.path(e))},e.prototype.isCurrentPathEqualTo=function(t,n){return void 0===n&&(n=""),this.path()==this.normalize(t+e.normalizeQueryParams(n))},e.prototype.normalize=function(t){return e.stripTrailingSlash(function(e,t){return e&&t.startsWith(e)?t.substring(e.length):t}(this._baseHref,r(t)))},e.prototype.prepareExternalUrl=function(e){return e&&"/"!==e[0]&&(e="/"+e),this._platformStrategy.prepareExternalUrl(e)},e.prototype.go=function(e,t){void 0===t&&(t=""),this._platformStrategy.pushState(null,"",e,t)},e.prototype.replaceState=function(e,t){void 0===t&&(t=""),this._platformStrategy.replaceState(null,"",e,t)},e.prototype.forward=function(){this._platformStrategy.forward()},e.prototype.back=function(){this._platformStrategy.back()},e.prototype.subscribe=function(e,t,n){return this._subject.subscribe({next:e,error:t,complete:n})},e.normalizeQueryParams=function(e){return e&&"?"!==e[0]?"?"+e:e},e.joinWithSlash=function(e,t){if(0==e.length)return t;if(0==t.length)return e;var n=0;return e.endsWith("/")&&n++,t.startsWith("/")&&n++,2==n?e+t.substring(1):1==n?e+t:e+"/"+t},e.stripTrailingSlash=function(e){var t=e.match(/#|\?|$/),n=t&&t.index||e.length;return e.slice(0,n-("/"===e[n-1]?1:0))+e.slice(n)},e}(),de=function(e){function t(t,n){var r=e.call(this)||this;return r._platformLocation=t,r._baseHref="",null!=n&&(r._baseHref=n),r}return Object(oe.__extends)(t,e),t.prototype.onPopState=function(e){this._platformLocation.onPopState(e),this._platformLocation.onHashChange(e)},t.prototype.getBaseHref=function(){return this._baseHref},t.prototype.path=function(e){void 0===e&&(e=!1);var t=this._platformLocation.hash;return null==t&&(t="#"),t.length>0?t.substring(1):t},t.prototype.prepareExternalUrl=function(e){var t=ce.joinWithSlash(this._baseHref,e);return t.length>0?"#"+t:t},t.prototype.pushState=function(e,t,n,r){var i=this.prepareExternalUrl(n+ce.normalizeQueryParams(r));0==i.length&&(i=this._platformLocation.pathname),this._platformLocation.pushState(e,t,i)},t.prototype.replaceState=function(e,t,n,r){var i=this.prepareExternalUrl(n+ce.normalizeQueryParams(r));0==i.length&&(i=this._platformLocation.pathname),this._platformLocation.replaceState(e,t,i)},t.prototype.forward=function(){this._platformLocation.forward()},t.prototype.back=function(){this._platformLocation.back()},t}(se),pe=function(e){function t(t,n){var r=e.call(this)||this;if(r._platformLocation=t,null==n&&(n=r._platformLocation.getBaseHrefFromDOM()),null==n)throw new Error("No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.");return r._baseHref=n,r}return Object(oe.__extends)(t,e),t.prototype.onPopState=function(e){this._platformLocation.onPopState(e),this._platformLocation.onHashChange(e)},t.prototype.getBaseHref=function(){return this._baseHref},t.prototype.prepareExternalUrl=function(e){return ce.joinWithSlash(this._baseHref,e)},t.prototype.path=function(e){void 0===e&&(e=!1);var t=this._platformLocation.pathname+ce.normalizeQueryParams(this._platformLocation.search),n=this._platformLocation.hash;return n&&e?""+t+n:t},t.prototype.pushState=function(e,t,n,r){var i=this.prepareExternalUrl(n+ce.normalizeQueryParams(r));this._platformLocation.pushState(e,t,i)},t.prototype.replaceState=function(e,t,n,r){var i=this.prepareExternalUrl(n+ce.normalizeQueryParams(r));this._platformLocation.replaceState(e,t,i)},t.prototype.forward=function(){this._platformLocation.forward()},t.prototype.back=function(){this._platformLocation.back()},t}(se),fe={AOA:[,"Kz"],ARS:[,"$"],AUD:["A$","$"],BAM:[,"KM"],BBD:[,"$"],BDT:[,"\u09f3"],BMD:[,"$"],BND:[,"$"],BOB:[,"Bs"],BRL:["R$"],BSD:[,"$"],BWP:[,"P"],BYN:[,"\u0440."],BZD:[,"$"],CAD:["CA$","$"],CLP:[,"$"],CNY:["CN\xa5","\xa5"],COP:[,"$"],CRC:[,"\u20a1"],CUC:[,"$"],CUP:[,"$"],CZK:[,"K\u010d"],DKK:[,"kr"],DOP:[,"$"],EGP:[,"E\xa3"],ESP:[,"\u20a7"],EUR:["\u20ac"],FJD:[,"$"],FKP:[,"\xa3"],GBP:["\xa3"],GEL:[,"\u20be"],GIP:[,"\xa3"],GNF:[,"FG"],GTQ:[,"Q"],GYD:[,"$"],HKD:["HK$","$"],HNL:[,"L"],HRK:[,"kn"],HUF:[,"Ft"],IDR:[,"Rp"],ILS:["\u20aa"],INR:["\u20b9"],ISK:[,"kr"],JMD:[,"$"],JPY:["\xa5"],KHR:[,"\u17db"],KMF:[,"CF"],KPW:[,"\u20a9"],KRW:["\u20a9"],KYD:[,"$"],KZT:[,"\u20b8"],LAK:[,"\u20ad"],LBP:[,"L\xa3"],LKR:[,"Rs"],LRD:[,"$"],LTL:[,"Lt"],LVL:[,"Ls"],MGA:[,"Ar"],MMK:[,"K"],MNT:[,"\u20ae"],MUR:[,"Rs"],MXN:["MX$","$"],MYR:[,"RM"],NAD:[,"$"],NGN:[,"\u20a6"],NIO:[,"C$"],NOK:[,"kr"],NPR:[,"Rs"],NZD:["NZ$","$"],PHP:[,"\u20b1"],PKR:[,"Rs"],PLN:[,"z\u0142"],PYG:[,"\u20b2"],RON:[,"lei"],RUB:[,"\u20bd"],RUR:[,"\u0440."],RWF:[,"RF"],SBD:[,"$"],SEK:[,"kr"],SGD:[,"$"],SHP:[,"\xa3"],SRD:[,"$"],SSP:[,"\xa3"],STD:[,"Db"],SYP:[,"\xa3"],THB:[,"\u0e3f"],TOP:[,"T$"],TRY:[,"\u20ba"],TTD:[,"$"],TWD:["NT$","$"],UAH:[,"\u20b4"],USD:["$"],UYU:[,"$"],VEF:[,"Bs"],VND:["\u20ab"],XAF:["FCFA"],XCD:["EC$","$"],XOF:["CFA"],XPF:["CFPF"],ZAR:[,"R"],ZMW:[,"ZK"]},he=["en",[["a","p"],["AM","PM"]],[["AM","PM"],,],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",,"{1} 'at' {0}"],[".",",",";","%","+","-","E","\xd7","\u2030","\u221e","NaN",":"],["#,##0.###","#,##0%","\xa4#,##0.00","#E0"],"$","US Dollar",function(e){var t=Math.floor(Math.abs(e)),n=e.toString().replace(/^[^.]*\.?/,"").length;return 1===t&&0===n?1:5}],me={},ge=function(){var e={Decimal:0,Percent:1,Currency:2,Scientific:3};return e[e.Decimal]="Decimal",e[e.Percent]="Percent",e[e.Currency]="Currency",e[e.Scientific]="Scientific",e}(),ye=function(){var e={Zero:0,One:1,Two:2,Few:3,Many:4,Other:5};return e[e.Zero]="Zero",e[e.One]="One",e[e.Two]="Two",e[e.Few]="Few",e[e.Many]="Many",e[e.Other]="Other",e}(),ve=function(){var e={Format:0,Standalone:1};return e[e.Format]="Format",e[e.Standalone]="Standalone",e}(),be=function(){var e={Narrow:0,Abbreviated:1,Wide:2,Short:3};return e[e.Narrow]="Narrow",e[e.Abbreviated]="Abbreviated",e[e.Wide]="Wide",e[e.Short]="Short",e}(),_e=function(){var e={Short:0,Medium:1,Long:2,Full:3};return e[e.Short]="Short",e[e.Medium]="Medium",e[e.Long]="Long",e[e.Full]="Full",e}(),we=function(){var e={Decimal:0,Group:1,List:2,PercentSign:3,PlusSign:4,MinusSign:5,Exponential:6,SuperscriptingExponent:7,PerMille:8,Infinity:9,NaN:10,TimeSeparator:11,CurrencyDecimal:12,CurrencyGroup:13};return e[e.Decimal]="Decimal",e[e.Group]="Group",e[e.List]="List",e[e.PercentSign]="PercentSign",e[e.PlusSign]="PlusSign",e[e.MinusSign]="MinusSign",e[e.Exponential]="Exponential",e[e.SuperscriptingExponent]="SuperscriptingExponent",e[e.PerMille]="PerMille",e[e.Infinity]="Infinity",e[e.NaN]="NaN",e[e.TimeSeparator]="TimeSeparator",e[e.CurrencyDecimal]="CurrencyDecimal",e[e.CurrencyGroup]="CurrencyGroup",e}(),xe=function(){var e={Sunday:0,Monday:1,Tuesday:2,Wednesday:3,Thursday:4,Friday:5,Saturday:6};return e[e.Sunday]="Sunday",e[e.Monday]="Monday",e[e.Tuesday]="Tuesday",e[e.Wednesday]="Wednesday",e[e.Thursday]="Thursday",e[e.Friday]="Friday",e[e.Saturday]="Saturday",e}(),Ce=new ie.InjectionToken("UseV4Plurals"),Ee=function(){},Se=function(e){function t(t,n){var r=e.call(this)||this;return r.locale=t,r.deprecatedPluralFn=n,r}return Object(oe.__extends)(t,e),t.prototype.getPluralCategory=function(e,t){switch(this.deprecatedPluralFn?this.deprecatedPluralFn(t||this.locale,e):b(t||this.locale)(e)){case ye.Zero:return"zero";case ye.One:return"one";case ye.Two:return"two";case ye.Few:return"few";case ye.Many:return"many";default:return"other"}},t}(Ee),Oe=function(){function e(e,t,n,r){this._iterableDiffers=e,this._keyValueDiffers=t,this._ngEl=n,this._renderer=r,this._initialClasses=[]}return Object.defineProperty(e.prototype,"klass",{set:function(e){this._applyInitialClasses(!0),this._initialClasses="string"==typeof e?e.split(/\s+/):[],this._applyInitialClasses(!1),this._applyClasses(this._rawClass,!1)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClass",{set:function(e){this._cleanupClasses(this._rawClass),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof e?e.split(/\s+/):e,this._rawClass&&(Object(ie["\u0275isListLikeIterable"])(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())},enumerable:!0,configurable:!0}),e.prototype.ngDoCheck=function(){if(this._iterableDiffer){var e=this._iterableDiffer.diff(this._rawClass);e&&this._applyIterableChanges(e)}else if(this._keyValueDiffer){var t=this._keyValueDiffer.diff(this._rawClass);t&&this._applyKeyValueChanges(t)}},e.prototype._cleanupClasses=function(e){this._applyClasses(e,!0),this._applyInitialClasses(!1)},e.prototype._applyKeyValueChanges=function(e){var t=this;e.forEachAddedItem(function(e){return t._toggleClass(e.key,e.currentValue)}),e.forEachChangedItem(function(e){return t._toggleClass(e.key,e.currentValue)}),e.forEachRemovedItem(function(e){e.previousValue&&t._toggleClass(e.key,!1)})},e.prototype._applyIterableChanges=function(e){var t=this;e.forEachAddedItem(function(e){if("string"!=typeof e.item)throw new Error("NgClass can only toggle CSS classes expressed as strings, got "+Object(ie["\u0275stringify"])(e.item));t._toggleClass(e.item,!0)}),e.forEachRemovedItem(function(e){return t._toggleClass(e.item,!1)})},e.prototype._applyInitialClasses=function(e){var t=this;this._initialClasses.forEach(function(n){return t._toggleClass(n,!e)})},e.prototype._applyClasses=function(e,t){var n=this;e&&(Array.isArray(e)||e instanceof Set?e.forEach(function(e){return n._toggleClass(e,!t)}):Object.keys(e).forEach(function(r){null!=e[r]&&n._toggleClass(r,!t)}))},e.prototype._toggleClass=function(e,t){var n=this;(e=e.trim())&&e.split(/\s+/g).forEach(function(e){t?n._renderer.addClass(n._ngEl.nativeElement,e):n._renderer.removeClass(n._ngEl.nativeElement,e)})},e}(),Te=function(){function e(e){this._viewContainerRef=e,this._componentRef=null,this._moduleRef=null}return e.prototype.ngOnChanges=function(e){if(this._viewContainerRef.clear(),this._componentRef=null,this.ngComponentOutlet){var t=this.ngComponentOutletInjector||this._viewContainerRef.parentInjector;if(e.ngComponentOutletNgModuleFactory)if(this._moduleRef&&this._moduleRef.destroy(),this.ngComponentOutletNgModuleFactory){var n=t.get(ie.NgModuleRef);this._moduleRef=this.ngComponentOutletNgModuleFactory.create(n.injector)}else this._moduleRef=null;var r=(this._moduleRef?this._moduleRef.componentFactoryResolver:t.get(ie.ComponentFactoryResolver)).resolveComponentFactory(this.ngComponentOutlet);this._componentRef=this._viewContainerRef.createComponent(r,this._viewContainerRef.length,t,this.ngComponentOutletContent)}},e.prototype.ngOnDestroy=function(){this._moduleRef&&this._moduleRef.destroy()},e}(),ke=function(){function e(e,t,n,r){this.$implicit=e,this.ngForOf=t,this.index=n,this.count=r}return Object.defineProperty(e.prototype,"first",{get:function(){return 0===this.index},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"last",{get:function(){return this.index===this.count-1},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"even",{get:function(){return this.index%2==0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"odd",{get:function(){return!this.even},enumerable:!0,configurable:!0}),e}(),De=function(){function e(e,t,n){this._viewContainer=e,this._template=t,this._differs=n,this._differ=null}return Object.defineProperty(e.prototype,"ngForTrackBy",{get:function(){return this._trackByFn},set:function(e){Object(ie.isDevMode)()&&null!=e&&"function"!=typeof e&&console&&console.warn&&console.warn("trackBy must be a function, but received "+JSON.stringify(e)+". See https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html#!#change-propagation for more information."),this._trackByFn=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngForTemplate",{set:function(e){e&&(this._template=e)},enumerable:!0,configurable:!0}),e.prototype.ngOnChanges=function(e){if("ngForOf"in e){var t=e.ngForOf.currentValue;if(!this._differ&&t)try{this._differ=this._differs.find(t).create(this.ngForTrackBy)}catch(e){throw new Error("Cannot find a differ supporting object '"+t+"' of type '"+(t.name||typeof t)+"'. NgFor only supports binding to Iterables such as Arrays.")}}},e.prototype.ngDoCheck=function(){if(this._differ){var e=this._differ.diff(this.ngForOf);e&&this._applyChanges(e)}},e.prototype._applyChanges=function(e){var t=this,n=[];e.forEachOperation(function(e,r,i){if(null==e.previousIndex){var o=t._viewContainer.createEmbeddedView(t._template,new ke(null,t.ngForOf,-1,-1),i),l=new Ie(e,o);n.push(l)}else null==i?t._viewContainer.remove(r):(o=t._viewContainer.get(r),t._viewContainer.move(o,i),l=new Ie(e,o),n.push(l))});for(var r=0;r<n.length;r++)this._perViewChange(n[r].view,n[r].record);r=0;for(var i=this._viewContainer.length;r<i;r++){var o=this._viewContainer.get(r);o.context.index=r,o.context.count=i}e.forEachIdentityChange(function(e){t._viewContainer.get(e.currentIndex).context.$implicit=e.item})},e.prototype._perViewChange=function(e,t){e.context.$implicit=t.item},e}(),Ie=function(e,t){this.record=e,this.view=t},Re=function(){function e(e,t){this._viewContainer=e,this._context=new Me,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=t}return Object.defineProperty(e.prototype,"ngIf",{set:function(e){this._context.$implicit=this._context.ngIf=e,this._updateView()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngIfThen",{set:function(e){this._thenTemplateRef=e,this._thenViewRef=null,this._updateView()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngIfElse",{set:function(e){this._elseTemplateRef=e,this._elseViewRef=null,this._updateView()},enumerable:!0,configurable:!0}),e.prototype._updateView=function(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))},e}(),Me=function(){this.$implicit=null,this.ngIf=null},Pe=function(){function e(e,t){this._viewContainerRef=e,this._templateRef=t,this._created=!1}return e.prototype.create=function(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)},e.prototype.destroy=function(){this._created=!1,this._viewContainerRef.clear()},e.prototype.enforceState=function(e){e&&!this._created?this.create():!e&&this._created&&this.destroy()},e}(),Ne=function(){function e(){this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}return Object.defineProperty(e.prototype,"ngSwitch",{set:function(e){this._ngSwitch=e,0===this._caseCount&&this._updateDefaultCases(!0)},enumerable:!0,configurable:!0}),e.prototype._addCase=function(){return this._caseCount++},e.prototype._addDefault=function(e){this._defaultViews||(this._defaultViews=[]),this._defaultViews.push(e)},e.prototype._matchCase=function(e){var t=e==this._ngSwitch;return this._lastCasesMatched=this._lastCasesMatched||t,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),t},e.prototype._updateDefaultCases=function(e){if(this._defaultViews&&e!==this._defaultUsed){this._defaultUsed=e;for(var t=0;t<this._defaultViews.length;t++)this._defaultViews[t].enforceState(e)}},e}(),Ae=function(){function e(e,t,n){this.ngSwitch=n,n._addCase(),this._view=new Pe(e,t)}return e.prototype.ngDoCheck=function(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))},e}(),Le=function(){return function(e,t,n){n._addDefault(new Pe(e,t))}}(),Fe=function(){function e(e){this._localization=e,this._caseViews={}}return Object.defineProperty(e.prototype,"ngPlural",{set:function(e){this._switchValue=e,this._updateView()},enumerable:!0,configurable:!0}),e.prototype.addCase=function(e,t){this._caseViews[e]=t},e.prototype._updateView=function(){this._clearViews();var e=Object.keys(this._caseViews),t=O(this._switchValue,e,this._localization);this._activateView(this._caseViews[t])},e.prototype._clearViews=function(){this._activeView&&this._activeView.destroy()},e.prototype._activateView=function(e){e&&(this._activeView=e,this._activeView.create())},e}(),je=function(){return function(e,t,n,r){this.value=e;var i=!isNaN(Number(e));r.addCase(i?"="+e:e,new Pe(n,t))}}(),Ve=function(){function e(e,t,n){this._differs=e,this._ngEl=t,this._renderer=n}return Object.defineProperty(e.prototype,"ngStyle",{set:function(e){this._ngStyle=e,!this._differ&&e&&(this._differ=this._differs.find(e).create())},enumerable:!0,configurable:!0}),e.prototype.ngDoCheck=function(){if(this._differ){var e=this._differ.diff(this._ngStyle);e&&this._applyChanges(e)}},e.prototype._applyChanges=function(e){var t=this;e.forEachRemovedItem(function(e){return t._setStyle(e.key,null)}),e.forEachAddedItem(function(e){return t._setStyle(e.key,e.currentValue)}),e.forEachChangedItem(function(e){return t._setStyle(e.key,e.currentValue)})},e.prototype._setStyle=function(e,t){var n=e.split("."),r=n[1];this._renderer.setStyle(this._ngEl.nativeElement,n[0],t=null!=t&&r?""+t+r:t)},e}(),ze=function(){function e(e){this._viewContainerRef=e}return e.prototype.ngOnChanges=function(e){this._shouldRecreateView(e)?(this._viewRef&&this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._viewRef)),this.ngTemplateOutlet&&(this._viewRef=this._viewContainerRef.createEmbeddedView(this.ngTemplateOutlet,this.ngTemplateOutletContext))):this._viewRef&&this.ngTemplateOutletContext&&this._updateExistingContext(this.ngTemplateOutletContext)},e.prototype._shouldRecreateView=function(e){var t=e.ngTemplateOutletContext;return!!e.ngTemplateOutlet||t&&this._hasContextShapeChanged(t)},e.prototype._hasContextShapeChanged=function(e){var t=Object.keys(e.previousValue||{}),n=Object.keys(e.currentValue||{});if(t.length===n.length){for(var r=0,i=n;r<i.length;r++)if(-1===t.indexOf(i[r]))return!0;return!1}return!0},e.prototype._updateExistingContext=function(e){for(var t=0,n=Object.keys(e);t<n.length;t++){var r=n[t];this._viewRef.context[r]=this.ngTemplateOutletContext[r]}},e}(),Be=[Oe,Te,De,Re,ze,Ve,Ne,Ae,Le,Fe,je],He={},We=/((?:[^GyMLwWdEabBhHmsSzZO']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/,qe=function(){var e={Short:0,ShortGMT:1,Long:2,Extended:3};return e[e.Short]="Short",e[e.ShortGMT]="ShortGMT",e[e.Long]="Long",e[e.Extended]="Extended",e}(),Ue=function(){var e={FullYear:0,Month:1,Date:2,Hours:3,Minutes:4,Seconds:5,Milliseconds:6,Day:7};return e[e.FullYear]="FullYear",e[e.Month]="Month",e[e.Date]="Date",e[e.Hours]="Hours",e[e.Minutes]="Minutes",e[e.Seconds]="Seconds",e[e.Milliseconds]="Milliseconds",e[e.Day]="Day",e}(),Ge=function(){var e={DayPeriods:0,Days:1,Months:2,Eras:3};return e[e.DayPeriods]="DayPeriods",e[e.Days]="Days",e[e.Months]="Months",e[e.Eras]="Eras",e}(),Ke=0,$e=4,Ze={},Qe=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,Ye=function(){function e(e){this.locale=e}return e.prototype.transform=function(t,n,r,i){if(void 0===n&&(n="mediumDate"),null==t||""===t||t!=t)return null;"string"==typeof t&&(t=t.trim());var o;if(V(t))o=t;else if(isNaN(t-parseFloat(t)))if("string"==typeof t&&/^(\d{4}-\d{1,2}-\d{1,2})$/.test(t)){var l=t.split("-").map(function(e){return+e}),a=l[0],s=l[1],u=l[2];o=new Date(a,s-1,u)}else o=new Date(t);else o=new Date(parseFloat(t));if(!V(o)){var c=void 0;if("string"!=typeof t||!(c=t.match(Qe)))throw F(e,t);o=j(c)}return function(e,t,n,r){t=D(n,t)||t;for(var i,o=[];t;){if(!(i=We.exec(t))){o.push(t);break}var l=(o=o.concat(i.slice(1))).pop();if(!l)break;t=l}var a=e.getTimezoneOffset();r&&(a=L(r,a),e=function(e,t,n){var r=e.getTimezoneOffset();return function(e,t){return(e=new Date(e.getTime())).setMinutes(e.getMinutes()+t),e}(e,-1*(L(t,r)-r))}(e,r));var s="";return o.forEach(function(t){var r=function(e){if(Ze[e])return Ze[e];var t;switch(e){case"G":case"GG":case"GGG":t=P(Ge.Eras,be.Abbreviated);break;case"GGGG":t=P(Ge.Eras,be.Wide);break;case"GGGGG":t=P(Ge.Eras,be.Narrow);break;case"y":t=M(Ue.FullYear,1,0,!1,!0);break;case"yy":t=M(Ue.FullYear,2,0,!0,!0);break;case"yyy":t=M(Ue.FullYear,3,0,!1,!0);break;case"yyyy":t=M(Ue.FullYear,4,0,!1,!0);break;case"M":case"L":t=M(Ue.Month,1,1);break;case"MM":case"LL":t=M(Ue.Month,2,1);break;case"MMM":t=P(Ge.Months,be.Abbreviated);break;case"MMMM":t=P(Ge.Months,be.Wide);break;case"MMMMM":t=P(Ge.Months,be.Narrow);break;case"LLL":t=P(Ge.Months,be.Abbreviated,ve.Standalone);break;case"LLLL":t=P(Ge.Months,be.Wide,ve.Standalone);break;case"LLLLL":t=P(Ge.Months,be.Narrow,ve.Standalone);break;case"w":t=A(1);break;case"ww":t=A(2);break;case"W":t=A(1,!0);break;case"d":t=M(Ue.Date,1);break;case"dd":t=M(Ue.Date,2);break;case"E":case"EE":case"EEE":t=P(Ge.Days,be.Abbreviated);break;case"EEEE":t=P(Ge.Days,be.Wide);break;case"EEEEE":t=P(Ge.Days,be.Narrow);break;case"EEEEEE":t=P(Ge.Days,be.Short);break;case"a":case"aa":case"aaa":t=P(Ge.DayPeriods,be.Abbreviated);break;case"aaaa":t=P(Ge.DayPeriods,be.Wide);break;case"aaaaa":t=P(Ge.DayPeriods,be.Narrow);break;case"b":case"bb":case"bbb":t=P(Ge.DayPeriods,be.Abbreviated,ve.Standalone,!0);break;case"bbbb":t=P(Ge.DayPeriods,be.Wide,ve.Standalone,!0);break;case"bbbbb":t=P(Ge.DayPeriods,be.Narrow,ve.Standalone,!0);break;case"B":case"BB":case"BBB":t=P(Ge.DayPeriods,be.Abbreviated,ve.Format,!0);break;case"BBBB":t=P(Ge.DayPeriods,be.Wide,ve.Format,!0);break;case"BBBBB":t=P(Ge.DayPeriods,be.Narrow,ve.Format,!0);break;case"h":t=M(Ue.Hours,1,-12);break;case"hh":t=M(Ue.Hours,2,-12);break;case"H":t=M(Ue.Hours,1);break;case"HH":t=M(Ue.Hours,2);break;case"m":t=M(Ue.Minutes,1);break;case"mm":t=M(Ue.Minutes,2);break;case"s":t=M(Ue.Seconds,1);break;case"ss":t=M(Ue.Seconds,2);break;case"S":t=M(Ue.Milliseconds,1);break;case"SS":t=M(Ue.Milliseconds,2);break;case"SSS":t=M(Ue.Milliseconds,3);break;case"Z":case"ZZ":case"ZZZ":t=N(qe.Short);break;case"ZZZZZ":t=N(qe.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":t=N(qe.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":t=N(qe.Long);break;default:return null}return Ze[e]=t,t}(t);s+=r?r(e,n,a):"''"===t?"'":t.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),s}(o,n,i||this.locale,r)},e}(),Xe=function(){function e(){}return e.format=function(e,t,n,r){void 0===r&&(r={});var i=r.currency,o=r.currencyAsSymbol,l=void 0!==o&&o,a={minimumIntegerDigits:r.minimumIntegerDigits,minimumFractionDigits:r.minimumFractionDigits,maximumFractionDigits:r.maximumFractionDigits,style:ge[n].toLowerCase()};return n==ge.Currency&&(a.currency="string"==typeof i?i:void 0,a.currencyDisplay=l?"symbol":"code"),new Intl.NumberFormat(t,a).format(e)},e}(),Je=/((?:[^yMLdHhmsazZEwGjJ']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|J+|j+|m+|s+|a|z|Z|G+|w+))(.*)/,et={yMMMdjms:$(K([U("year",1),G("month",3),U("day",1),U("hour",1),U("minute",1),U("second",1)])),yMdjm:$(K([U("year",1),U("month",1),U("day",1),U("hour",1),U("minute",1)])),yMMMMEEEEd:$(K([U("year",1),G("month",4),G("weekday",4),U("day",1)])),yMMMMd:$(K([U("year",1),G("month",4),U("day",1)])),yMMMd:$(K([U("year",1),G("month",3),U("day",1)])),yMd:$(K([U("year",1),U("month",1),U("day",1)])),jms:$(K([U("hour",1),U("second",1),U("minute",1)])),jm:$(K([U("hour",1),U("minute",1)]))},tt={yyyy:$(U("year",4)),yy:$(U("year",2)),y:$(U("year",1)),MMMM:$(G("month",4)),MMM:$(G("month",3)),MM:$(U("month",2)),M:$(U("month",1)),LLLL:$(G("month",4)),L:$(G("month",1)),dd:$(U("day",2)),d:$(U("day",1)),HH:z(B($(q(U("hour",2),!1)))),H:B($(q(U("hour",1),!1))),hh:z(B($(q(U("hour",2),!0)))),h:B($(q(U("hour",1),!0))),jj:$(U("hour",2)),j:$(U("hour",1)),mm:z($(U("minute",2))),m:$(U("minute",1)),ss:z($(U("second",2))),s:$(U("second",1)),sss:$(U("second",3)),EEEE:$(G("weekday",4)),EEE:$(G("weekday",3)),EE:$(G("weekday",2)),E:$(G("weekday",1)),a:function(e){return function(t,n){return e(t,n).split(" ")[1]}}($(q(U("hour",1),!0))),Z:W("short"),z:W("long"),ww:$({}),w:$({}),G:$(G("era",1)),GG:$(G("era",2)),GGG:$(G("era",3)),GGGG:$(G("era",4))},nt=new Map,rt=function(){function e(){}return e.format=function(e,t,n){return function(e,t,n){var r=et[e];if(r)return r(t,n);var i=e,o=nt.get(i);if(!o){o=[];var l=void 0;Je.exec(e);for(var a=e;a;)(l=Je.exec(a))?a=(o=o.concat(l.slice(1))).pop():(o.push(a),a=null);nt.set(i,o)}return o.reduce(function(e,r){var i=tt[r];return e+(i?i(t,n):"''"===r?"'":r.replace(/(^'|'$)/g,"").replace(/''/g,"'"))},"")}(n,e,t)},e}(),it=function(){function e(e){this._locale=e}return e.prototype.transform=function(t,n){if(void 0===n&&(n="mediumDate"),null==t||""===t||t!=t)return null;var r;if("string"==typeof t&&(t=t.trim()),Z(t))r=t;else if(isNaN(t-parseFloat(t)))if("string"==typeof t&&/^(\d{4}-\d{1,2}-\d{1,2})$/.test(t)){var i=t.split("-").map(function(e){return parseInt(e,10)}),o=i[0],l=i[1],a=i[2];r=new Date(o,l-1,a)}else r=new Date(t);else r=new Date(parseFloat(t));if(!Z(r)){var s=void 0;if("string"!=typeof t||!(s=t.match(Qe)))throw F(e,t);r=j(s)}return rt.format(r,this._locale,e._ALIASES[n]||n)},e._ALIASES={medium:"yMMMdjms",short:"yMdjm",fullDate:"yMMMMEEEEd",longDate:"yMMMMd",mediumDate:"yMMMd",shortDate:"yMd",mediumTime:"jms",shortTime:"jm"},e}(),ot=/^(\d+)?\.((\d+)(-(\d+))?)?$/,lt=22,at=".",st="0",ut=";",ct=",",dt="#",pt="\xa4",ft="%",ht=function(){function e(e){this._locale=e}return e.prototype.transform=function(t,n){return X(e,this._locale,t,ge.Decimal,n)},e}(),mt=function(){function e(e){this._locale=e}return e.prototype.transform=function(t,n){return X(e,this._locale,t,ge.Percent,n)},e}(),gt=function(){function e(e){this._locale=e}return e.prototype.transform=function(t,n,r,i){return void 0===n&&(n="USD"),void 0===r&&(r=!1),X(e,this._locale,t,ge.Currency,i,n,r)},e}(),yt=[ht,mt,gt,it],vt=function(){function e(){}return e.prototype.createSubscription=function(e,t){return e.subscribe({next:t,error:function(e){throw e}})},e.prototype.dispose=function(e){e.unsubscribe()},e.prototype.onDestroy=function(e){e.unsubscribe()},e}(),bt=new(function(){function e(){}return e.prototype.createSubscription=function(e,t){return e.then(t,function(e){throw e})},e.prototype.dispose=function(e){},e.prototype.onDestroy=function(e){},e}()),_t=new vt,wt=function(){function e(e){this._ref=e,this._latestValue=null,this._latestReturnedValue=null,this._subscription=null,this._obj=null,this._strategy=null}return e.prototype.ngOnDestroy=function(){this._subscription&&this._dispose()},e.prototype.transform=function(e){return this._obj?e!==this._obj?(this._dispose(),this.transform(e)):this._latestValue===this._latestReturnedValue?this._latestReturnedValue:(this._latestReturnedValue=this._latestValue,ie.WrappedValue.wrap(this._latestValue)):(e&&this._subscribe(e),this._latestReturnedValue=this._latestValue,this._latestValue)},e.prototype._subscribe=function(e){var t=this;this._obj=e,this._strategy=this._selectStrategy(e),this._subscription=this._strategy.createSubscription(e,function(n){return t._updateLatestValue(e,n)})},e.prototype._selectStrategy=function(t){if(Object(ie["\u0275isPromise"])(t))return bt;if(Object(ie["\u0275isObservable"])(t))return _t;throw F(e,t)},e.prototype._dispose=function(){this._strategy.dispose(this._subscription),this._latestValue=null,this._latestReturnedValue=null,this._subscription=null,this._obj=null},e.prototype._updateLatestValue=function(e,t){e===this._obj&&(this._latestValue=t,this._ref.markForCheck())},e}(),xt=function(){function e(){}return e.prototype.transform=function(t){if(!t)return t;if("string"!=typeof t)throw F(e,t);return t.toLowerCase()},e}(),Ct=function(){function e(){}return e.prototype.transform=function(t){if(!t)return t;if("string"!=typeof t)throw F(e,t);return t.split(/\b/g).map(function(e){return function(e){return e?e[0].toUpperCase()+e.substr(1).toLowerCase():e}(e)}).join("")},e}(),Et=function(){function e(){}return e.prototype.transform=function(t){if(!t)return t;if("string"!=typeof t)throw F(e,t);return t.toUpperCase()},e}(),St=/#/g,Ot=function(){function e(e){this._localization=e}return e.prototype.transform=function(t,n,r){if(null==t)return"";if("object"!=typeof n||null===n)throw F(e,n);return n[O(t,Object.keys(n),this._localization,r)].replace(St,t.toString())},e}(),Tt=function(){function e(){}return e.prototype.transform=function(t,n){if(null==t)return"";if("object"!=typeof n||"string"!=typeof t)throw F(e,n);return n.hasOwnProperty(t)?n[t]:n.hasOwnProperty("other")?n.other:""},e}(),kt=function(){function e(){}return e.prototype.transform=function(e){return JSON.stringify(e,null,2)},e}(),Dt=function(){function e(e){this._locale=e}return e.prototype.transform=function(t,n,r){if(J(t))return null;var i=Q(t,r=r||this._locale,ge.Decimal,n),o=i.str,l=i.error;if(l)throw F(e,l);return o},e}(),It=function(){function e(e){this._locale=e}return e.prototype.transform=function(t,n,r){if(J(t))return null;var i=Q(t,r=r||this._locale,ge.Percent,n),o=i.str,l=i.error;if(l)throw F(e,l);return o},e}(),Rt=function(){function e(e){this._locale=e}return e.prototype.transform=function(t,n,r,i,o){if(void 0===r&&(r="symbol"),J(t))return null;o=o||this._locale,"boolean"==typeof r&&(console&&console.warn&&console.warn('Warning: the currency pipe has been changed in Angular v5. The symbolDisplay option (third parameter) is now a string instead of a boolean. The accepted values are "code", "symbol" or "symbol-narrow".'),r=r?"symbol":"code");var l=n||"USD";"code"!==r&&(l=function(e,t){var n=fe[l]||{},i=n[0]||l;return"wide"==("symbol"===r?"wide":"narrow")?i:n[1]||i}());var a=Q(t,o,ge.Currency,i,l),s=a.str,u=a.error;if(u)throw F(e,u);return s},e}(),Mt=function(){function e(){}return e.prototype.transform=function(t,n,r){if(null==t)return t;if(!this.supports(t))throw F(e,t);return t.slice(n,r)},e.prototype.supports=function(e){return"string"==typeof e||Array.isArray(e)},e}(),Pt=[wt,Et,xt,kt,Mt,Dt,It,Ct,Rt,Ye,Ot,Tt],Nt=function(){},At=function(){},Lt=new ie.InjectionToken("DocumentToken"),Ft="browser",jt="server",Vt="browserWorkerApp",zt="browserWorkerUi",Bt=new ie.Version("5.1.1")},Upor:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("6Xbx"),i=function(e){function t(){var t=e.call(this,"object unsubscribed");this.name=t.name="ObjectUnsubscribedError",this.stack=t.stack,this.message=t.message}return Object(r.__extends)(t,e),t}(Error)},"V+0c":function(e,t,n){e.exports=!n("umMR")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},V7AE:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("xIGM").a.Symbol,i="function"==typeof r&&"function"==typeof r.for?r.for("rxSubscriber"):"@@rxSubscriber"},VceJ:function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},"WGJ/":function(e,t,n){var r=n("p/bR");e.exports=function(e,t){var n=[];return r(e,!1,n.push,n,t),n}},Wo2w:function(e,t,n){var r=n("VceJ");e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},WsSm:function(e,t,n){"use strict";var r=n("KGrn"),i=n("CDXM"),o=n("lfBE"),l=n("gxdV"),a=n("rMsi"),s=n("lexG"),u=n("9ScN"),c=n("P6IN"),d=n("TJLg"),p=n("3r0D")("iterator"),f=!([].keys&&"next"in[].keys()),h=function(){return this};e.exports=function(e,t,n,m,g,y,v){u(n,t,m);var b,_,w,x=function(e){if(!f&&e in O)return O[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},C=t+" Iterator",E="values"==g,S=!1,O=e.prototype,T=O[p]||O["@@iterator"]||g&&O[g],k=!f&&T||x(g),D=g?E?x("entries"):k:void 0,I="Array"==t?O.entries||T:T;if(I&&(w=d(I.call(new e)))!==Object.prototype&&w.next&&(c(w,C,!0),r||a(w,p)||l(w,p,h)),E&&T&&"values"!==T.name&&(S=!0,k=function(){return T.call(this)}),r&&!v||!f&&!S&&O[p]||l(O,p,k),s[t]=k,s[C]=h,g)if(b={values:E?k:x("values"),keys:y?k:x("keys"),entries:D},v)for(_ in b)_ in O||o(O,_,b[_]);else i(i.P+i.F*(f||S),t,b);return b}},Wy9r:function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e}},"X0O/":function(e,t,n){var r=n("gBtn"),i=n("+pQw"),o=n("TJLg"),l=r.has,a=r.get,s=r.key,u=function(e,t,n){if(l(e,t,n))return a(e,t,n);var r=o(t);return null!==r?u(e,r,n):void 0};r.exp({getMetadata:function(e,t){return u(e,i(t),arguments.length<3?void 0:s(arguments[2]))}})},X3fp:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(e){var t=e.Symbol;if("function"==typeof t)return t.iterator||(t.iterator=t("iterator polyfill")),t.iterator;var n=e.Set;if(n&&"function"==typeof(new n)["@@iterator"])return"@@iterator";var r=e.Map;if(r)for(var i=Object.getOwnPropertyNames(r.prototype),o=0;o<i.length;++o){var l=i[o];if("entries"!==l&&"size"!==l&&r.prototype[l]===r.prototype.entries)return l}return"@@iterator"}(n("xIGM").a)},XRS9:function(e,t,n){"use strict";var r=n("pBmS"),i=n("xI8H").getWeak,o=n("+pQw"),l=n("JXkd"),a=n("Lcie"),s=n("p/bR"),u=n("BCYq"),c=n("rMsi"),d=n("Y5fy"),p=u(5),f=u(6),h=0,m=function(e){return e._l||(e._l=new g)},g=function(){this.a=[]},y=function(e,t){return p(e.a,function(e){return e[0]===t})};g.prototype={get:function(e){var t=y(this,e);if(t)return t[1]},has:function(e){return!!y(this,e)},set:function(e,t){var n=y(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=f(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,o){var u=e(function(e,r){a(e,u,t,"_i"),e._t=t,e._i=h++,e._l=void 0,void 0!=r&&s(r,n,e[o],e)});return r(u.prototype,{delete:function(e){if(!l(e))return!1;var n=i(e);return!0===n?m(d(this,t)).delete(e):n&&c(n,this._i)&&delete n[this._i]},has:function(e){if(!l(e))return!1;var n=i(e);return!0===n?m(d(this,t)).has(e):n&&c(n,this._i)}}),u},def:function(e,t,n){var r=i(o(t),!0);return!0===r?m(e).set(t,n):r[e._i]=n,e},ufstore:m}},Y5fy:function(e,t,n){var r=n("JXkd");e.exports=function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}},YRqN:function(e,t,n){"use strict";t.b=function(e,t){return void 0===t&&(t=0),function(n){return n.lift(new l(e,t))}},n.d(t,"a",function(){return a});var r=n("6Xbx"),i=n("E9/g"),o=n("PAZ8"),l=function(){function e(e,t){void 0===t&&(t=0),this.scheduler=e,this.delay=t}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.scheduler,this.delay))},e}(),a=function(e){function t(t,n,r){void 0===r&&(r=0),e.call(this,t),this.scheduler=n,this.delay=r}return Object(r.__extends)(t,e),t.dispatch=function(e){e.notification.observe(e.destination),this.unsubscribe()},t.prototype.scheduleMessage=function(e){this.add(this.scheduler.schedule(t.dispatch,this.delay,new s(e,this.destination)))},t.prototype._next=function(e){this.scheduleMessage(o.a.createNext(e))},t.prototype._error=function(e){this.scheduleMessage(o.a.createError(e))},t.prototype._complete=function(){this.scheduleMessage(o.a.createComplete())},t}(i.a),s=function(e,t){this.notification=e,this.destination=t}},YuZA:function(e,t){function n(e){return Promise.resolve().then(function(){throw new Error("Cannot find module '"+e+"'.")})}n.keys=function(){return[]},n.resolve=n,e.exports=n,n.id="YuZA"},ZI9W:function(e,t,n){"use strict";var r=n("3LDD"),i=n("Y5fy");e.exports=n("cpZ/")("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=r.getEntry(i(this,"Map"),e);return t&&t.v},set:function(e,t){return r.def(i(this,"Map"),0===e?0:e,t)}},r,!0)},"a/Sk":function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},a7b8:function(e,t,n){var r=n("JXkd"),i=n("rKhO"),o=n("3r0D")("species");e.exports=function(e){var t;return i(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!i(t.prototype)||(t=void 0),r(t)&&null===(t=t[o])&&(t=void 0)),void 0===t?Array:t}},b4gG:function(e,t){var n=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=n)},bbdN:function(e,t,n){var r,i=i||function(e){"use strict";if(!(void 0===e||"undefined"!=typeof navigator&&/MSIE [1-9]\./.test(navigator.userAgent))){var t=function(){return e.URL||e.webkitURL||e},n=e.document.createElementNS("http://www.w3.org/1999/xhtml","a"),r="download"in n,i=/constructor/i.test(e.HTMLElement)||e.safari,o=/CriOS\/[\d]+/.test(navigator.userAgent),l=function(t){(e.setImmediate||e.setTimeout)(function(){throw t},0)},a=function(e){setTimeout(function(){"string"==typeof e?t().revokeObjectURL(e):e.remove()},4e4)},s=function(e){return/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([String.fromCharCode(65279),e],{type:e.type}):e},u=function(u,c,d){d||(u=s(u));var p,f=this,h="application/octet-stream"===u.type,m=function(){!function(e,t,n){for(var r=(t=[].concat(t)).length;r--;){var i=e["on"+t[r]];if("function"==typeof i)try{i.call(e,e)}catch(e){l(e)}}}(f,"writestart progress write writeend".split(" "))};if(f.readyState=f.INIT,r)return p=t().createObjectURL(u),void setTimeout(function(){n.href=p,n.download=c,function(e){var t=new MouseEvent("click");e.dispatchEvent(t)}(n),m(),a(p),f.readyState=f.DONE});!function(){if((o||h&&i)&&e.FileReader){var n=new FileReader;return n.onloadend=function(){var t=o?n.result:n.result.replace(/^data:[^;]*;/,"data:attachment/file;");e.open(t,"_blank")||(e.location.href=t),t=void 0,f.readyState=f.DONE,m()},n.readAsDataURL(u),void(f.readyState=f.INIT)}p||(p=t().createObjectURL(u)),h?e.location.href=p:e.open(p,"_blank")||(e.location.href=p),f.readyState=f.DONE,m(),a(p)}()},c=u.prototype;return"undefined"!=typeof navigator&&navigator.msSaveOrOpenBlob?function(e,t,n){return t=t||e.name||"download",n||(e=s(e)),navigator.msSaveOrOpenBlob(e,t)}:(c.abort=function(){},c.readyState=c.INIT=0,c.WRITING=1,c.DONE=2,c.error=c.onwritestart=c.onprogress=c.onwrite=c.onabort=c.onerror=c.onwriteend=null,function(e,t,n){return new u(e,t||e.name||"download",n)})}}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||this.content);void 0!==e&&e.exports?e.exports.saveAs=i:null!==n("MwgA")&&null!==n("f8Ud")&&(void 0===(r=function(){return i}.call(t,n,t,e))||(e.exports=r))},bywS:function(e,t,n){"use strict";function r(e){return e}var i=n("wP3s");t.a=function(e){return void 0===e&&(e=Number.POSITIVE_INFINITY),Object(i.a)(r,null,e)}},c09d:function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},cDNt:function(e,t,n){"use strict";function r(){if(null==ol)try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){return ol=!0}}))}finally{ol=ol||!1}return ol}function i(){if(ll)return ll;if("object"!=typeof document||!document)return ll=new Set(fl);var e=document.createElement("input");return ll=new Set(fl.filter(function(t){return e.setAttribute("type",t),e.type===t}))}function o(e,t){return void 0===t&&(t=Tl),function(e){return function(t){return t.lift(new Il(e))}}(function(){return Nl(e,t)})}function l(e,t,n){return e||new Fl(t,n)}function a(e,t,n){return e||new jl(t,n)}function s(){throw Error("Host already has a portal attached")}function u(e){return function(t){return 0===e?new Jl.a:t.lift(new ea(e))}}function c(e){return null!=e&&""+e!="false"}function d(e,t){return void 0===t&&(t=0),isNaN(parseFloat(e))||isNaN(Number(e))?t:Number(e)}function p(e){return Array.isArray(e)?e:[e]}function f(){return Error("Scroll strategy has already been attached.")}function h(e,t){return t.some(function(t){return e.bottom<t.top||e.top>t.bottom||e.right<t.left||e.left>t.right})}function m(e,t){return t.some(function(t){return e.top<t.top||e.bottom>t.bottom||e.left<t.left||e.right>t.right})}function g(e){return"string"==typeof e?e:e+"px"}function y(e,t){return e||new pa(t)}function v(e,t){return e||new fa(t)}function b(e){return function(){return e.scrollStrategies.reposition()}}function _(e,t){return void 0===t&&(t=Tl),function(n){return n.lift(new ba(e,t))}}function w(e){e.debouncedNext()}function x(e,t,n){return function(r){return r.lift(new xa(e,t,n))}}function C(e){if(!e.hasAttribute("tabindex")||void 0===e.tabIndex)return!1;var t=e.getAttribute("tabindex");return"-32768"!=t&&!(!t||isNaN(parseInt(t,10)))}function E(e){if(!C(e))return null;var t=parseInt(e.getAttribute("tabindex")||"",10);return isNaN(t)?-1:t}function S(e,t){return(e.getAttribute(t)||"").match(/\S+/g)||[]}function O(e,t){return e||new Pa(t)}function T(e,t,n){return e||new Aa(t,n)}function k(e,t,n){return e||new La(t,n)}function D(e){return function(e){function t(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=e.apply(this,t)||this;return r._disabled=!1,r}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"disabled",{get:function(){return this._disabled},set:function(e){this._disabled=c(e)},enumerable:!0,configurable:!0}),t}(e)}function I(e,t){return function(e){function n(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var i=e.apply(this,n)||this;return i.color=t,i}return Object(bl.__extends)(n,e),Object.defineProperty(n.prototype,"color",{get:function(){return this._color},set:function(e){var n=e||t;n!==this._color&&(this._color&&this._elementRef.nativeElement.classList.remove("mat-"+this._color),n&&this._elementRef.nativeElement.classList.add("mat-"+n),this._color=n)},enumerable:!0,configurable:!0}),n}(e)}function R(e){return function(e){function t(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=e.apply(this,t)||this;return r._disableRipple=!1,r}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"disableRipple",{get:function(){return this._disableRipple},set:function(e){this._disableRipple=c(e)},enumerable:!0,configurable:!0}),t}(e)}function M(e,t){for(var n=Array(e),r=0;r<e;r++)n[r]=t(r);return n}function P(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return function(t){var n=e[e.length-1];Object(Pl.a)(n)?e.pop():n=null;var r=e.length;return function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return 1===e.length||2===e.length&&Object(Pl.a)(e[1])?Ds(e[0]):Object(Is.a)(1)(vl.apply(void 0,e))}(1===r?new gs.a(e[0],n):r>1?new yl.a(e,n):new Jl.a(n),t)}}function N(){throw Error("Attempting to attach dialog content after content is already attached")}function A(e){return function(){return e.scrollStrategies.block()}}function L(e){return al["\u0275vid"](0,[(e()(),al["\u0275and"](0,null,null,0))],null,null)}function F(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{_portalOutlet:0}),(e()(),al["\u0275and"](16777216,null,null,1,null,L)),al["\u0275did"](2,212992,[[1,4]],0,$l,[al.ComponentFactoryResolver,al.ViewContainerRef],{portal:[0,"portal"]},null)],function(e,t){e(t,2,0,"")},null)}function j(e){return function(t){var n=new Ys(e),r=t.lift(n);return n.caught=r}}function V(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/gi,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%2B/gi,"+").replace(/%3D/gi,"=").replace(/%3F/gi,"?").replace(/%2F/gi,"/")}function z(e){return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer}function B(e){return"undefined"!=typeof Blob&&e instanceof Blob}function H(e){return"undefined"!=typeof FormData&&e instanceof FormData}function W(e,t){return{body:t,headers:e.headers,observe:e.observe,params:e.params,reportProgress:e.reportProgress,responseType:e.responseType,withCredentials:e.withCredentials}}function q(e,t){return void 0===t&&(t=[]),t?t.reduceRight(function(e,t){return new yu(e,t)},e):e}function U(e){return Error('Unable to find icon with the name "'+e+'"')}function G(e){return Error("The URL provided to MatIconRegistry was not trusted as a resource URL via Angular's DomSanitizer. Attempted URL was \""+e+'".')}function K(e,t,n){return e||new Nu(t,n)}function $(e){return e.cloneNode(!0)}function Z(e,t){return e+":"+t}function Q(e){return Error("A hint was already declared for 'align=\""+e+"\"'.")}function Y(e){return Error("MatDatepicker: No provider found for "+e+". You must import one of the following modules at your application root: MatNativeDateModule, MatMomentDateModule, or provide a custom implementation.")}function X(e){return function(){return e.scrollStrategies.reposition()}}function J(e){return al["\u0275vid"](2,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[["class","mat-button-wrapper"]],null,null,null,null,null)),al["\u0275ncd"](null,0),(e()(),al["\u0275eld"](2,0,null,null,1,"div",[["class","mat-button-ripple mat-ripple"],["matRipple",""]],[[2,"mat-button-ripple-round",null],[2,"mat-ripple-unbounded",null]],null,null,null,null)),al["\u0275did"](3,671744,null,0,ss,[al.ElementRef,al.NgZone,pl,[2,as]],{trigger:[0,"trigger"],centered:[1,"centered"],disabled:[2,"disabled"]},null),(e()(),al["\u0275eld"](4,0,null,null,0,"div",[["class","mat-button-focus-overlay"]],null,null,null,null,null))],function(e,t){var n=t.component;e(t,3,0,n._getHostElement(),n._isIconButton,n._isRippleDisabled())},function(e,t){var n=t.component;e(t,2,0,n._isRoundButton||n._isIconButton,al["\u0275nov"](t,3).unbounded)})}function ee(e){return al["\u0275vid"](2,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[["class","mat-button-wrapper"]],null,null,null,null,null)),al["\u0275ncd"](null,0),(e()(),al["\u0275eld"](2,0,null,null,1,"div",[["class","mat-button-ripple mat-ripple"],["matRipple",""]],[[2,"mat-button-ripple-round",null],[2,"mat-ripple-unbounded",null]],null,null,null,null)),al["\u0275did"](3,671744,null,0,ss,[al.ElementRef,al.NgZone,pl,[2,as]],{trigger:[0,"trigger"],centered:[1,"centered"],disabled:[2,"disabled"]},null),(e()(),al["\u0275eld"](4,0,null,null,0,"div",[["class","mat-button-focus-overlay"]],null,null,null,null,null))],function(e,t){var n=t.component;e(t,3,0,n._getHostElement(),n._isIconButton,n._isRippleDisabled())},function(e,t){var n=t.component;e(t,2,0,n._isRoundButton||n._isIconButton,al["\u0275nov"](t,3).unbounded)})}function te(e){return al["\u0275vid"](2,[al["\u0275ncd"](null,0)],null,null)}function ne(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-month-view",[],null,[[null,"selectedChange"],[null,"_userSelection"]],function(e,t,n){var r=!0,i=e.component;return"selectedChange"===t&&(r=!1!==i._dateSelected(n)&&r),"_userSelection"===t&&(r=!1!==i._userSelected()&&r),r},pe,uc)),al["\u0275did"](1,1097728,[[1,4]],0,Qu,[[2,Wa],[2,qa],al.ChangeDetectorRef],{activeDate:[0,"activeDate"],selected:[1,"selected"],dateFilter:[2,"dateFilter"]},{selectedChange:"selectedChange",_userSelection:"_userSelection"})],function(e,t){var n=t.component;e(t,1,0,n._activeDate,n.selected,n._dateFilterForViews)},null)}function re(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-year-view",[],null,[[null,"selectedChange"]],function(e,t,n){var r=!0;return"selectedChange"===t&&(r=!1!==e.component._monthSelected(n)&&r),r},fe,cc)),al["\u0275did"](1,1097728,[[2,4]],0,Yu,[[2,Wa],[2,qa],al.ChangeDetectorRef],{activeDate:[0,"activeDate"],selected:[1,"selected"],dateFilter:[2,"dateFilter"]},{selectedChange:"selectedChange"})],function(e,t){var n=t.component;e(t,1,0,n._activeDate,n.selected,n._dateFilterForViews)},null)}function ie(e){return al["\u0275vid"](2,[al["\u0275qud"](671088640,1,{monthView:0}),al["\u0275qud"](671088640,2,{yearView:0}),(e()(),al["\u0275eld"](2,0,null,null,13,"div",[["class","mat-calendar-header"]],null,null,null,null,null)),(e()(),al["\u0275eld"](3,0,null,null,12,"div",[["class","mat-calendar-controls"]],null,null,null,null,null)),(e()(),al["\u0275eld"](4,0,null,null,4,"button",[["class","mat-calendar-period-button mat-button"],["mat-button",""]],[[1,"aria-label",0],[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component._currentPeriodClicked()&&r),r},J,nc)),al["\u0275did"](5,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](6,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](7,0,["",""])),(e()(),al["\u0275eld"](8,0,null,0,0,"div",[["class","mat-calendar-arrow"]],[[2,"mat-calendar-invert",null]],null,null,null,null)),(e()(),al["\u0275eld"](9,0,null,null,0,"div",[["class","mat-calendar-spacer"]],null,null,null,null,null)),(e()(),al["\u0275eld"](10,0,null,null,2,"button",[["class","mat-calendar-previous-button mat-icon-button"],["mat-icon-button",""]],[[1,"aria-label",0],[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component._previousClicked()&&r),r},J,nc)),al["\u0275did"](11,180224,null,0,$s,[al.ElementRef,pl,La],{disabled:[0,"disabled"]},null),al["\u0275did"](12,16384,null,0,Ks,[],null,null),(e()(),al["\u0275eld"](13,0,null,null,2,"button",[["class","mat-calendar-next-button mat-icon-button"],["mat-icon-button",""]],[[1,"aria-label",0],[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component._nextClicked()&&r),r},J,nc)),al["\u0275did"](14,180224,null,0,$s,[al.ElementRef,pl,La],{disabled:[0,"disabled"]},null),al["\u0275did"](15,16384,null,0,Ks,[],null,null),(e()(),al["\u0275eld"](16,0,null,null,6,"div",[["cdkMonitorSubtreeFocus",""],["class","mat-calendar-content"]],null,[[null,"keydown"]],function(e,t,n){var r=!0;return"keydown"===t&&(r=!1!==e.component._handleCalendarBodyKeydown(n)&&r),r},null,null)),al["\u0275did"](17,16384,null,0,cl.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),al["\u0275did"](18,147456,null,0,Fa,[al.ElementRef,La],null,null),(e()(),al["\u0275and"](16777216,null,null,1,null,ne)),al["\u0275did"](20,278528,null,0,cl.NgSwitchCase,[al.ViewContainerRef,al.TemplateRef,cl.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,re)),al["\u0275did"](22,16384,null,0,cl.NgSwitchDefault,[al.ViewContainerRef,al.TemplateRef,cl.NgSwitch],null,null)],function(e,t){var n=t.component;e(t,11,0,!n._previousEnabled()),e(t,14,0,!n._nextEnabled()),e(t,17,0,n._monthView),e(t,20,0,!0)},function(e,t){var n=t.component;e(t,4,0,n._periodButtonLabel,al["\u0275nov"](t,5).disabled||null),e(t,7,0,n._periodButtonText),e(t,8,0,!n._monthView),e(t,10,0,n._prevButtonLabel,al["\u0275nov"](t,11).disabled||null),e(t,13,0,n._nextButtonLabel,al["\u0275nov"](t,14).disabled||null)})}function oe(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"tr",[["aria-hidden","true"]],null,null,null,null,null)),(e()(),al["\u0275eld"](1,0,null,null,1,"td",[["class","mat-calendar-body-label"]],[[1,"colspan",0],[4,"paddingTop","%"],[4,"paddingBottom","%"]],null,null,null,null)),(e()(),al["\u0275ted"](2,null,["",""]))],null,function(e,t){var n=t.component;e(t,1,0,n.numCols,50*n.cellAspectRatio/n.numCols,50*n.cellAspectRatio/n.numCols),e(t,2,0,n.label)})}function le(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"td",[["aria-hidden","true"],["class","mat-calendar-body-label"]],[[1,"colspan",0],[4,"paddingTop","%"],[4,"paddingBottom","%"]],null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){var n=t.component;e(t,0,0,n._firstRowOffset,50*n.cellAspectRatio/n.numCols,50*n.cellAspectRatio/n.numCols),e(t,1,0,n._firstRowOffset>=n.labelMinRequiredCells?n.label:"")})}function ae(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"td",[["class","mat-calendar-body-cell"],["role","gridcell"]],[[8,"tabIndex",0],[2,"mat-calendar-body-disabled",null],[2,"mat-calendar-body-active",null],[1,"aria-label",0],[1,"aria-disabled",0],[4,"width","%"],[4,"paddingTop","%"],[4,"paddingBottom","%"]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component._cellClicked(e.context.$implicit)&&r),r},null,null)),(e()(),al["\u0275eld"](1,0,null,null,1,"div",[["class","mat-calendar-body-cell-content"]],[[2,"mat-calendar-body-selected",null],[2,"mat-calendar-body-today",null]],null,null,null,null)),(e()(),al["\u0275ted"](2,null,["",""]))],null,function(e,t){var n=t.component;e(t,0,0,n._isActiveCell(t.parent.context.index,t.context.index)?0:-1,!t.context.$implicit.enabled,n._isActiveCell(t.parent.context.index,t.context.index),t.context.$implicit.ariaLabel,!t.context.$implicit.enabled||null,100/n.numCols,50*n.cellAspectRatio/n.numCols,50*n.cellAspectRatio/n.numCols),e(t,1,0,n.selectedValue===t.context.$implicit.value,n.todayValue===t.context.$implicit.value),e(t,2,0,t.context.$implicit.displayValue)})}function se(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"tr",[["role","row"]],null,null,null,null,null)),(e()(),al["\u0275and"](16777216,null,null,1,null,le)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,ae)),al["\u0275did"](4,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],function(e,t){e(t,2,0,0===t.context.index&&t.component._firstRowOffset),e(t,4,0,t.context.$implicit)},null)}function ue(e){return al["\u0275vid"](2,[(e()(),al["\u0275and"](16777216,null,null,1,null,oe)),al["\u0275did"](1,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,se)),al["\u0275did"](3,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],function(e,t){var n=t.component;e(t,1,0,n._firstRowOffset<n.labelMinRequiredCells),e(t,3,0,n.rows)},null)}function ce(e){return al["\u0275vid"](2,[al["\u0275qud"](402653184,1,{_calendar:0}),(e()(),al["\u0275eld"](1,0,null,null,3,"mat-calendar",[["cdkTrapFocus",""],["class","mat-calendar"]],[[8,"id",0]],[[null,"selectedChange"],[null,"_userSelection"]],function(e,t,n){var r=!0,i=e.component;return"selectedChange"===t&&(r=!1!==i.datepicker._select(n)&&r),"_userSelection"===t&&(r=!1!==i.datepicker.close()&&r),r},ie,oc)),al["\u0275did"](2,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275did"](3,1196032,null,0,Ta,[al.ElementRef,Oa,cl.DOCUMENT],{enabled:[0,"enabled"]},null),al["\u0275did"](4,1753088,[[1,4]],0,Xu,[al.ElementRef,Ku,al.NgZone,[2,Wa],[2,qa],al.ChangeDetectorRef],{startAt:[0,"startAt"],startView:[1,"startView"],selected:[2,"selected"],minDate:[3,"minDate"],maxDate:[4,"maxDate"],dateFilter:[5,"dateFilter"]},{selectedChange:"selectedChange",_userSelection:"_userSelection"})],function(e,t){var n=t.component;e(t,2,0,n.datepicker.panelClass),e(t,3,0,""),e(t,4,0,n.datepicker.startAt,n.datepicker.startView,n.datepicker._selected,n.datepicker._minDate,n.datepicker._maxDate,n.datepicker._dateFilter)},function(e,t){e(t,1,0,t.component.datepicker.id)})}function de(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"th",[],[[1,"aria-label",0]],null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,0,0,t.context.$implicit.long),e(t,1,0,t.context.$implicit.narrow)})}function pe(e){return al["\u0275vid"](2,[(e()(),al["\u0275eld"](0,0,null,null,8,"table",[["class","mat-calendar-table"]],null,null,null,null,null)),(e()(),al["\u0275eld"](1,0,null,null,5,"thead",[["class","mat-calendar-table-header"]],null,null,null,null,null)),(e()(),al["\u0275eld"](2,0,null,null,2,"tr",[],null,null,null,null,null)),(e()(),al["\u0275and"](16777216,null,null,1,null,de)),al["\u0275did"](4,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275eld"](5,0,null,null,1,"tr",[],null,null,null,null,null)),(e()(),al["\u0275eld"](6,0,null,null,0,"th",[["aria-hidden","true"],["class","mat-calendar-table-header-divider"],["colspan","7"]],null,null,null,null,null)),(e()(),al["\u0275eld"](7,0,null,null,1,"tbody",[["class","mat-calendar-body"],["mat-calendar-body",""],["role","grid"]],null,[[null,"selectedValueChange"]],function(e,t,n){var r=!0;return"selectedValueChange"===t&&(r=!1!==e.component._dateSelected(n)&&r),r},ue,lc)),al["\u0275did"](8,49152,null,0,Zu,[],{label:[0,"label"],rows:[1,"rows"],todayValue:[2,"todayValue"],selectedValue:[3,"selectedValue"],labelMinRequiredCells:[4,"labelMinRequiredCells"],activeCell:[5,"activeCell"]},{selectedValueChange:"selectedValueChange"})],function(e,t){var n=t.component;e(t,4,0,n._weekdays),e(t,8,0,n._monthLabel,n._weeks,n._todayDate,n._selectedDate,3,n._dateAdapter.getDate(n.activeDate)-1)},null)}function fe(e){return al["\u0275vid"](2,[(e()(),al["\u0275eld"](0,0,null,null,5,"table",[["class","mat-calendar-table"]],null,null,null,null,null)),(e()(),al["\u0275eld"](1,0,null,null,2,"thead",[["class","mat-calendar-table-header"]],null,null,null,null,null)),(e()(),al["\u0275eld"](2,0,null,null,1,"tr",[],null,null,null,null,null)),(e()(),al["\u0275eld"](3,0,null,null,0,"th",[["class","mat-calendar-table-header-divider"],["colspan","4"]],null,null,null,null,null)),(e()(),al["\u0275eld"](4,0,null,null,1,"tbody",[["allowDisabledSelection","true"],["class","mat-calendar-body"],["mat-calendar-body",""],["role","grid"]],null,[[null,"selectedValueChange"]],function(e,t,n){var r=!0;return"selectedValueChange"===t&&(r=!1!==e.component._monthSelected(n)&&r),r},ue,lc)),al["\u0275did"](5,49152,null,0,Zu,[],{label:[0,"label"],rows:[1,"rows"],todayValue:[2,"todayValue"],selectedValue:[3,"selectedValue"],labelMinRequiredCells:[4,"labelMinRequiredCells"],numCols:[5,"numCols"],allowDisabledSelection:[6,"allowDisabledSelection"],activeCell:[7,"activeCell"],cellAspectRatio:[8,"cellAspectRatio"]},{selectedValueChange:"selectedValueChange"})],function(e,t){var n=t.component;e(t,5,0,n._yearLabel,n._months,n._todayMonth,n._selectedMonth,2,4,"true",n._dateAdapter.getMonth(n.activeDate),4/7)},null)}function he(e){return function(){return e.scrollStrategies.reposition({scrollThrottle:dc})}}function me(e){return al["\u0275vid"](2,[(e()(),al["\u0275eld"](0,0,null,null,2,"div",[["class","mat-tooltip"]],[[4,"transform-origin",null],[24,"@state",0]],[[null,"@state.start"],[null,"@state.done"]],function(e,t,n){var r=!0,i=e.component;return"@state.start"===t&&(r=!1!==i._animationStart()&&r),"@state.done"===t&&(r=!1!==i._animationDone(n)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(e()(),al["\u0275ted"](2,null,["",""]))],function(e,t){e(t,1,0,"mat-tooltip",t.component.tooltipClass)},function(e,t){var n=t.component;e(t,0,0,n._transformOrigin,n._visibility),e(t,2,0,n.message)})}function ge(e){return{matches:"all"===e||""===e,media:e,addListener:function(){},removeListener:function(){}}}function ye(e){return Object(bl.__assign)({},new Tc,e)}function ve(e){return al["\u0275vid"](0,[(e()(),al["\u0275and"](0,null,null,0))],null,null)}function be(e){return al["\u0275vid"](2,[al["\u0275qud"](402653184,1,{_portalOutlet:0}),(e()(),al["\u0275and"](16777216,null,null,1,null,ve)),al["\u0275did"](2,212992,[[1,4]],0,$l,[al.ComponentFactoryResolver,al.ViewContainerRef],{portal:[0,"portal"]},null)],function(e,t){e(t,2,0,"")},null)}function _e(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"button",[["class","mat-simple-snackbar-action"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.action()&&r),r},null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.component.data.action)})}function we(e){return al["\u0275vid"](2,[(e()(),al["\u0275ted"](0,null,[""," "])),(e()(),al["\u0275and"](16777216,null,null,1,null,_e)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null)],function(e,t){e(t,2,0,t.component.hasAction)},function(e,t){e(t,0,0,t.component.data.message)})}function xe(e){return e||new Vc}function Ce(e){return Error('Could not find column with id "'+e+'".')}function Ee(e){return al["\u0275vid"](2,[al["\u0275qud"](402653184,1,{_rowPlaceholder:0}),al["\u0275qud"](402653184,2,{_headerRowPlaceholder:0}),(e()(),al["\u0275eld"](2,16777216,null,null,1,null,null,null,null,null,null,null)),al["\u0275did"](3,16384,[[2,4]],0,Zc,[al.ViewContainerRef],null,null),(e()(),al["\u0275eld"](4,16777216,null,null,1,null,null,null,null,null,null,null)),al["\u0275did"](5,16384,[[1,4]],0,$c,[al.ViewContainerRef],null,null)],null,null)}function Se(e){return al["\u0275vid"](2,[(e()(),al["\u0275eld"](0,16777216,null,null,1,null,null,null,null,null,null,null)),al["\u0275did"](1,16384,null,0,qc,[al.ViewContainerRef],null,null)],null,null)}function Oe(e){return al["\u0275vid"](2,[(e()(),al["\u0275eld"](0,16777216,null,null,1,null,null,null,null,null,null,null)),al["\u0275did"](1,16384,null,0,qc,[al.ViewContainerRef],null,null)],null,null)}function Te(e){return al["\u0275vid"](2,[al["\u0275ncd"](null,0),al["\u0275ncd"](null,1)],null,null)}function ke(e){return al["\u0275vid"](2,[al["\u0275ncd"](null,0),al["\u0275ncd"](null,1)],null,null)}function De(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{hostMetadata:0}),(e()(),al["\u0275eld"](1,0,[[1,0],["hostMetadata",1]],null,0,"textarea",[["class","textarea-metadata"]],null,null,null,null,null))],null,null)}function Ie(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,45,"mat-card",[["class","input-card mat-card"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},Te,gd)),al["\u0275did"](2,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275eld"](4,0,null,0,12,"mat-toolbar",[["class","input-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](5,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,1,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n            "])),(e()(),al["\u0275eld"](8,0,null,0,2,"mat-icon",[["class","toolbar-icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](9,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n            "])),(e()(),al["\u0275eld"](12,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["INPUT: SQL++"])),(e()(),al["\u0275ted"](-1,0,["\t\n            "])),(e()(),al["\u0275eld"](15,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275eld"](18,0,null,0,13,"mat-card-content",[["class","content-area mat-card-content"]],null,null,null,null,null)),al["\u0275did"](19,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](21,0,null,null,9,"div",[["class","codemirror-container"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n           "])),(e()(),al["\u0275eld"](23,0,null,null,6,"codemirror-metadata",[["class","code"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"]],function(e,t,n){var r=!0;return"ngModelChange"===t&&(r=!1!==(e.component.queryMetadataString=n)&&r),r},De,xd)),al["\u0275did"](24,4374528,null,0,wd,[],{config:[0,"config"]},null),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[wd]),al["\u0275did"](26,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](28,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["  \n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275eld"](33,0,null,0,12,"mat-card-actions",[["class","actions mat-card-actions"]],[[2,"mat-card-actions-align-end",null]],null,null,null,null)),al["\u0275did"](34,16384,null,0,fd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](36,0,null,null,3,"button",[["class","query-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.executeQuery()&&r),r},J,nc)),al["\u0275did"](37,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](38,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["RUN"])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](41,0,null,null,1,"span",[["class","error-message"]],null,null,null,null,null)),(e()(),al["\u0275ted"](42,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](44,0,null,null,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,0,["\n"]))],function(e,t){var n=t.component;e(t,5,0,"primary"),e(t,9,0),e(t,24,0,n.codemirrorMetadataConfig),e(t,26,0,n.queryMetadataString)},function(e,t){var n=t.component;e(t,4,0,al["\u0275nov"](t,5)._toolbarRows.length,!al["\u0275nov"](t,5)._toolbarRows.length),e(t,23,0,al["\u0275nov"](t,28).ngClassUntouched,al["\u0275nov"](t,28).ngClassTouched,al["\u0275nov"](t,28).ngClassPristine,al["\u0275nov"](t,28).ngClassDirty,al["\u0275nov"](t,28).ngClassValid,al["\u0275nov"](t,28).ngClassInvalid,al["\u0275nov"](t,28).ngClassPending),e(t,33,0,"end"===al["\u0275nov"](t,34).align),e(t,36,0,al["\u0275nov"](t,37).disabled||null),e(t,42,0,n.errorMessage)})}function Re(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"div",[["class","mat-input-prefix mat-form-field-prefix"]],null,null,null,null,null)),al["\u0275ncd"](null,0)],null,null)}function Me(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,null,null,null,null,null,null,null)),al["\u0275ncd"](null,2),(e()(),al["\u0275ted"](2,null,["",""]))],null,function(e,t){e(t,2,0,t.component._control.placeholder)})}function Pe(e){return al["\u0275vid"](0,[al["\u0275ncd"](null,3),(e()(),al["\u0275and"](0,null,null,0))],null,null)}function Ne(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[["aria-hidden","true"],["class","mat-placeholder-required mat-form-field-required-marker"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\xa0*"]))],null,null)}function Ae(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,[[4,0],["label",1]],null,7,"label",[["class","mat-form-field-label mat-input-placeholder mat-form-field-placeholder"]],[[1,"for",0],[1,"aria-owns",0],[2,"mat-empty",null],[2,"mat-form-field-empty",null],[2,"mat-accent",null],[2,"mat-warn",null]],null,null,null,null)),al["\u0275did"](1,16384,null,0,cl.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,Me)),al["\u0275did"](3,278528,null,0,cl.NgSwitchCase,[al.ViewContainerRef,al.TemplateRef,cl.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,Pe)),al["\u0275did"](5,278528,null,0,cl.NgSwitchCase,[al.ViewContainerRef,al.TemplateRef,cl.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,Ne)),al["\u0275did"](7,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null)],function(e,t){var n=t.component;e(t,1,0,n._hasLabel()),e(t,3,0,!1),e(t,5,0,!0),e(t,7,0,!n.hideRequiredMarker&&n._control.required)},function(e,t){var n=t.component;e(t,0,0,n._control.id,n._control.id,n._control.empty&&!n._shouldAlwaysFloat,n._control.empty&&!n._shouldAlwaysFloat,"accent"==n.color,"warn"==n.color)})}function Le(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"div",[["class","mat-input-suffix mat-form-field-suffix"]],null,null,null,null,null)),al["\u0275ncd"](null,4)],null,null)}function Fe(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"div",[],[[24,"@transitionMessages",0]],null,null,null,null)),al["\u0275ncd"](null,5)],null,function(e,t){e(t,0,0,t.component._subscriptAnimationState)})}function je(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"div",[["class","mat-hint"]],[[8,"id",0]],null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){var n=t.component;e(t,0,0,n._hintLabelId),e(t,1,0,n.hintLabel)})}function Ve(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,5,"div",[["class","mat-input-hint-wrapper mat-form-field-hint-wrapper"]],[[24,"@transitionMessages",0]],null,null,null,null)),(e()(),al["\u0275and"](16777216,null,null,1,null,je)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275ncd"](null,6),(e()(),al["\u0275eld"](4,0,null,null,0,"div",[["class","mat-input-hint-spacer mat-form-field-hint-spacer"]],null,null,null,null,null)),al["\u0275ncd"](null,7)],function(e,t){e(t,2,0,t.component.hintLabel)},function(e,t){e(t,0,0,t.component._subscriptAnimationState)})}function ze(e){return al["\u0275vid"](2,[al["\u0275qud"](402653184,1,{underlineRef:0}),al["\u0275qud"](402653184,2,{_connectionContainerRef:0}),al["\u0275qud"](402653184,3,{_inputContainerRef:0}),al["\u0275qud"](671088640,4,{_label:0}),(e()(),al["\u0275eld"](4,0,null,null,18,"div",[["class","mat-input-wrapper mat-form-field-wrapper"]],null,null,null,null,null)),(e()(),al["\u0275eld"](5,0,[[2,0],["connectionContainer",1]],null,9,"div",[["class","mat-input-flex mat-form-field-flex"]],null,[[null,"click"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==(i._control.onContainerClick&&i._control.onContainerClick(n))&&r),r},null,null)),(e()(),al["\u0275and"](16777216,null,null,1,null,Re)),al["\u0275did"](7,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275eld"](8,0,[[3,0],["inputContainer",1]],null,4,"div",[["class","mat-input-infix mat-form-field-infix"]],null,null,null,null,null)),al["\u0275ncd"](null,1),(e()(),al["\u0275eld"](10,0,null,null,2,"span",[["class","mat-form-field-label-wrapper mat-input-placeholder-wrapper mat-form-field-placeholder-wrapper"]],null,null,null,null,null)),(e()(),al["\u0275and"](16777216,null,null,1,null,Ae)),al["\u0275did"](12,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,Le)),al["\u0275did"](14,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275eld"](15,0,[[1,0],["underline",1]],null,1,"div",[["class","mat-input-underline mat-form-field-underline"]],null,null,null,null,null)),(e()(),al["\u0275eld"](16,0,null,null,0,"span",[["class","mat-input-ripple mat-form-field-ripple"]],[[2,"mat-accent",null],[2,"mat-warn",null]],null,null,null,null)),(e()(),al["\u0275eld"](17,0,null,null,5,"div",[["class","mat-input-subscript-wrapper mat-form-field-subscript-wrapper"]],null,null,null,null,null)),al["\u0275did"](18,16384,null,0,cl.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,Fe)),al["\u0275did"](20,278528,null,0,cl.NgSwitchCase,[al.ViewContainerRef,al.TemplateRef,cl.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,Ve)),al["\u0275did"](22,278528,null,0,cl.NgSwitchCase,[al.ViewContainerRef,al.TemplateRef,cl.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null)],function(e,t){var n=t.component;e(t,7,0,n._prefixChildren.length),e(t,12,0,n._hasFloatingLabel()),e(t,14,0,n._suffixChildren.length),e(t,18,0,n._getDisplayedMessages()),e(t,20,0,"error"),e(t,22,0,"hint")},function(e,t){var n=t.component;e(t,16,0,"accent"==n.color,"warn"==n.color)})}function Be(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-name-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Dataverse Name"]))],null,null)}function He(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataverse-name-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,["",""]))],null,function(e,t){e(t,2,0,t.context.$implicit.DataverseName)})}function We(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-dataformat-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Data Format"]))],null,null)}function qe(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataverse-dataformat-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,["",""]))],null,function(e,t){e(t,2,0,t.context.$implicit.DataFormat)})}function Ue(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-pendingop-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Pending Ops"]))],null,null)}function Ge(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataverse-pendingop-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,["",""]))],null,function(e,t){e(t,2,0,t.context.$implicit.PendingOp)})}function Ke(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-timestamp-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Timestamp"]))],null,null)}function $e(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataverse-timestamp-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,["",""]))],null,function(e,t){e(t,2,0,t.context.$implicit.Timestamp)})}function Ze(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-header-row",[["class","mat-header-row"],["role","row"]],null,null,null,Se,cd)),al["\u0275did"](1,49152,null,0,ld,[],null,null)],null,null)}function Qe(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"mat-row",[["class","mat-row"],["role","row"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.highlight(e.context.$implicit)&&r),r},Oe,dd)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{highlight:0}),al["\u0275did"](3,49152,null,0,ad,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){e(t,1,0,e(t,2,0,t.component.selectedRowIndex==t.context.$implicit.id))},null)}function Ye(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,79,"mat-table",[["class","dataverses-table mat-table"]],null,null,null,Ee,ud)),al["\u0275did"](1,3391488,[["table",4]],3,Xc,[al.IterableDiffers,al.ChangeDetectorRef,al.ElementRef,[8,null]],{dataSource:[0,"dataSource"]},null),al["\u0275qud"](603979776,3,{_columnDefs:1}),al["\u0275qud"](335544320,4,{_headerDef:0}),al["\u0275qud"](603979776,5,{_rowDefs:1}),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](7,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](8,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,6,{cell:0}),al["\u0275qud"](335544320,7,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Be)),al["\u0275did"](14,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[7,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,He)),al["\u0275did"](18,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[6,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](23,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](24,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,8,{cell:0}),al["\u0275qud"](335544320,9,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,We)),al["\u0275did"](30,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[9,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,qe)),al["\u0275did"](34,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[8,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](39,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](40,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,10,{cell:0}),al["\u0275qud"](335544320,11,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Ue)),al["\u0275did"](46,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[11,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Ge)),al["\u0275did"](50,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[10,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](55,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](56,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,12,{cell:0}),al["\u0275qud"](335544320,13,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Ke)),al["\u0275did"](62,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[13,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,$e)),al["\u0275did"](66,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[12,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275and"](0,null,null,3,null,Ze)),al["\u0275did"](71,540672,null,0,id,[al.TemplateRef,al.IterableDiffers],{columns:[0,"columns"]},null),al["\u0275pad"](72,3),al["\u0275prd"](2048,[[4,4]],Hc,null,[id]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](0,null,null,3,null,Qe)),al["\u0275did"](76,540672,null,0,od,[al.TemplateRef,al.IterableDiffers],{columns:[0,"columns"]},null),al["\u0275pad"](77,3),al["\u0275prd"](2048,[[5,4]],Wc,null,[od]),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){e(t,1,0,t.component.dataSource),e(t,8,0,"DataverseName"),e(t,24,0,"DataFormat"),e(t,40,0,"PendingOp"),e(t,56,0,"Timestamp"),e(t,71,0,e(t,72,0,"DataverseName","DataFormat","Timestamp")),e(t,76,0,e(t,77,0,"DataverseName","DataFormat","Timestamp"))},null)}function Xe(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{inputQuery:0}),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](2,0,null,null,86,"div",[["class","container"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](4,0,null,null,54,"div",[["class","master"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](6,0,null,null,48,"mat-card",[["class","dataverses-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](7,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](9,0,null,0,12,"mat-toolbar",[["class","dataverses-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](10,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,2,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](13,0,null,0,2,"mat-icon",[["class","icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](14,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](17,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["DATAVERSES - METADATA"])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](20,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](23,0,null,0,6,"mat-card-content",[["class","dataverses-content mat-card-content"]],null,null,null,null,null)),al["\u0275did"](24,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,2,null,Ye)),al["\u0275did"](27,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275pid"](131072,cl.AsyncPipe,[al.ChangeDetectorRef]),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](31,0,null,0,22,"mat-card-actions",[["class","actions mat-card-actions"]],[[2,"mat-card-actions-align-end",null]],null,null,null,null)),al["\u0275did"](32,16384,null,0,fd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](34,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.openCreateDataverseDialog()&&r),r},J,nc)),al["\u0275did"](35,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](36,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["CREATE"])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](39,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.openDropDataverseDialog()&&r),r},J,nc)),al["\u0275did"](40,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](41,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["DROP"])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](44,0,null,null,1,"span",[["class","error-message"]],null,null,null,null,null)),(e()(),al["\u0275ted"](45,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](47,0,null,null,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](49,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.getDataverse()&&r),r},J,nc)),al["\u0275did"](50,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](51,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["REFRESH"])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](56,0,null,null,1,"awc-query-metadata",[["class","query"]],null,null,null,Ie,Xp)),al["\u0275did"](57,49152,[[1,4],["querymetadata",4]],0,Qp,[Yp.m,al.ChangeDetectorRef],null,null),(e()(),al["\u0275ted"](-1,null,["  \n  "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](60,0,null,null,27,"div",[["class","detail"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](62,0,null,null,24,"mat-card",[["class","dataverses-details-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](63,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](65,0,null,0,12,"mat-toolbar",[["class","dataverses-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](66,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,14,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](69,0,null,0,2,"mat-icon",[["class","icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](70,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](73,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["DATAVERSE - METADATA - DETAILS"])),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](76,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](79,0,null,0,6,"mat-card-content",[["class","dataverses-content output mat-card-content"]],null,null,null,null,null)),al["\u0275did"](80,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](82,0,null,null,2,"span",[],null,null,null,null,null)),(e()(),al["\u0275eld"](83,0,null,null,1,"pre",[],null,null,null,null,null)),(e()(),al["\u0275ted"](84,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,10,0,"primary"),e(t,14,0),e(t,27,0,al["\u0275unv"](t,27,0,al["\u0275nov"](t,28).transform(n.loaded$))),e(t,66,0,"primary"),e(t,70,0)},function(e,t){var n=t.component;e(t,9,0,al["\u0275nov"](t,10)._toolbarRows.length,!al["\u0275nov"](t,10)._toolbarRows.length),e(t,31,0,"end"===al["\u0275nov"](t,32).align),e(t,34,0,al["\u0275nov"](t,35).disabled||null),e(t,39,0,al["\u0275nov"](t,40).disabled||null),e(t,45,0,n.errorMessage),e(t,49,0,al["\u0275nov"](t,50).disabled||null),e(t,65,0,al["\u0275nov"](t,66)._toolbarRows.length,!al["\u0275nov"](t,66)._toolbarRows.length),e(t,84,0,n.output)})}function Je(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,32,"div",[["class","dataverse-dialog"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](3,0,null,null,2,"p",[["class","mat-dialog-title"],["mat-dialog-title",""]],[[8,"id",0]],null,null,null,null)),al["\u0275did"](4,81920,null,0,zs,[[2,Ms]],null,null),(e()(),al["\u0275ted"](-1,null,["CREATE DATAVERSE"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](7,0,null,null,5,"mat-dialog-content",[["class","mat-dialog-content"]],null,null,null,null,null)),al["\u0275did"](8,16384,null,0,Bs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](10,0,null,null,1,"p",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["GIVE A NAME TO THE NEW DATAVERSE"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](14,0,null,null,18,"mat-form-field",[["class","mat-input-container mat-form-field"]],[[2,"mat-input-invalid",null],[2,"mat-form-field-invalid",null],[2,"mat-form-field-can-float",null],[2,"mat-form-field-should-float",null],[2,"mat-form-field-hide-placeholder",null],[2,"mat-form-field-disabled",null],[2,"mat-focused",null],[2,"mat-primary",null],[2,"mat-accent",null],[2,"mat-warn",null],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,ze,lf)),al["\u0275did"](15,7389184,null,7,zu,[al.ElementRef,al.ChangeDetectorRef,[2,ps]],null,null),al["\u0275qud"](335544320,1,{_control:0}),al["\u0275qud"](335544320,2,{_placeholderChild:0}),al["\u0275qud"](335544320,3,{_labelChild:0}),al["\u0275qud"](603979776,4,{_errorChildren:1}),al["\u0275qud"](603979776,5,{_hintChildren:1}),al["\u0275qud"](603979776,6,{_prefixChildren:1}),al["\u0275qud"](603979776,7,{_suffixChildren:1}),(e()(),al["\u0275ted"](-1,1,["\n        "])),(e()(),al["\u0275eld"](24,0,null,1,7,"input",[["class","mat-input-element mat-form-field-autofill-control"],["matInput",""],["tabindex","0"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"mat-input-server",null],[1,"id",0],[8,"placeholder",0],[8,"disabled",0],[8,"required",0],[8,"readOnly",0],[1,"aria-describedby",0],[1,"aria-invalid",0],[1,"aria-required",0]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"focus"]],function(e,t,n){var r=!0,i=e.component;return"input"===t&&(r=!1!==al["\u0275nov"](e,25)._handleInput(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,25).onTouched()&&r),"compositionstart"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionStart()&&r),"compositionend"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionEnd(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!1)&&r),"focus"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!0)&&r),"input"===t&&(r=!1!==al["\u0275nov"](e,30)._onInput()&&r),"ngModelChange"===t&&(r=!1!==(i.data.dataverseName=n)&&r),r},null,null)),al["\u0275did"](25,16384,null,0,Fu.DefaultValueAccessor,[al.Renderer2,al.ElementRef,[2,Fu.COMPOSITION_BUFFER_MODE]],null,null),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[Fu.DefaultValueAccessor]),al["\u0275did"](27,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](29,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null),al["\u0275did"](30,933888,null,0,Uu,[al.ElementRef,pl,[2,Fu.NgControl],[2,Fu.NgForm],[2,Fu.FormGroupDirective],es,[8,null]],null,null),al["\u0275prd"](2048,[[1,4]],ju,null,[Uu]),(e()(),al["\u0275ted"](-1,1,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](35,0,null,null,13,"div",[["class","mat-dialog-actions"],["mat-dialog-actions",""]],null,null,null,null,null)),al["\u0275did"](36,16384,null,0,Hs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](38,0,null,null,4,"button",[["class","mat-button"],["mat-button",""],["tabindex","1"],["type","button"]],[[8,"disabled",0],[1,"aria-label",0]],[[null,"click"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==al["\u0275nov"](e,41).dialogRef.close(al["\u0275nov"](e,41).dialogResult)&&r),"click"===t&&(r=!1!==i.onClick()&&r),r},J,nc)),al["\u0275did"](39,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](40,16384,null,0,Gs,[],null,null),al["\u0275did"](41,540672,null,0,Vs,[Ns],{dialogResult:[0,"dialogResult"]},null),(e()(),al["\u0275ted"](-1,0,["CREATE"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](44,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","2"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onNoClick()&&r),r},J,nc)),al["\u0275did"](45,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](46,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["CANCEL"])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n\n"]))],function(e,t){var n=t.component;e(t,4,0),e(t,27,0,n.data.dataverseName),e(t,30,0),e(t,41,0,n.data.dataverseName)},function(e,t){e(t,3,0,al["\u0275nov"](t,4).id),e(t,14,1,[al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._canLabelFloat,al["\u0275nov"](t,15)._shouldLabelFloat(),al["\u0275nov"](t,15)._hideControlPlaceholder(),al["\u0275nov"](t,15)._control.disabled,al["\u0275nov"](t,15)._control.focused,"primary"==al["\u0275nov"](t,15).color,"accent"==al["\u0275nov"](t,15).color,"warn"==al["\u0275nov"](t,15).color,al["\u0275nov"](t,15)._shouldForward("untouched"),al["\u0275nov"](t,15)._shouldForward("touched"),al["\u0275nov"](t,15)._shouldForward("pristine"),al["\u0275nov"](t,15)._shouldForward("dirty"),al["\u0275nov"](t,15)._shouldForward("valid"),al["\u0275nov"](t,15)._shouldForward("invalid"),al["\u0275nov"](t,15)._shouldForward("pending")]),e(t,24,1,[al["\u0275nov"](t,29).ngClassUntouched,al["\u0275nov"](t,29).ngClassTouched,al["\u0275nov"](t,29).ngClassPristine,al["\u0275nov"](t,29).ngClassDirty,al["\u0275nov"](t,29).ngClassValid,al["\u0275nov"](t,29).ngClassInvalid,al["\u0275nov"](t,29).ngClassPending,al["\u0275nov"](t,30)._isServer,al["\u0275nov"](t,30).id,al["\u0275nov"](t,30).placeholder,al["\u0275nov"](t,30).disabled,al["\u0275nov"](t,30).required,al["\u0275nov"](t,30).readonly,al["\u0275nov"](t,30)._ariaDescribedby||null,al["\u0275nov"](t,30).errorState,al["\u0275nov"](t,30).required.toString()]),e(t,38,0,al["\u0275nov"](t,39).disabled||null,al["\u0275nov"](t,41).ariaLabel),e(t,44,0,al["\u0275nov"](t,45).disabled||null)})}function et(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,46,"div",[["class","dataverse-dialog"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](3,0,null,null,2,"p",[["class","mat-dialog-title"],["mat-dialog-title",""]],[[8,"id",0]],null,null,null,null)),al["\u0275did"](4,81920,null,0,zs,[[2,Ms]],null,null),(e()(),al["\u0275ted"](-1,null,["DROP DATAVERSE"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](7,0,null,null,5,"mat-dialog-content",[["class","mat-dialog-content"]],null,null,null,null,null)),al["\u0275did"](8,16384,null,0,Bs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](10,0,null,null,1,"p",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["PLEASE GIVE THE NAME OF THE DATAVERSE TO DROP"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](14,0,null,null,18,"mat-form-field",[["class","mat-input-container mat-form-field"]],[[2,"mat-input-invalid",null],[2,"mat-form-field-invalid",null],[2,"mat-form-field-can-float",null],[2,"mat-form-field-should-float",null],[2,"mat-form-field-hide-placeholder",null],[2,"mat-form-field-disabled",null],[2,"mat-focused",null],[2,"mat-primary",null],[2,"mat-accent",null],[2,"mat-warn",null],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,ze,lf)),al["\u0275did"](15,7389184,null,7,zu,[al.ElementRef,al.ChangeDetectorRef,[2,ps]],null,null),al["\u0275qud"](335544320,1,{_control:0}),al["\u0275qud"](335544320,2,{_placeholderChild:0}),al["\u0275qud"](335544320,3,{_labelChild:0}),al["\u0275qud"](603979776,4,{_errorChildren:1}),al["\u0275qud"](603979776,5,{_hintChildren:1}),al["\u0275qud"](603979776,6,{_prefixChildren:1}),al["\u0275qud"](603979776,7,{_suffixChildren:1}),(e()(),al["\u0275ted"](-1,1,["\n            "])),(e()(),al["\u0275eld"](24,0,null,1,7,"input",[["class","mat-input-element mat-form-field-autofill-control"],["matInput",""],["tabindex","0"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"mat-input-server",null],[1,"id",0],[8,"placeholder",0],[8,"disabled",0],[8,"required",0],[8,"readOnly",0],[1,"aria-describedby",0],[1,"aria-invalid",0],[1,"aria-required",0]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"focus"]],function(e,t,n){var r=!0,i=e.component;return"input"===t&&(r=!1!==al["\u0275nov"](e,25)._handleInput(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,25).onTouched()&&r),"compositionstart"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionStart()&&r),"compositionend"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionEnd(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!1)&&r),"focus"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!0)&&r),"input"===t&&(r=!1!==al["\u0275nov"](e,30)._onInput()&&r),"ngModelChange"===t&&(r=!1!==(i.data.dataverseName=n)&&r),r},null,null)),al["\u0275did"](25,16384,null,0,Fu.DefaultValueAccessor,[al.Renderer2,al.ElementRef,[2,Fu.COMPOSITION_BUFFER_MODE]],null,null),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[Fu.DefaultValueAccessor]),al["\u0275did"](27,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](29,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null),al["\u0275did"](30,933888,null,0,Uu,[al.ElementRef,pl,[2,Fu.NgControl],[2,Fu.NgForm],[2,Fu.FormGroupDirective],es,[8,null]],null,null),al["\u0275prd"](2048,[[1,4]],ju,null,[Uu]),(e()(),al["\u0275ted"](-1,1,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](34,0,null,null,12,"mat-dialog-actions",[["class","mat-dialog-actions"]],null,null,null,null,null)),al["\u0275did"](35,16384,null,0,Hs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](37,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","1"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},J,nc)),al["\u0275did"](38,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](39,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["DROP"])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](42,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","2"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onNoClick()&&r),r},J,nc)),al["\u0275did"](43,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](44,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["CANCEL"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,4,0),e(t,27,0,n.data.dataverseName),e(t,30,0)},function(e,t){e(t,3,0,al["\u0275nov"](t,4).id),e(t,14,1,[al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._canLabelFloat,al["\u0275nov"](t,15)._shouldLabelFloat(),al["\u0275nov"](t,15)._hideControlPlaceholder(),al["\u0275nov"](t,15)._control.disabled,al["\u0275nov"](t,15)._control.focused,"primary"==al["\u0275nov"](t,15).color,"accent"==al["\u0275nov"](t,15).color,"warn"==al["\u0275nov"](t,15).color,al["\u0275nov"](t,15)._shouldForward("untouched"),al["\u0275nov"](t,15)._shouldForward("touched"),al["\u0275nov"](t,15)._shouldForward("pristine"),al["\u0275nov"](t,15)._shouldForward("dirty"),al["\u0275nov"](t,15)._shouldForward("valid"),al["\u0275nov"](t,15)._shouldForward("invalid"),al["\u0275nov"](t,15)._shouldForward("pending")]),e(t,24,1,[al["\u0275nov"](t,29).ngClassUntouched,al["\u0275nov"](t,29).ngClassTouched,al["\u0275nov"](t,29).ngClassPristine,al["\u0275nov"](t,29).ngClassDirty,al["\u0275nov"](t,29).ngClassValid,al["\u0275nov"](t,29).ngClassInvalid,al["\u0275nov"](t,29).ngClassPending,al["\u0275nov"](t,30)._isServer,al["\u0275nov"](t,30).id,al["\u0275nov"](t,30).placeholder,al["\u0275nov"](t,30).disabled,al["\u0275nov"](t,30).required,al["\u0275nov"](t,30).readonly,al["\u0275nov"](t,30)._ariaDescribedby||null,al["\u0275nov"](t,30).errorState,al["\u0275nov"](t,30).required.toString()]),e(t,37,0,al["\u0275nov"](t,38).disabled||null),e(t,42,0,al["\u0275nov"](t,43).disabled||null)})}function tt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-compactionpolicy-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Compaction Policy"]))],null,null)}function nt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-compactionpolicy-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.CompactionPolicy)})}function rt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-datasetid-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Dataset Id"]))],null,null)}function it(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-datasetid-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DatasetId)})}function ot(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-datasetname-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Dataset Name"]))],null,null)}function lt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-datasetname-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DatasetName)})}function at(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-datasettype-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Dataset Type"]))],null,null)}function st(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-datasettype-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DatasetType)})}function ut(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-datatypedataversename-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Datatype Dataverse Name"]))],null,null)}function ct(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-datatypedataversename-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DatatypeDataverseName)})}function dt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-datatypename-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Datatype Name"]))],null,null)}function pt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-datatypename-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DatatypeName)})}function ft(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-dataversename-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Dataverse Name"]))],null,null)}function ht(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-dataversename-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DataverseName)})}function mt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-groupname-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Group Name"]))],null,null)}function gt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-groupname-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.GroupName)})}function yt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-pendingop-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Pending Op"]))],null,null)}function vt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-pendingop-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.PendingOp)})}function bt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-timestamp-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Timestamp"]))],null,null)}function _t(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","dataset-timestamp-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.Timestamp)})}function wt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-header-row",[["class","mat-header-row"],["role","row"]],null,null,null,Se,cd)),al["\u0275did"](1,49152,null,0,ld,[],null,null)],null,null)}function xt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"mat-row",[["class","mat-row"],["role","row"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.highlight(e.context.$implicit)&&r),r},Oe,dd)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{highlight:0}),al["\u0275did"](3,49152,null,0,ad,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n                "]))],function(e,t){e(t,1,0,e(t,2,0,t.component.selectedRowIndex==t.context.$implicit.id))},null)}function Ct(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,216,"mat-card",[["class","datasets-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](1,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275eld"](3,0,null,0,12,"mat-toolbar",[["class","datasets-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](4,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,2,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n            "])),(e()(),al["\u0275eld"](7,0,null,0,2,"mat-icon",[["class","icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](8,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n            "])),(e()(),al["\u0275eld"](11,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["DATASETS - METADATA"])),(e()(),al["\u0275ted"](-1,0,["\n            "])),(e()(),al["\u0275eld"](14,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275eld"](17,0,null,0,179,"mat-card-content",[["class","datasets-content mat-card-content"]],null,null,null,null,null)),al["\u0275did"](18,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](20,0,null,null,175,"mat-table",[["class","datasets-table mat-table"]],null,null,null,Ee,ud)),al["\u0275did"](21,3391488,[["table",4]],3,Xc,[al.IterableDiffers,al.ChangeDetectorRef,al.ElementRef,[8,null]],{dataSource:[0,"dataSource"]},null),al["\u0275qud"](603979776,3,{_columnDefs:1}),al["\u0275qud"](335544320,4,{_headerDef:0}),al["\u0275qud"](603979776,5,{_rowDefs:1}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](27,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](28,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,6,{cell:0}),al["\u0275qud"](335544320,7,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,tt)),al["\u0275did"](34,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[7,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,nt)),al["\u0275did"](38,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[6,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](43,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](44,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,8,{cell:0}),al["\u0275qud"](335544320,9,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,rt)),al["\u0275did"](50,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[9,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,it)),al["\u0275did"](54,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[8,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](59,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](60,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,10,{cell:0}),al["\u0275qud"](335544320,11,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,ot)),al["\u0275did"](66,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[11,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,lt)),al["\u0275did"](70,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[10,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](75,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](76,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,12,{cell:0}),al["\u0275qud"](335544320,13,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,at)),al["\u0275did"](82,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[13,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,st)),al["\u0275did"](86,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[12,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](91,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](92,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,14,{cell:0}),al["\u0275qud"](335544320,15,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,ut)),al["\u0275did"](98,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[15,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,ct)),al["\u0275did"](102,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[14,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](107,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](108,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,16,{cell:0}),al["\u0275qud"](335544320,17,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,dt)),al["\u0275did"](114,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[17,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,pt)),al["\u0275did"](118,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[16,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](123,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](124,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,18,{cell:0}),al["\u0275qud"](335544320,19,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,ft)),al["\u0275did"](130,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[19,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,ht)),al["\u0275did"](134,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[18,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](139,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](140,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,20,{cell:0}),al["\u0275qud"](335544320,21,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,mt)),al["\u0275did"](146,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[21,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,gt)),al["\u0275did"](150,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[20,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](155,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](156,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,22,{cell:0}),al["\u0275qud"](335544320,23,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,yt)),al["\u0275did"](162,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[23,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,vt)),al["\u0275did"](166,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[22,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](171,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](172,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,24,{cell:0}),al["\u0275qud"](335544320,25,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,bt)),al["\u0275did"](178,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[25,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n                  "])),(e()(),al["\u0275and"](0,null,null,2,null,_t)),al["\u0275did"](182,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[24,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n    \n                "])),(e()(),al["\u0275and"](0,null,null,3,null,wt)),al["\u0275did"](187,540672,null,0,id,[al.TemplateRef,al.IterableDiffers],{columns:[0,"columns"]},null),al["\u0275pad"](188,4),al["\u0275prd"](2048,[[4,4]],Hc,null,[id]),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](0,null,null,3,null,xt)),al["\u0275did"](192,540672,null,0,od,[al.TemplateRef,al.IterableDiffers],{columns:[0,"columns"]},null),al["\u0275pad"](193,4),al["\u0275prd"](2048,[[5,4]],Wc,null,[od]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275eld"](198,0,null,0,17,"mat-card-actions",[["class","actions mat-card-actions"]],[[2,"mat-card-actions-align-end",null]],null,null,null,null)),al["\u0275did"](199,16384,null,0,fd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](201,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.openDropDatasetDialog()&&r),r},J,nc)),al["\u0275did"](202,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](203,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["DROP"])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](206,0,null,null,1,"span",[["class","error-message"]],null,null,null,null,null)),(e()(),al["\u0275ted"](207,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](209,0,null,null,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](211,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.getDatasets()&&r),r},J,nc)),al["\u0275did"](212,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](213,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["REFRESH"])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,0,["\n      "]))],function(e,t){var n=t.component;e(t,4,0,"primary"),e(t,8,0),e(t,21,0,n.dataSource),e(t,28,0,"CompactionPolicy"),e(t,44,0,"DatasetId"),e(t,60,0,"DatasetName"),e(t,76,0,"DatasetType"),e(t,92,0,"DatatypeDataverseName"),e(t,108,0,"DatatypeName"),e(t,124,0,"DataverseName"),e(t,140,0,"GroupName"),e(t,156,0,"PendingOp"),e(t,172,0,"Timestamp"),e(t,187,0,e(t,188,0,"DatasetName","DataverseName","DatatypeName","Timestamp")),e(t,192,0,e(t,193,0,"DatasetName","DataverseName","DatatypeName","Timestamp"))},function(e,t){var n=t.component;e(t,3,0,al["\u0275nov"](t,4)._toolbarRows.length,!al["\u0275nov"](t,4)._toolbarRows.length),e(t,198,0,"end"===al["\u0275nov"](t,199).align),e(t,201,0,al["\u0275nov"](t,202).disabled||null),e(t,207,0,n.errorMessage),e(t,211,0,al["\u0275nov"](t,212).disabled||null)})}function Et(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{inputQuery:0}),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](2,0,null,null,40,"div",[["class","container"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](4,0,null,null,8,"div",[["class","master"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275and"](16777216,null,null,2,null,Ct)),al["\u0275did"](7,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275pid"](131072,cl.AsyncPipe,[al.ChangeDetectorRef]),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](10,0,null,null,1,"awc-query-metadata",[["class","query"]],null,null,null,Ie,Xp)),al["\u0275did"](11,49152,[[1,4],["querymetadata",4]],0,Qp,[Yp.m,al.ChangeDetectorRef],null,null),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](14,0,null,null,27,"div",[["class","detail"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](16,0,null,null,24,"mat-card",[["class","datasets-details-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](17,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](19,0,null,0,12,"mat-toolbar",[["class","datasets-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](20,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,26,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](23,0,null,0,2,"mat-icon",[["class","icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](24,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](27,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["DATASET - METADATA - DETAILS"])),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](30,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](33,0,null,0,6,"mat-card-content",[["class","datasets-content output mat-card-content"]],null,null,null,null,null)),al["\u0275did"](34,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](36,0,null,null,2,"span",[],null,null,null,null,null)),(e()(),al["\u0275eld"](37,0,null,null,1,"pre",[],null,null,null,null,null)),(e()(),al["\u0275ted"](38,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,7,0,al["\u0275unv"](t,7,0,al["\u0275nov"](t,8).transform(n.loaded$))),e(t,20,0,"primary"),e(t,24,0)},function(e,t){var n=t.component;e(t,19,0,al["\u0275nov"](t,20)._toolbarRows.length,!al["\u0275nov"](t,20)._toolbarRows.length),e(t,38,0,n.output)})}function St(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],null,null)}function Ot(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,46,"div",[["class","dataset-dialog"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](3,0,null,null,2,"p",[["class","mat-dialog-title"],["mat-dialog-title",""]],[[8,"id",0]],null,null,null,null)),al["\u0275did"](4,81920,null,0,zs,[[2,Ms]],null,null),(e()(),al["\u0275ted"](-1,null,["DROP DATASET"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](7,0,null,null,5,"mat-dialog-content",[["class","mat-dialog-content"]],null,null,null,null,null)),al["\u0275did"](8,16384,null,0,Bs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](10,0,null,null,1,"p",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["PLEASE GIVE THE NAME OF THE DATASET TO DROP"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](14,0,null,null,18,"mat-form-field",[["class","mat-input-container mat-form-field"]],[[2,"mat-input-invalid",null],[2,"mat-form-field-invalid",null],[2,"mat-form-field-can-float",null],[2,"mat-form-field-should-float",null],[2,"mat-form-field-hide-placeholder",null],[2,"mat-form-field-disabled",null],[2,"mat-focused",null],[2,"mat-primary",null],[2,"mat-accent",null],[2,"mat-warn",null],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,ze,lf)),al["\u0275did"](15,7389184,null,7,zu,[al.ElementRef,al.ChangeDetectorRef,[2,ps]],null,null),al["\u0275qud"](335544320,1,{_control:0}),al["\u0275qud"](335544320,2,{_placeholderChild:0}),al["\u0275qud"](335544320,3,{_labelChild:0}),al["\u0275qud"](603979776,4,{_errorChildren:1}),al["\u0275qud"](603979776,5,{_hintChildren:1}),al["\u0275qud"](603979776,6,{_prefixChildren:1}),al["\u0275qud"](603979776,7,{_suffixChildren:1}),(e()(),al["\u0275ted"](-1,1,["\n            "])),(e()(),al["\u0275eld"](24,0,null,1,7,"input",[["class","mat-input-element mat-form-field-autofill-control"],["matInput",""],["tabindex","0"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"mat-input-server",null],[1,"id",0],[8,"placeholder",0],[8,"disabled",0],[8,"required",0],[8,"readOnly",0],[1,"aria-describedby",0],[1,"aria-invalid",0],[1,"aria-required",0]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"focus"]],function(e,t,n){var r=!0,i=e.component;return"input"===t&&(r=!1!==al["\u0275nov"](e,25)._handleInput(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,25).onTouched()&&r),"compositionstart"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionStart()&&r),"compositionend"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionEnd(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!1)&&r),"focus"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!0)&&r),"input"===t&&(r=!1!==al["\u0275nov"](e,30)._onInput()&&r),"ngModelChange"===t&&(r=!1!==(i.data.datasetName=n)&&r),r},null,null)),al["\u0275did"](25,16384,null,0,Fu.DefaultValueAccessor,[al.Renderer2,al.ElementRef,[2,Fu.COMPOSITION_BUFFER_MODE]],null,null),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[Fu.DefaultValueAccessor]),al["\u0275did"](27,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](29,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null),al["\u0275did"](30,933888,null,0,Uu,[al.ElementRef,pl,[2,Fu.NgControl],[2,Fu.NgForm],[2,Fu.FormGroupDirective],es,[8,null]],null,null),al["\u0275prd"](2048,[[1,4]],ju,null,[Uu]),(e()(),al["\u0275ted"](-1,1,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](34,0,null,null,12,"mat-dialog-actions",[["class","mat-dialog-actions"]],null,null,null,null,null)),al["\u0275did"](35,16384,null,0,Hs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](37,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","1"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},J,nc)),al["\u0275did"](38,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](39,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["DROP"])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](42,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","2"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onNoClick()&&r),r},J,nc)),al["\u0275did"](43,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](44,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["CANCEL"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,4,0),e(t,27,0,n.data.datasetName),e(t,30,0)},function(e,t){e(t,3,0,al["\u0275nov"](t,4).id),e(t,14,1,[al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._canLabelFloat,al["\u0275nov"](t,15)._shouldLabelFloat(),al["\u0275nov"](t,15)._hideControlPlaceholder(),al["\u0275nov"](t,15)._control.disabled,al["\u0275nov"](t,15)._control.focused,"primary"==al["\u0275nov"](t,15).color,"accent"==al["\u0275nov"](t,15).color,"warn"==al["\u0275nov"](t,15).color,al["\u0275nov"](t,15)._shouldForward("untouched"),al["\u0275nov"](t,15)._shouldForward("touched"),al["\u0275nov"](t,15)._shouldForward("pristine"),al["\u0275nov"](t,15)._shouldForward("dirty"),al["\u0275nov"](t,15)._shouldForward("valid"),al["\u0275nov"](t,15)._shouldForward("invalid"),al["\u0275nov"](t,15)._shouldForward("pending")]),e(t,24,1,[al["\u0275nov"](t,29).ngClassUntouched,al["\u0275nov"](t,29).ngClassTouched,al["\u0275nov"](t,29).ngClassPristine,al["\u0275nov"](t,29).ngClassDirty,al["\u0275nov"](t,29).ngClassValid,al["\u0275nov"](t,29).ngClassInvalid,al["\u0275nov"](t,29).ngClassPending,al["\u0275nov"](t,30)._isServer,al["\u0275nov"](t,30).id,al["\u0275nov"](t,30).placeholder,al["\u0275nov"](t,30).disabled,al["\u0275nov"](t,30).required,al["\u0275nov"](t,30).readonly,al["\u0275nov"](t,30)._ariaDescribedby||null,al["\u0275nov"](t,30).errorState,al["\u0275nov"](t,30).required.toString()]),e(t,37,0,al["\u0275nov"](t,38).disabled||null),e(t,42,0,al["\u0275nov"](t,43).disabled||null)})}function Tt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-datatypename-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Datatype Name"]))],null,null)}function kt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","datatypes-datatypename-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[""," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DatatypeName)})}function Dt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-dataversename-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Dataverse Name "]))],null,null)}function It(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","datatypes-dataversename-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[""," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DataverseName)})}function Rt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-timestamp-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,["Timestamp"]))],null,null)}function Mt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","datatypes-timestamp-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,["",""]))],null,function(e,t){e(t,2,0,t.context.$implicit.Timestamp)})}function Pt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-header-row",[["class","mat-header-row"],["role","row"]],null,null,null,Se,cd)),al["\u0275did"](1,49152,null,0,ld,[],null,null)],null,null)}function Nt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"mat-row",[["class","mat-row"],["role","row"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.highlight(e.context.$implicit)&&r),r},Oe,dd)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{highlight:0}),al["\u0275did"](3,49152,null,0,ad,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){e(t,1,0,e(t,2,0,t.component.selectedRowIndex==t.context.$implicit.id))},null)}function At(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,104,"mat-card",[["class","datatypes-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](1,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](3,0,null,0,12,"mat-toolbar",[["class","datatypes-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](4,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,4,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](7,0,null,0,2,"mat-icon",[["class","icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](8,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](11,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["DATATYPES - METADATA"])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](14,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](17,0,null,0,67,"mat-card-content",[["class","datatypes-content mat-card-content"]],null,null,null,null,null)),al["\u0275did"](18,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](20,0,null,null,63,"mat-table",[["class","datatypes-table mat-table"],["role","treegrid"]],null,null,null,Ee,ud)),al["\u0275did"](21,3391488,[["table",4]],3,Xc,[al.IterableDiffers,al.ChangeDetectorRef,al.ElementRef,[8,"treegrid"]],{dataSource:[0,"dataSource"]},null),al["\u0275qud"](603979776,5,{_columnDefs:1}),al["\u0275qud"](335544320,6,{_headerDef:0}),al["\u0275qud"](603979776,7,{_rowDefs:1}),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](27,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](28,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,8,{cell:0}),al["\u0275qud"](335544320,9,{headerCell:0}),al["\u0275prd"](2048,[[5,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Tt)),al["\u0275did"](34,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[9,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,kt)),al["\u0275did"](38,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[8,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](43,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](44,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,10,{cell:0}),al["\u0275qud"](335544320,11,{headerCell:0}),al["\u0275prd"](2048,[[5,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Dt)),al["\u0275did"](50,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[11,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,It)),al["\u0275did"](54,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[10,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](59,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](60,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,12,{cell:0}),al["\u0275qud"](335544320,13,{headerCell:0}),al["\u0275prd"](2048,[[5,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Rt)),al["\u0275did"](66,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[13,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Mt)),al["\u0275did"](70,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[12,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275and"](0,null,null,3,null,Pt)),al["\u0275did"](75,540672,null,0,id,[al.TemplateRef,al.IterableDiffers],{columns:[0,"columns"]},null),al["\u0275pad"](76,3),al["\u0275prd"](2048,[[6,4]],Hc,null,[id]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](0,null,null,3,null,Nt)),al["\u0275did"](80,540672,null,0,od,[al.TemplateRef,al.IterableDiffers],{columns:[0,"columns"]},null),al["\u0275pad"](81,3),al["\u0275prd"](2048,[[7,4]],Wc,null,[od]),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](86,0,null,0,17,"mat-card-actions",[["class","actions mat-card-actions"]],[[2,"mat-card-actions-align-end",null]],null,null,null,null)),al["\u0275did"](87,16384,null,0,fd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](89,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.openDropDatatypeDialog()&&r),r},J,nc)),al["\u0275did"](90,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](91,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["DROP"])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](94,0,null,null,1,"span",[["class","error-message"]],null,null,null,null,null)),(e()(),al["\u0275ted"](95,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](97,0,null,null,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](99,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.getDatatypes()&&r),r},J,nc)),al["\u0275did"](100,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](101,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["REFRESH"])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n    "]))],function(e,t){var n=t.component;e(t,4,0,"primary"),e(t,8,0),e(t,21,0,n.dataSource),e(t,28,0,"DatatypeName"),e(t,44,0,"DataverseName"),e(t,60,0,"Timestamp"),e(t,75,0,e(t,76,0,"DatatypeName","DataverseName","Timestamp")),e(t,80,0,e(t,81,0,"DatatypeName","DataverseName","Timestamp"))},function(e,t){var n=t.component;e(t,3,0,al["\u0275nov"](t,4)._toolbarRows.length,!al["\u0275nov"](t,4)._toolbarRows.length),e(t,86,0,"end"===al["\u0275nov"](t,87).align),e(t,89,0,al["\u0275nov"](t,90).disabled||null),e(t,95,0,n.errorMessage),e(t,99,0,al["\u0275nov"](t,100).disabled||null)})}function Lt(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{paginator:0}),al["\u0275qud"](402653184,2,{filter:0}),al["\u0275qud"](402653184,3,{inputQuery:0}),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](4,0,null,null,40,"div",[["class","container"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](6,0,null,null,8,"div",[["class","master"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n   "])),(e()(),al["\u0275and"](16777216,null,null,2,null,At)),al["\u0275did"](9,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275pid"](131072,cl.AsyncPipe,[al.ChangeDetectorRef]),(e()(),al["\u0275ted"](-1,null,[" \n    "])),(e()(),al["\u0275eld"](12,0,null,null,1,"awc-query-metadata",[["class","query"]],null,null,null,Ie,Xp)),al["\u0275did"](13,49152,[[3,4],["querymetadata",4]],0,Qp,[Yp.m,al.ChangeDetectorRef],null,null),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](16,0,null,null,27,"div",[["class","detail"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](18,0,null,null,24,"mat-card",[["class","datatypes-details-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](19,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](21,0,null,0,12,"mat-toolbar",[["class","datatypes-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](22,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,14,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](25,0,null,0,2,"mat-icon",[["class","icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](26,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](29,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["DATATYPE - METADATA - DETAILS"])),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](32,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](35,0,null,0,6,"mat-card-content",[["class","datatypes-content output mat-card-content"]],null,null,null,null,null)),al["\u0275did"](36,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](38,0,null,null,2,"span",[],null,null,null,null,null)),(e()(),al["\u0275eld"](39,0,null,null,1,"pre",[],null,null,null,null,null)),(e()(),al["\u0275ted"](40,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,9,0,al["\u0275unv"](t,9,0,al["\u0275nov"](t,10).transform(n.loaded$))),e(t,22,0,"primary"),e(t,26,0)},function(e,t){var n=t.component;e(t,21,0,al["\u0275nov"](t,22)._toolbarRows.length,!al["\u0275nov"](t,22)._toolbarRows.length),e(t,40,0,n.output)})}function Ft(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"]))],null,null)}function jt(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,46,"div",[["class","datatype-dialog"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](3,0,null,null,2,"p",[["class","mat-dialog-title"],["mat-dialog-title",""]],[[8,"id",0]],null,null,null,null)),al["\u0275did"](4,81920,null,0,zs,[[2,Ms]],null,null),(e()(),al["\u0275ted"](-1,null,["DROP DATATYPE"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](7,0,null,null,5,"mat-dialog-content",[["class","mat-dialog-content"]],null,null,null,null,null)),al["\u0275did"](8,16384,null,0,Bs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](10,0,null,null,1,"p",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["PLEASE GIVE THE NAME OF THE DATATYPE TO DROP"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](14,0,null,null,18,"mat-form-field",[["class","mat-input-container mat-form-field"]],[[2,"mat-input-invalid",null],[2,"mat-form-field-invalid",null],[2,"mat-form-field-can-float",null],[2,"mat-form-field-should-float",null],[2,"mat-form-field-hide-placeholder",null],[2,"mat-form-field-disabled",null],[2,"mat-focused",null],[2,"mat-primary",null],[2,"mat-accent",null],[2,"mat-warn",null],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,ze,lf)),al["\u0275did"](15,7389184,null,7,zu,[al.ElementRef,al.ChangeDetectorRef,[2,ps]],null,null),al["\u0275qud"](335544320,1,{_control:0}),al["\u0275qud"](335544320,2,{_placeholderChild:0}),al["\u0275qud"](335544320,3,{_labelChild:0}),al["\u0275qud"](603979776,4,{_errorChildren:1}),al["\u0275qud"](603979776,5,{_hintChildren:1}),al["\u0275qud"](603979776,6,{_prefixChildren:1}),al["\u0275qud"](603979776,7,{_suffixChildren:1}),(e()(),al["\u0275ted"](-1,1,["\n            "])),(e()(),al["\u0275eld"](24,0,null,1,7,"input",[["class","mat-input-element mat-form-field-autofill-control"],["matInput",""],["tabindex","0"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"mat-input-server",null],[1,"id",0],[8,"placeholder",0],[8,"disabled",0],[8,"required",0],[8,"readOnly",0],[1,"aria-describedby",0],[1,"aria-invalid",0],[1,"aria-required",0]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"focus"]],function(e,t,n){var r=!0,i=e.component;return"input"===t&&(r=!1!==al["\u0275nov"](e,25)._handleInput(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,25).onTouched()&&r),"compositionstart"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionStart()&&r),"compositionend"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionEnd(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!1)&&r),"focus"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!0)&&r),"input"===t&&(r=!1!==al["\u0275nov"](e,30)._onInput()&&r),"ngModelChange"===t&&(r=!1!==(i.data.datatypeName=n)&&r),r},null,null)),al["\u0275did"](25,16384,null,0,Fu.DefaultValueAccessor,[al.Renderer2,al.ElementRef,[2,Fu.COMPOSITION_BUFFER_MODE]],null,null),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[Fu.DefaultValueAccessor]),al["\u0275did"](27,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](29,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null),al["\u0275did"](30,933888,null,0,Uu,[al.ElementRef,pl,[2,Fu.NgControl],[2,Fu.NgForm],[2,Fu.FormGroupDirective],es,[8,null]],null,null),al["\u0275prd"](2048,[[1,4]],ju,null,[Uu]),(e()(),al["\u0275ted"](-1,1,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](34,0,null,null,12,"mat-dialog-actions",[["class","mat-dialog-actions"]],null,null,null,null,null)),al["\u0275did"](35,16384,null,0,Hs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](37,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","1"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},J,nc)),al["\u0275did"](38,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](39,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["DROP"])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](42,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","2"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onNoClick()&&r),r},J,nc)),al["\u0275did"](43,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](44,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["CANCEL"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,4,0),e(t,27,0,n.data.datatypeName),e(t,30,0)},function(e,t){e(t,3,0,al["\u0275nov"](t,4).id),e(t,14,1,[al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._canLabelFloat,al["\u0275nov"](t,15)._shouldLabelFloat(),al["\u0275nov"](t,15)._hideControlPlaceholder(),al["\u0275nov"](t,15)._control.disabled,al["\u0275nov"](t,15)._control.focused,"primary"==al["\u0275nov"](t,15).color,"accent"==al["\u0275nov"](t,15).color,"warn"==al["\u0275nov"](t,15).color,al["\u0275nov"](t,15)._shouldForward("untouched"),al["\u0275nov"](t,15)._shouldForward("touched"),al["\u0275nov"](t,15)._shouldForward("pristine"),al["\u0275nov"](t,15)._shouldForward("dirty"),al["\u0275nov"](t,15)._shouldForward("valid"),al["\u0275nov"](t,15)._shouldForward("invalid"),al["\u0275nov"](t,15)._shouldForward("pending")]),e(t,24,1,[al["\u0275nov"](t,29).ngClassUntouched,al["\u0275nov"](t,29).ngClassTouched,al["\u0275nov"](t,29).ngClassPristine,al["\u0275nov"](t,29).ngClassDirty,al["\u0275nov"](t,29).ngClassValid,al["\u0275nov"](t,29).ngClassInvalid,al["\u0275nov"](t,29).ngClassPending,al["\u0275nov"](t,30)._isServer,al["\u0275nov"](t,30).id,al["\u0275nov"](t,30).placeholder,al["\u0275nov"](t,30).disabled,al["\u0275nov"](t,30).required,al["\u0275nov"](t,30).readonly,al["\u0275nov"](t,30)._ariaDescribedby||null,al["\u0275nov"](t,30).errorState,al["\u0275nov"](t,30).required.toString()]),e(t,37,0,al["\u0275nov"](t,38).disabled||null),e(t,42,0,al["\u0275nov"](t,43).disabled||null)})}function Vt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-dataversename-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,[" Dataverse Name "]))],null,null)}function zt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","indexes-dataversename-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DataverseName)})}function Bt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-datasetname-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,[" Dataset Name "]))],null,null)}function Ht(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","indexes-datasetname-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.DatasetName)})}function Wt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-indexname-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,[" Index Name "]))],null,null)}function qt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","indexes-indexname-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.IndexName)})}function Ut(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-indexestructure-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,[" Index Structure "]))],null,null)}function Gt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","indexes-indexstructure-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.IndexStructure)})}function Kt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-isprimary-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,[" Is Primary "]))],null,null)}function $t(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","indexes-isprimary-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.IsPrimary)})}function Zt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-timestamp-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,[" Timestamp "]))],null,null)}function Qt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","indexes-timestamp-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.Timestamp)})}function Yt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-header-cell",[["class","header-pendingop-cell mat-header-cell"],["role","columnheader"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,nd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](-1,null,[" PendingOp "]))],null,null)}function Xt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"mat-cell",[["class","indexes-dataverse-cell mat-cell"],["role","gridcell"]],null,null,null,null,null)),al["\u0275did"](1,16384,null,0,rd,[Kc,al.ElementRef],null,null),(e()(),al["\u0275ted"](2,null,[" "," "]))],null,function(e,t){e(t,2,0,t.context.$implicit.PendingOp)})}function Jt(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-header-row",[["class","mat-header-row"],["role","row"]],null,null,null,Se,cd)),al["\u0275did"](1,49152,null,0,ld,[],null,null)],null,null)}function en(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"mat-row",[["class","mat-row"],["role","row"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.highlight(e.context.$implicit)&&r),r},Oe,dd)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{highlight:0}),al["\u0275did"](3,49152,null,0,ad,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){e(t,1,0,e(t,2,0,t.component.selectedRowIndex==t.context.$implicit.id))},null)}function tn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,168,"mat-card",[["class","indexes-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](1,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](3,0,null,0,12,"mat-toolbar",[["class","indexes-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](4,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,2,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](7,0,null,0,2,"mat-icon",[["class","icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](8,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](11,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["INDEXES - METADATA"])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](14,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](17,0,null,0,131,"mat-card-content",[["class","indexes-content mat-card-content"]],null,null,null,null,null)),al["\u0275did"](18,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](20,0,null,null,127,"mat-table",[["class","indexes-table mat-table"]],null,null,null,Ee,ud)),al["\u0275did"](21,3391488,[["table",4]],3,Xc,[al.IterableDiffers,al.ChangeDetectorRef,al.ElementRef,[8,null]],{dataSource:[0,"dataSource"]},null),al["\u0275qud"](603979776,3,{_columnDefs:1}),al["\u0275qud"](335544320,4,{_headerDef:0}),al["\u0275qud"](603979776,5,{_rowDefs:1}),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](27,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](28,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,6,{cell:0}),al["\u0275qud"](335544320,7,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Vt)),al["\u0275did"](34,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[7,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,zt)),al["\u0275did"](38,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[6,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](43,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](44,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,8,{cell:0}),al["\u0275qud"](335544320,9,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Bt)),al["\u0275did"](50,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[9,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Ht)),al["\u0275did"](54,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[8,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](59,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](60,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,10,{cell:0}),al["\u0275qud"](335544320,11,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Wt)),al["\u0275did"](66,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[11,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,qt)),al["\u0275did"](70,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[10,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](75,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](76,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,12,{cell:0}),al["\u0275qud"](335544320,13,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Ut)),al["\u0275did"](82,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[13,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Gt)),al["\u0275did"](86,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[12,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](91,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](92,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,14,{cell:0}),al["\u0275qud"](335544320,15,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Kt)),al["\u0275did"](98,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[15,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,$t)),al["\u0275did"](102,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[14,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](107,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](108,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,16,{cell:0}),al["\u0275qud"](335544320,17,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Zt)),al["\u0275did"](114,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[17,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Qt)),al["\u0275did"](118,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[16,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](123,0,null,null,13,null,null,null,null,null,null,null)),al["\u0275did"](124,16384,null,2,td,[],{name:[0,"name"]},null),al["\u0275qud"](335544320,18,{cell:0}),al["\u0275qud"](335544320,19,{headerCell:0}),al["\u0275prd"](2048,[[3,4]],Kc,null,[td]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Yt)),al["\u0275did"](130,16384,null,0,ed,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[19,4]],Gc,null,[ed]),(e()(),al["\u0275ted"](-1,null,["\n              "])),(e()(),al["\u0275and"](0,null,null,2,null,Xt)),al["\u0275did"](134,16384,null,0,Jc,[al.TemplateRef],null,null),al["\u0275prd"](2048,[[18,4]],Uc,null,[Jc]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n\n            "])),(e()(),al["\u0275and"](0,null,null,3,null,Jt)),al["\u0275did"](139,540672,null,0,id,[al.TemplateRef,al.IterableDiffers],{columns:[0,"columns"]},null),al["\u0275pad"](140,6),al["\u0275prd"](2048,[[4,4]],Hc,null,[id]),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](0,null,null,3,null,en)),al["\u0275did"](144,540672,null,0,od,[al.TemplateRef,al.IterableDiffers],{columns:[0,"columns"]},null),al["\u0275pad"](145,6),al["\u0275prd"](2048,[[5,4]],Wc,null,[od]),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](150,0,null,0,17,"mat-card-actions",[["class","actions mat-card-actions"]],[[2,"mat-card-actions-align-end",null]],null,null,null,null)),al["\u0275did"](151,16384,null,0,fd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](153,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.openDropIndexDialog()&&r),r},J,nc)),al["\u0275did"](154,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](155,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["DROP"])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](158,0,null,null,1,"span",[["class","error-message"]],null,null,null,null,null)),(e()(),al["\u0275ted"](159,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](161,0,null,null,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](163,0,null,null,3,"button",[["class","refresh-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.getIndexes()&&r),r},J,nc)),al["\u0275did"](164,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](165,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["REFRESH"])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,0,["\n    "]))],function(e,t){var n=t.component;e(t,4,0,"primary"),e(t,8,0),e(t,21,0,n.dataSource),e(t,28,0,"DataverseName"),e(t,44,0,"DatasetName"),e(t,60,0,"IndexName"),e(t,76,0,"IndexStructure"),e(t,92,0,"IsPrimary"),e(t,108,0,"Timestamp"),e(t,124,0,"PendingOp"),e(t,139,0,e(t,140,0,"IndexName","DatasetName","DataverseName","IndexStructure","IsPrimary","Timestamp")),e(t,144,0,e(t,145,0,"IndexName","DatasetName","DataverseName","IndexStructure","IsPrimary","Timestamp"))},function(e,t){var n=t.component;e(t,3,0,al["\u0275nov"](t,4)._toolbarRows.length,!al["\u0275nov"](t,4)._toolbarRows.length),e(t,150,0,"end"===al["\u0275nov"](t,151).align),e(t,153,0,al["\u0275nov"](t,154).disabled||null),e(t,159,0,n.errorMessage),e(t,163,0,al["\u0275nov"](t,164).disabled||null)})}function nn(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{inputQuery:0}),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](2,0,null,null,40,"div",[["class","container"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](4,0,null,null,8,"div",[["class","master"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275and"](16777216,null,null,2,null,tn)),al["\u0275did"](7,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275pid"](131072,cl.AsyncPipe,[al.ChangeDetectorRef]),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](10,0,null,null,1,"awc-query-metadata",[["class","query"]],null,null,null,Ie,Xp)),al["\u0275did"](11,49152,[[1,4],["querymetadata",4]],0,Qp,[Yp.m,al.ChangeDetectorRef],null,null),(e()(),al["\u0275ted"](-1,null,["  \n  "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](14,0,null,null,27,"div",[["class","detail"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](16,0,null,null,24,"mat-card",[["class","indexes-details-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](17,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](19,0,null,0,12,"mat-toolbar",[["class","indexes-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](20,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,20,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](23,0,null,0,2,"mat-icon",[["class","icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](24,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](27,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["INDEX - METADATA - DETAILS"])),(e()(),al["\u0275ted"](-1,0,["\n              "])),(e()(),al["\u0275eld"](30,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275ted"](-1,0,["\n          "])),(e()(),al["\u0275eld"](33,0,null,0,6,"mat-card-content",[["class","indexes-content output mat-card-content"]],null,null,null,null,null)),al["\u0275did"](34,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](36,0,null,null,2,"span",[],null,null,null,null,null)),(e()(),al["\u0275eld"](37,0,null,null,1,"pre",[],null,null,null,null,null)),(e()(),al["\u0275ted"](38,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,7,0,al["\u0275unv"](t,7,0,al["\u0275nov"](t,8).transform(n.loaded$))),e(t,20,0,"primary"),e(t,24,0)},function(e,t){var n=t.component;e(t,19,0,al["\u0275nov"](t,20)._toolbarRows.length,!al["\u0275nov"](t,20)._toolbarRows.length),e(t,38,0,n.output)})}function rn(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"]))],null,null)}function on(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,46,"div",[["class","index-dialog"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](3,0,null,null,2,"p",[["class","mat-dialog-title"],["mat-dialog-title",""]],[[8,"id",0]],null,null,null,null)),al["\u0275did"](4,81920,null,0,zs,[[2,Ms]],null,null),(e()(),al["\u0275ted"](-1,null,["DROP INDEX"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](7,0,null,null,5,"mat-dialog-content",[["class","mat-dialog-content"]],null,null,null,null,null)),al["\u0275did"](8,16384,null,0,Bs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](10,0,null,null,1,"p",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["PLEASE GIVE THE DATAVERSENAME.INDEXNAME OF THE INDEX TO DROP"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](14,0,null,null,18,"mat-form-field",[["class","mat-input-container mat-form-field"]],[[2,"mat-input-invalid",null],[2,"mat-form-field-invalid",null],[2,"mat-form-field-can-float",null],[2,"mat-form-field-should-float",null],[2,"mat-form-field-hide-placeholder",null],[2,"mat-form-field-disabled",null],[2,"mat-focused",null],[2,"mat-primary",null],[2,"mat-accent",null],[2,"mat-warn",null],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,ze,lf)),al["\u0275did"](15,7389184,null,7,zu,[al.ElementRef,al.ChangeDetectorRef,[2,ps]],null,null),al["\u0275qud"](335544320,1,{_control:0}),al["\u0275qud"](335544320,2,{_placeholderChild:0}),al["\u0275qud"](335544320,3,{_labelChild:0}),al["\u0275qud"](603979776,4,{_errorChildren:1}),al["\u0275qud"](603979776,5,{_hintChildren:1}),al["\u0275qud"](603979776,6,{_prefixChildren:1}),al["\u0275qud"](603979776,7,{_suffixChildren:1}),(e()(),al["\u0275ted"](-1,1,["\n            "])),(e()(),al["\u0275eld"](24,0,null,1,7,"input",[["class","mat-input-element mat-form-field-autofill-control"],["matInput",""],["tabindex","0"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"mat-input-server",null],[1,"id",0],[8,"placeholder",0],[8,"disabled",0],[8,"required",0],[8,"readOnly",0],[1,"aria-describedby",0],[1,"aria-invalid",0],[1,"aria-required",0]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"focus"]],function(e,t,n){var r=!0,i=e.component;return"input"===t&&(r=!1!==al["\u0275nov"](e,25)._handleInput(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,25).onTouched()&&r),"compositionstart"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionStart()&&r),"compositionend"===t&&(r=!1!==al["\u0275nov"](e,25)._compositionEnd(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!1)&&r),"focus"===t&&(r=!1!==al["\u0275nov"](e,30)._focusChanged(!0)&&r),"input"===t&&(r=!1!==al["\u0275nov"](e,30)._onInput()&&r),"ngModelChange"===t&&(r=!1!==(i.data.indexName=n)&&r),r},null,null)),al["\u0275did"](25,16384,null,0,Fu.DefaultValueAccessor,[al.Renderer2,al.ElementRef,[2,Fu.COMPOSITION_BUFFER_MODE]],null,null),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[Fu.DefaultValueAccessor]),al["\u0275did"](27,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](29,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null),al["\u0275did"](30,933888,null,0,Uu,[al.ElementRef,pl,[2,Fu.NgControl],[2,Fu.NgForm],[2,Fu.FormGroupDirective],es,[8,null]],null,null),al["\u0275prd"](2048,[[1,4]],ju,null,[Uu]),(e()(),al["\u0275ted"](-1,1,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](34,0,null,null,12,"mat-dialog-actions",[["class","mat-dialog-actions"]],null,null,null,null,null)),al["\u0275did"](35,16384,null,0,Hs,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](37,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","1"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},J,nc)),al["\u0275did"](38,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](39,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["DROP"])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](42,0,null,null,3,"button",[["class","mat-button"],["mat-button",""],["tabindex","2"]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onNoClick()&&r),r},J,nc)),al["\u0275did"](43,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](44,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["CANCEL"])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,4,0),e(t,27,0,n.data.indexName),e(t,30,0)},function(e,t){e(t,3,0,al["\u0275nov"](t,4).id),e(t,14,1,[al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._control.errorState,al["\u0275nov"](t,15)._canLabelFloat,al["\u0275nov"](t,15)._shouldLabelFloat(),al["\u0275nov"](t,15)._hideControlPlaceholder(),al["\u0275nov"](t,15)._control.disabled,al["\u0275nov"](t,15)._control.focused,"primary"==al["\u0275nov"](t,15).color,"accent"==al["\u0275nov"](t,15).color,"warn"==al["\u0275nov"](t,15).color,al["\u0275nov"](t,15)._shouldForward("untouched"),al["\u0275nov"](t,15)._shouldForward("touched"),al["\u0275nov"](t,15)._shouldForward("pristine"),al["\u0275nov"](t,15)._shouldForward("dirty"),al["\u0275nov"](t,15)._shouldForward("valid"),al["\u0275nov"](t,15)._shouldForward("invalid"),al["\u0275nov"](t,15)._shouldForward("pending")]),e(t,24,1,[al["\u0275nov"](t,29).ngClassUntouched,al["\u0275nov"](t,29).ngClassTouched,al["\u0275nov"](t,29).ngClassPristine,al["\u0275nov"](t,29).ngClassDirty,al["\u0275nov"](t,29).ngClassValid,al["\u0275nov"](t,29).ngClassInvalid,al["\u0275nov"](t,29).ngClassPending,al["\u0275nov"](t,30)._isServer,al["\u0275nov"](t,30).id,al["\u0275nov"](t,30).placeholder,al["\u0275nov"](t,30).disabled,al["\u0275nov"](t,30).required,al["\u0275nov"](t,30).readonly,al["\u0275nov"](t,30)._ariaDescribedby||null,al["\u0275nov"](t,30).errorState,al["\u0275nov"](t,30).required.toString()]),e(t,37,0,al["\u0275nov"](t,38).disabled||null),e(t,42,0,al["\u0275nov"](t,43).disabled||null)})}function ln(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,41,"header",[["class","awc-navbar"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](3,0,null,null,38,"nav",[["class","awc-navbar-header"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](5,0,null,null,8,"a",[["aria-label","AsterixDB Web Console"],["class","awc-button mat-button"],["mat-button",""],["routerLink","/"]],[[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==al["\u0275nov"](e,6)._haltDisabledEvents(n)&&r),r},ee,rc)),al["\u0275did"](6,180224,null,0,Zs,[pl,La,al.ElementRef],null,null),al["\u0275did"](7,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](9,0,null,0,0,"img",[["alt","AsterixDB"],["class","awc-asterixDB-logo"],["src","assets/asterixdb_tm.png"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n            "])),(e()(),al["\u0275eld"](11,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["Administration Console"])),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](15,0,null,null,0,"div",[["class","flex-spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](17,0,null,null,3,"a",[["aria-label","WEBSITE"],["class","awc-button awc-navbar-hide-small mat-button"],["href","https://asterixDB.apache.org"],["mat-button",""]],[[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==al["\u0275nov"](e,18)._haltDisabledEvents(n)&&r),r},ee,rc)),al["\u0275did"](18,180224,null,0,Zs,[pl,La,al.ElementRef],null,null),al["\u0275did"](19,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n        WEBSITE\n      "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](22,0,null,null,3,"a",[["aria-label","FILE ISSUES"],["class","awc-button awc-navbar-hide-small mat-button"],["href","https://issues.apache.org/jira/browse/ASTERIXDB"],["mat-button",""]],[[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==al["\u0275nov"](e,23)._haltDisabledEvents(n)&&r),r},ee,rc)),al["\u0275did"](23,180224,null,0,Zs,[pl,La,al.ElementRef],null,null),al["\u0275did"](24,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n        FILE ISSUES\n      "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](27,0,null,null,3,"a",[["aria-label","DOCUMENTATION"],["class","awc-button awc-navbar-hide-small mat-button"],["href","https://ci.apache.org/projects/asterixdb/index.html"],["mat-button",""]],[[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==al["\u0275nov"](e,28)._haltDisabledEvents(n)&&r),r},ee,rc)),al["\u0275did"](28,180224,null,0,Zs,[pl,La,al.ElementRef],null,null),al["\u0275did"](29,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n        DOCUMENTATION\n      "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](32,0,null,null,3,"a",[["aria-label","CONTACT"],["class","awc-button docs-navbar-hide-small mat-button"],["href","https://asterixdb.apache.org/community.html"],["mat-button",""]],[[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==al["\u0275nov"](e,33)._haltDisabledEvents(n)&&r),r},ee,rc)),al["\u0275did"](33,180224,null,0,Zs,[pl,La,al.ElementRef],null,null),al["\u0275did"](34,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n        CONTACT\n      "])),(e()(),al["\u0275ted"](-1,null,["\n\n      "])),(e()(),al["\u0275eld"](37,0,null,null,3,"a",[["aria-label","GITHUB"],["class","awc-button docs-navbar-hide-small mat-button"],["href","https://github.com/apache/asterixdb/"],["mat-button",""]],[[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==al["\u0275nov"](e,38)._haltDisabledEvents(n)&&r),r},ee,rc)),al["\u0275did"](38,180224,null,0,Zs,[pl,La,al.ElementRef],null,null),al["\u0275did"](39,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n        GITHUB\n      "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],null,function(e,t){e(t,5,0,al["\u0275nov"](t,6).disabled?-1:0,al["\u0275nov"](t,6).disabled||null,al["\u0275nov"](t,6).disabled.toString()),e(t,17,0,al["\u0275nov"](t,18).disabled?-1:0,al["\u0275nov"](t,18).disabled||null,al["\u0275nov"](t,18).disabled.toString()),e(t,22,0,al["\u0275nov"](t,23).disabled?-1:0,al["\u0275nov"](t,23).disabled||null,al["\u0275nov"](t,23).disabled.toString()),e(t,27,0,al["\u0275nov"](t,28).disabled?-1:0,al["\u0275nov"](t,28).disabled||null,al["\u0275nov"](t,28).disabled.toString()),e(t,32,0,al["\u0275nov"](t,33).disabled?-1:0,al["\u0275nov"](t,33).disabled||null,al["\u0275nov"](t,33).disabled.toString()),e(t,37,0,al["\u0275nov"](t,38).disabled?-1:0,al["\u0275nov"](t,38).disabled||null,al["\u0275nov"](t,38).disabled.toString())})}function an(e){return al["\u0275vid"](0,[(e()(),al["\u0275and"](0,null,null,0))],null,null)}function sn(e){return al["\u0275vid"](0,[(e()(),al["\u0275and"](16777216,null,null,1,null,an)),al["\u0275did"](1,212992,null,0,$l,[al.ComponentFactoryResolver,al.ViewContainerRef],{portal:[0,"portal"]},null),(e()(),al["\u0275and"](0,null,null,0))],function(e,t){e(t,1,0,t.parent.context.$implicit.templateLabel)},null)}function un(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](0,null,["",""]))],null,function(e,t){e(t,0,0,t.parent.context.$implicit.textLabel)})}function cn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,6,"div",[["class","mat-tab-label mat-ripple"],["mat-ripple",""],["matTabLabelWrapper",""],["role","tab"]],[[8,"id",0],[1,"tabIndex",0],[1,"aria-controls",0],[1,"aria-selected",0],[2,"mat-tab-label-active",null],[2,"mat-ripple-unbounded",null],[2,"mat-tab-disabled",null]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component._handleClick(e.context.$implicit,al["\u0275nov"](e.parent,2),e.context.index)&&r),r},null,null)),al["\u0275did"](1,671744,null,0,ss,[al.ElementRef,al.NgZone,pl,[2,as]],{disabled:[0,"disabled"]},null),al["\u0275did"](2,16384,[[2,4]],0,Jf,[al.ElementRef],{disabled:[0,"disabled"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,sn)),al["\u0275did"](4,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,un)),al["\u0275did"](6,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null)],function(e,t){e(t,1,0,t.context.$implicit.disabled||t.component.disableRipple),e(t,2,0,t.context.$implicit.disabled),e(t,4,0,t.context.$implicit.templateLabel),e(t,6,0,!t.context.$implicit.templateLabel)},function(e,t){var n=t.component;e(t,0,0,n._getTabLabelId(t.context.index),n._getTabIndex(t.context.$implicit,t.context.index),n._getTabContentId(t.context.index),n.selectedIndex==t.context.index,n.selectedIndex==t.context.index,al["\u0275nov"](t,1).unbounded,al["\u0275nov"](t,2).disabled)})}function dn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-tab-body",[["class","mat-tab-body"],["role","tabpanel"]],[[8,"id",0],[1,"aria-labelledby",0],[2,"mat-tab-body-active",null]],[[null,"_onCentered"],[null,"_onCentering"]],function(e,t,n){var r=!0,i=e.component;return"_onCentered"===t&&(r=!1!==i._removeTabBodyWrapperHeight()&&r),"_onCentering"===t&&(r=!1!==i._setTabBodyWrapperHeight(n)&&r),r},hn,rh)),al["\u0275did"](1,114688,null,0,Qf,[al.ElementRef,[2,Bl]],{_content:[0,"_content"],position:[1,"position"],origin:[2,"origin"]},{_onCentering:"_onCentering",_onCentered:"_onCentered"})],function(e,t){e(t,1,0,t.context.$implicit.content,t.context.$implicit.position,t.context.$implicit.origin)},function(e,t){var n=t.component;e(t,0,0,n._getTabContentId(t.context.index),n._getTabLabelId(t.context.index),n.selectedIndex==t.context.index)})}function pn(e){return al["\u0275vid"](2,[al["\u0275qud"](402653184,1,{_tabBodyWrapper:0}),(e()(),al["\u0275eld"](1,0,null,null,4,"mat-tab-header",[["class","mat-tab-header"]],[[2,"mat-tab-header-pagination-controls-enabled",null],[2,"mat-tab-header-rtl",null]],[[null,"indexFocused"],[null,"selectFocusedIndex"]],function(e,t,n){var r=!0,i=e.component;return"indexFocused"===t&&(r=!1!==i._focusChanged(n)&&r),"selectFocusedIndex"===t&&(r=!1!==(i.selectedIndex=n)&&r),r},mn,ih)),al["\u0275did"](2,3325952,[["tabHeader",4]],1,eh,[al.ElementRef,al.ChangeDetectorRef,jl,[2,Bl]],{disableRipple:[0,"disableRipple"],selectedIndex:[1,"selectedIndex"]},{selectFocusedIndex:"selectFocusedIndex",indexFocused:"indexFocused"}),al["\u0275qud"](603979776,2,{_labelWrappers:1}),(e()(),al["\u0275and"](16777216,null,0,1,null,cn)),al["\u0275did"](5,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275eld"](6,0,[[1,0],["tabBodyWrapper",1]],null,2,"div",[["class","mat-tab-body-wrapper"]],null,null,null,null,null)),(e()(),al["\u0275and"](16777216,null,null,1,null,dn)),al["\u0275did"](8,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],function(e,t){var n=t.component;e(t,2,0,n.disableRipple,n.selectedIndex),e(t,5,0,n._tabs),e(t,8,0,n._tabs)},function(e,t){e(t,1,0,al["\u0275nov"](t,2)._showPaginationControls,"rtl"==al["\u0275nov"](t,2)._getLayoutDirection())})}function fn(e){return al["\u0275vid"](0,[(e()(),al["\u0275and"](0,null,null,0))],null,null)}function hn(e){return al["\u0275vid"](2,[(e()(),al["\u0275eld"](0,0,[["content",1]],null,2,"div",[["class","mat-tab-body-content"]],[[24,"@translateTab",0]],[[null,"@translateTab.start"],[null,"@translateTab.done"]],function(e,t,n){var r=!0,i=e.component;return"@translateTab.start"===t&&(r=!1!==i._onTranslateTabStarted(n)&&r),"@translateTab.done"===t&&(r=!1!==i._onTranslateTabComplete(n)&&r),r},null,null)),(e()(),al["\u0275and"](16777216,null,null,1,null,fn)),al["\u0275did"](2,212992,null,0,Zf,[al.ComponentFactoryResolver,al.ViewContainerRef,Qf],null,null)],function(e,t){e(t,2,0)},function(e,t){e(t,0,0,t.component._position)})}function mn(e){return al["\u0275vid"](2,[al["\u0275qud"](402653184,1,{_inkBar:0}),al["\u0275qud"](402653184,2,{_tabListContainer:0}),al["\u0275qud"](402653184,3,{_tabList:0}),(e()(),al["\u0275eld"](3,0,null,null,2,"div",[["aria-hidden","true"],["class","mat-tab-header-pagination mat-tab-header-pagination-before mat-elevation-z4 mat-ripple"],["mat-ripple",""]],[[2,"mat-tab-header-pagination-disabled",null],[2,"mat-ripple-unbounded",null]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component._scrollHeader("before")&&r),r},null,null)),al["\u0275did"](4,671744,null,0,ss,[al.ElementRef,al.NgZone,pl,[2,as]],{disabled:[0,"disabled"]},null),(e()(),al["\u0275eld"](5,0,null,null,0,"div",[["class","mat-tab-header-pagination-chevron"]],null,null,null,null,null)),(e()(),al["\u0275eld"](6,0,[[2,0],["tabListContainer",1]],null,6,"div",[["class","mat-tab-label-container"]],null,[[null,"keydown"]],function(e,t,n){var r=!0;return"keydown"===t&&(r=!1!==e.component._handleKeydown(n)&&r),r},null,null)),(e()(),al["\u0275eld"](7,0,[[3,0],["tabList",1]],null,5,"div",[["class","mat-tab-list"],["role","tablist"]],null,[[null,"cdkObserveContent"]],function(e,t,n){var r=!0;return"cdkObserveContent"===t&&(r=!1!==e.component._onContentChanges()&&r),r},null,null)),al["\u0275did"](8,1196032,null,0,Uf,[qf,al.ElementRef,al.NgZone],null,{event:"cdkObserveContent"}),(e()(),al["\u0275eld"](9,0,null,null,1,"div",[["class","mat-tab-labels"]],null,null,null,null,null)),al["\u0275ncd"](null,0),(e()(),al["\u0275eld"](11,0,null,null,1,"mat-ink-bar",[["class","mat-ink-bar"]],null,null,null,null,null)),al["\u0275did"](12,16384,[[1,4]],0,Kf,[al.ElementRef,al.NgZone],null,null),(e()(),al["\u0275eld"](13,0,null,null,2,"div",[["aria-hidden","true"],["class","mat-tab-header-pagination mat-tab-header-pagination-after mat-elevation-z4 mat-ripple"],["mat-ripple",""]],[[2,"mat-tab-header-pagination-disabled",null],[2,"mat-ripple-unbounded",null]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component._scrollHeader("after")&&r),r},null,null)),al["\u0275did"](14,671744,null,0,ss,[al.ElementRef,al.NgZone,pl,[2,as]],{disabled:[0,"disabled"]},null),(e()(),al["\u0275eld"](15,0,null,null,0,"div",[["class","mat-tab-header-pagination-chevron"]],null,null,null,null,null))],function(e,t){var n=t.component;e(t,4,0,n._disableScrollBefore||n.disableRipple),e(t,14,0,n._disableScrollAfter||n.disableRipple)},function(e,t){var n=t.component;e(t,3,0,n._disableScrollBefore,al["\u0275nov"](t,4).unbounded),e(t,13,0,n._disableScrollAfter,al["\u0275nov"](t,14).unbounded)})}function gn(e){return al["\u0275vid"](0,[al["\u0275ncd"](null,0),(e()(),al["\u0275and"](0,null,null,0))],null,null)}function yn(e){return al["\u0275vid"](2,[al["\u0275qud"](402653184,1,{_content:0}),(e()(),al["\u0275and"](0,[[1,2]],null,0,null,gn))],null,null)}function vn(e){return al["\u0275vid"](0,[],null,null)}function bn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"li",[["class","ui-treenode-droppoint"]],null,[[null,"drop"],[null,"dragover"],[null,"dragenter"],[null,"dragleave"]],function(e,t,n){var r=!0,i=e.component;return"drop"===t&&(r=!1!==i.onDropPoint(n,-1)&&r),"dragover"===t&&(r=!1!==i.onDropPointDragOver(n)&&r),"dragenter"===t&&(r=!1!==i.onDropPointDragEnter(n,-1)&&r),"dragleave"===t&&(r=!1!==i.onDropPointDragLeave(n)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"ui-treenode-droppoint-active ui-state-highlight":0})],function(e,t){e(t,1,0,"ui-treenode-droppoint",e(t,2,0,t.component.draghoverPrev))},null)}function _n(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,5,"div",[["class","ui-chkbox"]],null,null,null,null,null)),(e()(),al["\u0275eld"](1,0,null,null,4,"div",[["class","ui-chkbox-box ui-widget ui-corner-all ui-state-default"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275eld"](3,0,null,null,2,"span",[["class","ui-chkbox-icon ui-clickable fa"]],null,null,null,null,null)),al["\u0275did"](4,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](5,{"fa-check":0,"fa-minus":1})],function(e,t){var n=t.component;e(t,4,0,"ui-chkbox-icon ui-clickable fa",e(t,5,0,n.isSelected(),n.node.partialSelected))},null)}function wn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"span",[],[[8,"className",0]],null,null,null,null))],null,function(e,t){e(t,0,0,t.component.getIcon())})}function xn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.component.node.label)})}function Cn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                                "])),(e()(),al["\u0275eld"](2,16777216,null,null,1,"p-treeNodeTemplateLoader",[],null,null,null,vn,uh)),al["\u0275did"](3,245760,null,0,lh.TreeNodeTemplateLoader,[al.ViewContainerRef],{node:[0,"node"],template:[1,"template"]},null),(e()(),al["\u0275ted"](-1,null,["\n                            "]))],function(e,t){var n=t.component;e(t,3,0,n.node,n.tree.getTemplateForNode(n.node))},null)}function En(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"p-treeNode",[],null,null,null,Fn,ch)),al["\u0275did"](1,114688,null,0,lh.UITreeNode,[lh.Tree],{node:[0,"node"],parentNode:[1,"parentNode"],index:[2,"index"],firstChild:[3,"firstChild"],lastChild:[4,"lastChild"]},null)],function(e,t){e(t,1,0,t.context.$implicit,t.component.node,t.context.index,t.context.first,t.context.last)},null)}function Sn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"ul",[["class","ui-treenode-children"],["style","display: none;"]],[[4,"display",null]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,En)),al["\u0275did"](3,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "]))],function(e,t){e(t,3,0,t.component.node.children)},function(e,t){e(t,0,0,t.component.node.expanded?"block":"none")})}function On(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,29,"li",[],null,null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pad"](2,3),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](4,0,null,null,21,"div",[["class","ui-treenode-content"]],[[8,"draggable",0]],[[null,"click"],[null,"contextmenu"],[null,"touchend"],[null,"drop"],[null,"dragover"],[null,"dragenter"],[null,"dragleave"],[null,"dragstart"],[null,"dragend"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==i.onNodeClick(n)&&r),"contextmenu"===t&&(r=!1!==i.onNodeRightClick(n)&&r),"touchend"===t&&(r=!1!==i.onNodeTouchEnd()&&r),"drop"===t&&(r=!1!==i.onDropNode(n)&&r),"dragover"===t&&(r=!1!==i.onDropNodeDragOver(n)&&r),"dragenter"===t&&(r=!1!==i.onDropNodeDragEnter(n)&&r),"dragleave"===t&&(r=!1!==i.onDropNodeDragLeave(n)&&r),"dragstart"===t&&(r=!1!==i.onDragStart(n)&&r),"dragend"===t&&(r=!1!==i.onDragStop(n)&&r),r},null,null)),al["\u0275did"](5,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](6,{"ui-treenode-selectable":0,"ui-treenode-dragover":1,"ui-treenode-content-selected":2}),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](8,0,null,null,2,"span",[["class","ui-tree-toggler  fa fa-fw"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.toggle(n)&&r),r},null,null)),al["\u0275did"](9,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](10,{"fa-caret-right":0,"fa-caret-down":1}),(e()(),al["\u0275and"](16777216,null,null,1,null,_n)),al["\u0275did"](12,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,wn)),al["\u0275did"](14,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275eld"](15,0,null,null,9,"span",[["class","ui-treenode-label ui-corner-all"]],null,null,null,null,null)),al["\u0275did"](16,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](17,{"ui-state-highlight":0}),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,xn)),al["\u0275did"](20,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Cn)),al["\u0275did"](23,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Sn)),al["\u0275did"](28,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,"ui-treenode",n.node.styleClass||"",n.isLeaf()?"ui-treenode-leaf":"")),e(t,5,0,"ui-treenode-content",e(t,6,0,n.tree.selectionMode&&!1!==n.node.selectable,n.draghoverNode,n.isSelected())),e(t,9,0,"ui-tree-toggler  fa fa-fw",e(t,10,0,!n.node.expanded,n.node.expanded)),e(t,12,0,"checkbox"==n.tree.selectionMode),e(t,14,0,n.node.icon||n.node.expandedIcon||n.node.collapsedIcon),e(t,16,0,"ui-treenode-label ui-corner-all",e(t,17,0,n.isSelected())),e(t,20,0,!n.tree.getTemplateForNode(n.node)),e(t,23,0,n.tree.getTemplateForNode(n.node)),e(t,28,0,n.node.children&&n.node.expanded)},function(e,t){e(t,4,0,t.component.tree.draggableNodes)})}function Tn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"li",[["class","ui-treenode-droppoint"]],null,[[null,"drop"],[null,"dragover"],[null,"dragenter"],[null,"dragleave"]],function(e,t,n){var r=!0,i=e.component;return"drop"===t&&(r=!1!==i.onDropPoint(n,1)&&r),"dragover"===t&&(r=!1!==i.onDropPointDragOver(n)&&r),"dragenter"===t&&(r=!1!==i.onDropPointDragEnter(n,1)&&r),"dragleave"===t&&(r=!1!==i.onDropPointDragLeave(n)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"ui-treenode-droppoint-active ui-state-highlight":0})],function(e,t){e(t,1,0,"ui-treenode-droppoint",e(t,2,0,t.component.draghoverNext))},null)}function kn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,21,"td",[["class","ui-treenode-connector"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275eld"](2,0,null,null,18,"table",[["class","ui-treenode-connector-table"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                                "])),(e()(),al["\u0275eld"](4,0,null,null,15,"tbody",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                                    "])),(e()(),al["\u0275eld"](6,0,null,null,5,"tr",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                                        "])),(e()(),al["\u0275eld"](8,0,null,null,2,"td",[],null,null,null,null,null)),al["\u0275did"](9,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](10,{"ui-treenode-connector-line":0}),(e()(),al["\u0275ted"](-1,null,["\n                                    "])),(e()(),al["\u0275ted"](-1,null,["\n                                    "])),(e()(),al["\u0275eld"](13,0,null,null,5,"tr",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                                        "])),(e()(),al["\u0275eld"](15,0,null,null,2,"td",[],null,null,null,null,null)),al["\u0275did"](16,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](17,{"ui-treenode-connector-line":0}),(e()(),al["\u0275ted"](-1,null,["\n                                    "])),(e()(),al["\u0275ted"](-1,null,["\n                                "])),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){var n=t.component;e(t,9,0,e(t,10,0,!n.firstChild)),e(t,16,0,e(t,17,0,!n.lastChild))},null)}function Dn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"span",[["class","ui-tree-toggler fa fa-fw"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.toggle(n)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"fa-plus":0,"fa-minus":1})],function(e,t){var n=t.component;e(t,1,0,"ui-tree-toggler fa fa-fw",e(t,2,0,!n.node.expanded,n.node.expanded))},null)}function In(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"span",[],[[8,"className",0]],null,null,null,null))],null,function(e,t){e(t,0,0,t.component.getIcon())})}function Rn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.component.node.label)})}function Mn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                                            "])),(e()(),al["\u0275eld"](2,16777216,null,null,1,"p-treeNodeTemplateLoader",[],null,null,null,vn,uh)),al["\u0275did"](3,245760,null,0,lh.TreeNodeTemplateLoader,[al.ViewContainerRef],{node:[0,"node"],template:[1,"template"]},null),(e()(),al["\u0275ted"](-1,null,["\n                                        "]))],function(e,t){var n=t.component;e(t,3,0,n.node,n.tree.getTemplateForNode(n.node))},null)}function Pn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"p-treeNode",[],null,null,null,Fn,ch)),al["\u0275did"](1,114688,null,0,lh.UITreeNode,[lh.Tree],{node:[0,"node"],firstChild:[1,"firstChild"],lastChild:[2,"lastChild"]},null)],function(e,t){e(t,1,0,t.context.$implicit,t.context.first,t.context.last)},null)}function Nn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,7,"td",[["class","ui-treenode-children-container"]],[[4,"display",null]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275eld"](2,0,null,null,4,"div",[["class","ui-treenode-children"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Pn)),al["\u0275did"](5,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){e(t,5,0,t.component.node.children)},function(e,t){e(t,0,0,t.component.node.expanded?"table-cell":"none")})}function An(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,36,"table",[],[[8,"className",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,0,null,null,33,"tbody",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](4,0,null,null,30,"tr",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,kn)),al["\u0275did"](7,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275eld"](9,0,null,null,21,"td",[["class","ui-treenode"]],null,null,null,null,null)),al["\u0275did"](10,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](11,{"ui-treenode-collapsed":0}),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275eld"](13,0,null,null,16,"div",[["class","ui-treenode-content ui-state-default ui-corner-all"]],null,[[null,"click"],[null,"contextmenu"],[null,"touchend"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==i.onNodeClick(n)&&r),"contextmenu"===t&&(r=!1!==i.onNodeRightClick(n)&&r),"touchend"===t&&(r=!1!==i.onNodeTouchEnd()&&r),r},null,null)),al["\u0275did"](14,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](15,{"ui-treenode-selectable":0,"ui-state-highlight":1}),(e()(),al["\u0275ted"](-1,null,["\n                                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Dn)),al["\u0275did"](18,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275and"](16777216,null,null,1,null,In)),al["\u0275did"](20,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275eld"](21,0,null,null,7,"span",[["class","ui-treenode-label ui-corner-all"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Rn)),al["\u0275did"](24,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Mn)),al["\u0275did"](27,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                                "])),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Nn)),al["\u0275did"](33,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){var n=t.component;e(t,7,0,!n.root),e(t,10,0,"ui-treenode",e(t,11,0,!n.node.expanded)),e(t,14,0,"ui-treenode-content ui-state-default ui-corner-all",e(t,15,0,n.tree.selectionMode,n.isSelected())),e(t,18,0,!n.isLeaf()),e(t,20,0,n.node.icon||n.node.expandedIcon||n.node.collapsedIcon),e(t,24,0,!n.tree.getTemplateForNode(n.node)),e(t,27,0,n.tree.getTemplateForNode(n.node)),e(t,33,0,n.node.children&&n.node.expanded)},function(e,t){e(t,0,0,t.component.node.styleClass)})}function Ln(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,bn)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,On)),al["\u0275did"](5,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Tn)),al["\u0275did"](8,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,An)),al["\u0275did"](11,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){var n=t.component;e(t,2,0,n.tree.droppableNodes),e(t,5,0,!n.tree.horizontal),e(t,8,0,n.tree.droppableNodes&&n.lastChild),e(t,11,0,n.tree.horizontal)},null)}function Fn(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Ln)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){e(t,2,0,t.component.node)},null)}function jn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"div",[["class","ui-tree-loading-mask ui-widget-overlay"]],null,null,null,null,null))],null,null)}function Vn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"div",[["class","ui-tree-loading-content"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "]))],null,function(e,t){e(t,2,0,"fa fa-spin fa-2x "+t.component.loadingIcon)})}function zn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"p-treeNode",[],null,null,null,Fn,ch)),al["\u0275did"](1,114688,null,0,lh.UITreeNode,[lh.Tree],{node:[0,"node"],index:[1,"index"],firstChild:[2,"firstChild"],lastChild:[3,"lastChild"]},null)],function(e,t){e(t,1,0,t.context.$implicit,t.context.index,t.context.first,t.context.last)},null)}function Bn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,16,"div",[],null,[[null,"drop"],[null,"dragover"],[null,"dragenter"],[null,"dragleave"]],function(e,t,n){var r=!0,i=e.component;return"drop"===t&&(r=!1!==i.onDrop(n)&&r),"dragover"===t&&(r=!1!==i.onDragOver(n)&&r),"dragenter"===t&&(r=!1!==i.onDragEnter(n)&&r),"dragleave"===t&&(r=!1!==i.onDragLeave(n)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"ui-tree ui-widget ui-widget-content ui-corner-all":0,"ui-tree-selectable":1,"ui-treenode-dragover":2,"ui-tree-loading":3}),al["\u0275did"](3,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,jn)),al["\u0275did"](6,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Vn)),al["\u0275did"](9,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](11,0,null,null,4,"ul",[["class","ui-tree-container"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,zn)),al["\u0275did"](14,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){var n=t.component;e(t,1,0,n.styleClass,e(t,2,0,!0,n.selectionMode,n.dragHover,n.loading)),e(t,3,0,n.style),e(t,6,0,n.loading),e(t,9,0,n.loading),e(t,14,0,n.value)},null)}function Hn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"div",[["class","ui-tree-loading ui-widget-overlay"]],null,null,null,null,null))],null,null)}function Wn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"div",[["class","ui-tree-loading-content"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "]))],null,function(e,t){e(t,2,0,"fa fa-spin fa-2x "+t.component.loadingIcon)})}function qn(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"table",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,0,null,null,1,"p-treeNode",[],null,null,null,Fn,ch)),al["\u0275did"](3,114688,null,0,lh.UITreeNode,[lh.Tree],{node:[0,"node"],root:[1,"root"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){e(t,3,0,t.component.value[0],!0)},null)}function Un(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,13,"div",[],null,null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"ui-tree ui-tree-horizontal ui-widget ui-widget-content ui-corner-all":0,"ui-tree-selectable":1}),al["\u0275did"](3,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Hn)),al["\u0275did"](6,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Wn)),al["\u0275did"](9,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,qn)),al["\u0275did"](12,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){var n=t.component;e(t,1,0,n.styleClass,e(t,2,0,!0,n.selectionMode)),e(t,3,0,n.style),e(t,6,0,n.loading),e(t,9,0,n.loading),e(t,12,0,n.value&&n.value[0])},null)}function Gn(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Bn)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Un)),al["\u0275did"](5,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){var n=t.component;e(t,2,0,!n.horizontal),e(t,5,0,n.horizontal)},null)}function Kn(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,55,"mat-card",[["class","metadata-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](2,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n  "])),(e()(),al["\u0275eld"](4,0,null,0,12,"mat-toolbar",[["class","metadata-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](5,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,1,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275eld"](8,0,null,0,2,"mat-icon",[["class","example-icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](9,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275eld"](12,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["METADATA GUIDE"])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275eld"](15,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n  "])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275eld"](18,0,null,0,36,"div",[["class","metadata-content-area"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](20,0,null,null,33,"div",[["class","metadata-tree"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](22,0,null,null,6,"div",[["class","metadata-all"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](24,0,null,null,3,"p-tree",[["selectionMode","single"]],null,[[null,"onNodeSelect"]],function(e,t,n){var r=!0;return"onNodeSelect"===t&&(r=!1!==e.component.nodeSelectAll(n)&&r),r},Gn,dh)),al["\u0275did"](25,1294336,null,1,lh.Tree,[[2,sh.TreeDragDropService]],{value:[0,"value"],selectionMode:[1,"selectionMode"],style:[2,"style"]},{onNodeSelect:"onNodeSelect"}),al["\u0275qud"](603979776,2,{templates:1}),al["\u0275pod"](27,{width:0,border:1,"font-family":2,"font-size":3,"font-weight":4}),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](30,0,null,null,6,"div",[["class","metadata-datasets"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](32,0,null,null,3,"p-tree",[["selectionMode","single"]],null,[[null,"onNodeSelect"]],function(e,t,n){var r=!0;return"onNodeSelect"===t&&(r=!1!==e.component.nodeSelectDataset(n)&&r),r},Gn,dh)),al["\u0275did"](33,1294336,null,1,lh.Tree,[[2,sh.TreeDragDropService]],{value:[0,"value"],selectionMode:[1,"selectionMode"],style:[2,"style"]},{onNodeSelect:"onNodeSelect"}),al["\u0275qud"](603979776,3,{templates:1}),al["\u0275pod"](35,{width:0,border:1,"font-family":2,"font-size":3,"font-weight":4}),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](38,0,null,null,6,"div",[["class","metadata-datatypes"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](40,0,null,null,3,"p-tree",[["selectionMode","single"]],null,null,null,Gn,dh)),al["\u0275did"](41,1294336,null,1,lh.Tree,[[2,sh.TreeDragDropService]],{value:[0,"value"],selectionMode:[1,"selectionMode"],style:[2,"style"]},null),al["\u0275qud"](603979776,4,{templates:1}),al["\u0275pod"](43,{width:0,border:1,"font-family":2,"font-size":3,"font-weight":4}),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275eld"](46,0,null,null,6,"div",[["class","metadata-index"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n          "])),(e()(),al["\u0275eld"](48,0,null,null,3,"p-tree",[["selectionMode","single"]],null,null,null,Gn,dh)),al["\u0275did"](49,1294336,null,1,lh.Tree,[[2,sh.TreeDragDropService]],{value:[0,"value"],selectionMode:[1,"selectionMode"],style:[2,"style"]},null),al["\u0275qud"](603979776,5,{templates:1}),al["\u0275pod"](51,{width:0,border:1,"font-family":2,"font-size":3,"font-weight":4}),(e()(),al["\u0275ted"](-1,null,["\n      "])),(e()(),al["\u0275ted"](-1,null,["\n\n    "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,0,["\n  "])),(e()(),al["\u0275ted"](-1,0,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,5,0,"primary"),e(t,9,0),e(t,25,0,n.nodesAll,"single",e(t,27,0,"100%","none","Roboto Mono","0.80rem","500")),e(t,33,0,n.nodesDatasets,"single",e(t,35,0,"100%","none","Roboto Mono","0.80rem","500")),e(t,41,0,n.nodesDatatypes,"single",e(t,43,0,"100%","none","Roboto Mono","0.80rem","500")),e(t,49,0,n.nodesIndexes,"single",e(t,51,0,"100%","none","Roboto Mono","0.80rem","500"))},function(e,t){e(t,4,0,al["\u0275nov"](t,5)._toolbarRows.length,!al["\u0275nov"](t,5)._toolbarRows.length)})}function $n(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{host:0}),(e()(),al["\u0275eld"](1,0,[[1,0],["host",1]],null,0,"textarea",[["class","code"]],null,null,null,null,null))],null,null)}function Zn(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,39,"mat-card",[["class","input-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](2,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n\t "])),(e()(),al["\u0275eld"](4,0,null,0,12,"mat-toolbar",[["class","input-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](5,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,1,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n\t\t\t"])),(e()(),al["\u0275eld"](8,0,null,0,2,"mat-icon",[["class","toolbar-icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](9,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n\t\t\t"])),(e()(),al["\u0275eld"](12,0,null,0,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["INPUT: SQL++"])),(e()(),al["\u0275ted"](-1,0,["\t\n\t\t\t"])),(e()(),al["\u0275eld"](15,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n\t"])),(e()(),al["\u0275ted"](-1,0,["\n\t"])),(e()(),al["\u0275eld"](18,0,null,0,12,"mat-card-content",[["class","content-area mat-card-content"]],null,null,null,null,null)),al["\u0275did"](19,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n\t\t"])),(e()(),al["\u0275eld"](21,0,null,null,8,"div",[["class","codemirror-container"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"])),(e()(),al["\u0275eld"](23,0,null,null,5,"codemirror",[["class","code"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"]],function(e,t,n){var r=!0;return"ngModelChange"===t&&(r=!1!==(e.component.queryString=n)&&r),r},$n,mh)),al["\u0275did"](24,4374528,[["host",4]],0,hh,[],{config:[0,"config"]},null),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[hh]),al["\u0275did"](26,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](28,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null),(e()(),al["\u0275ted"](-1,null,["\n\t\t"])),(e()(),al["\u0275ted"](-1,null,["\n\t"])),(e()(),al["\u0275ted"](-1,0,["\n\t"])),(e()(),al["\u0275eld"](32,0,null,0,7,"mat-card-actions",[["class","actions mat-card-actions"]],[[2,"mat-card-actions-align-end",null]],null,null,null,null)),al["\u0275did"](33,16384,null,0,fd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n\t\t"])),(e()(),al["\u0275eld"](35,0,null,null,3,"button",[["class","query-button mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onClick()&&r),r},J,nc)),al["\u0275did"](36,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](37,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["RUN"])),(e()(),al["\u0275ted"](-1,null,["\n\t"])),(e()(),al["\u0275ted"](-1,0,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,5,0,"primary"),e(t,9,0),e(t,24,0,n.codemirrorConfig),e(t,26,0,n.queryString)},function(e,t){e(t,4,0,al["\u0275nov"](t,5)._toolbarRows.length,!al["\u0275nov"](t,5)._toolbarRows.length),e(t,23,0,al["\u0275nov"](t,28).ngClassUntouched,al["\u0275nov"](t,28).ngClassTouched,al["\u0275nov"](t,28).ngClassPristine,al["\u0275nov"](t,28).ngClassDirty,al["\u0275nov"](t,28).ngClassValid,al["\u0275nov"](t,28).ngClassInvalid,al["\u0275nov"](t,28).ngClassPending),e(t,32,0,"end"===al["\u0275nov"](t,33).align),e(t,35,0,al["\u0275nov"](t,36).disabled||null)})}function Qn(e){return al["\u0275vid"](0,[],null,null)}function Yn(e){return al["\u0275vid"](0,[],null,null)}function Xn(e){return al["\u0275vid"](0,[],null,null)}function Jn(e){return al["\u0275vid"](0,[],null,null)}function er(e){return al["\u0275vid"](0,[],null,null)}function tr(e){return al["\u0275vid"](0,[],null,null)}function nr(e){return al["\u0275vid"](0,[],null,null)}function rr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"option",[],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.component.placeholder)})}function ir(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"option",[],[[8,"value",0],[8,"selected",0]],null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,0,0,t.context.$implicit.value,t.component.selectedOption==t.context.$implicit),e(t,1,0,t.context.$implicit.label)})}function or(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,10,"div",[["class","ui-helper-hidden-accessible"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,0,null,null,7,"select",[["aria-hidden","true"],["tabindex","-1"]],[[8,"required",0],[1,"name",0],[1,"aria-label",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,rr)),al["\u0275did"](5,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ir)),al["\u0275did"](8,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){var n=t.component;e(t,5,0,n.placeholder),e(t,8,0,n.options)},function(e,t){var n=t.component;e(t,2,0,n.required,n.name,n.selectedOption?n.selectedOption.label:" ")})}function lr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"label",[],null,null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{"ui-dropdown-label ui-inputtext ui-corner-all":0,"ui-dropdown-label-empty":1}),(e()(),al["\u0275ted"](3,null,["",""]))],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,!0,null==n.label||0===n.label.length))},function(e,t){e(t,3,0,t.component.label||"empty")})}function ar(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"label",[],null,null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{"ui-dropdown-label ui-inputtext ui-corner-all ui-placeholder":0,"ui-dropdown-label-empty":1}),(e()(),al["\u0275ted"](3,null,["",""]))],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,!0,null==n.placeholder||0===n.placeholder.length))},function(e,t){e(t,3,0,t.component.placeholder||"empty")})}function sr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,[[6,0],["editableInput",1]],null,0,"input",[["class","ui-dropdown-label ui-inputtext ui-corner-all"],["type","text"]],[[1,"aria-label",0],[8,"disabled",0],[1,"placeholder",0]],[[null,"click"],[null,"input"],[null,"focus"],[null,"blur"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==i.onEditableInputClick(n)&&r),"input"===t&&(r=!1!==i.onEditableInputChange(n)&&r),"focus"===t&&(r=!1!==i.onEditableInputFocus(n)&&r),"blur"===t&&(r=!1!==i.onInputBlur(n)&&r),r},null,null))],null,function(e,t){var n=t.component;e(t,0,0,n.selectedOption?n.selectedOption.label:" ",n.disabled,n.placeholder)})}function ur(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,5,"div",[["class","ui-dropdown-filter-container"]],null,[[null,"input"],[null,"click"]],function(e,t,n){var r=!0;return"input"===t&&(r=!1!==e.component.onFilter(n)&&r),"click"===t&&(r=!1!==n.stopPropagation()&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](2,0,[[4,0],["filter",1]],null,0,"input",[["autocomplete","off"],["class","ui-dropdown-filter ui-inputtext ui-widget ui-state-default ui-corner-all"],["type","text"]],[[1,"placeholder",0]],[[null,"keydown.enter"],[null,"keydown"]],function(e,t,n){var r=!0,i=e.component;return"keydown.enter"===t&&(r=!1!==n.preventDefault()&&r),"keydown"===t&&(r=!1!==i.onKeydown(n)&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](4,0,null,null,0,"span",[["class","fa fa-search"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "]))],null,function(e,t){e(t,2,0,t.component.filterPlaceholder)})}function cr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.parent.context.$implicit.label||"empty")})}function dr(e){return al["\u0275vid"](0,[(e()(),al["\u0275and"](0,null,null,0))],null,null)}function pr(e){return al["\u0275vid"](0,[(e()(),al["\u0275and"](16777216,null,null,1,null,dr)),al["\u0275did"](1,212992,null,0,ah.TemplateWrapper,[al.ViewContainerRef],{item:[0,"item"],templateRef:[1,"templateRef"]},null),(e()(),al["\u0275and"](0,null,null,0))],function(e,t){e(t,1,0,t.parent.context.$implicit,t.component.itemTemplate)},null)}function fr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,9,"li",[],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onItemClick(n,e.context.$implicit)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{"ui-dropdown-item ui-corner-all":0,"ui-state-highlight":1,"ui-dropdown-item-empty":2}),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,cr)),al["\u0275did"](5,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,pr)),al["\u0275did"](8,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,!0,n.selectedOption==t.context.$implicit,!t.context.$implicit.label||0===t.context.$implicit.label.length)),e(t,5,0,!n.itemTemplate),e(t,8,0,n.itemTemplate)},null)}function hr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"ul",[["class","ui-dropdown-items ui-dropdown-list ui-widget-content ui-widget ui-corner-all ui-helper-reset"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,fr)),al["\u0275did"](3,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "]))],function(e,t){e(t,3,0,t.component.optionsToDisplay)},null)}function mr(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{containerViewChild:0}),al["\u0275qud"](402653184,2,{panelViewChild:0}),al["\u0275qud"](402653184,3,{itemsWrapperViewChild:0}),al["\u0275qud"](671088640,4,{filterViewChild:0}),al["\u0275qud"](402653184,5,{focusViewChild:0}),al["\u0275qud"](671088640,6,{editableInputViewChild:0}),(e()(),al["\u0275ted"](-1,null,["\n         "])),(e()(),al["\u0275eld"](7,0,[[1,0],["container",1]],null,41,"div",[],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onMouseclick(n)&&r),r},null,null)),al["\u0275did"](8,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](9,{"ui-dropdown ui-widget ui-state-default ui-corner-all ui-helper-clearfix":0,"ui-state-disabled":1,"ui-dropdown-open":2,"ui-state-focus":3}),al["\u0275did"](10,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,or)),al["\u0275did"](13,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](15,0,null,null,3,"div",[["class","ui-helper-hidden-accessible"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](17,0,[[5,0],["in",1]],null,0,"input",[["readonly",""],["role","listbox"],["type","text"]],[[1,"id",0],[1,"aria-label",0],[8,"disabled",0],[1,"tabindex",0],[1,"autofocus",0]],[[null,"focus"],[null,"blur"],[null,"keydown"]],function(e,t,n){var r=!0,i=e.component;return"focus"===t&&(r=!1!==i.onInputFocus(n)&&r),"blur"===t&&(r=!1!==i.onInputBlur(n)&&r),"keydown"===t&&(r=!1!==i.onKeydown(n)&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,lr)),al["\u0275did"](21,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ar)),al["\u0275did"](24,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,sr)),al["\u0275did"](27,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](29,0,null,null,4,"div",[["class","ui-dropdown-trigger ui-state-default ui-corner-right"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](31,0,null,null,1,"span",[["class","ui-clickable"]],null,null,null,null,null)),al["\u0275did"](32,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](35,0,[[2,0],["panel",1]],null,12,"div",[],[[24,"@panelState",0],[4,"display",null]],null,null,null,null)),al["\u0275did"](36,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275did"](37,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ur)),al["\u0275did"](40,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](42,0,[[3,0],["itemswrapper",1]],null,4,"div",[["class","ui-dropdown-items-wrapper"]],[[4,"max-height",null]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,hr)),al["\u0275did"](45,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){var n=t.component;e(t,8,0,n.styleClass,e(t,9,0,!0,n.disabled,n.panelVisible,n.focus)),e(t,10,0,n.style),e(t,13,0,n.autoWidth),e(t,21,0,!n.editable&&null!=n.label),e(t,24,0,!n.editable&&null==n.label),e(t,27,0,n.editable),e(t,32,0,"ui-clickable",n.dropdownIcon),e(t,36,0,n.panelStyleClass,"ui-dropdown-panel ui-widget-content ui-corner-all ui-shadow"),e(t,37,0,n.panelStyle),e(t,40,0,n.filter),e(t,45,0,!n.lazy||n.panelVisible)},function(e,t){var n=t.component;e(t,17,0,n.inputId,n.selectedOption?n.selectedOption.label:" ",n.disabled,n.tabindex,n.autofocus),e(t,35,0,n.panelVisible?"visible":"hidden",n.panelVisible?"block":"none"),e(t,42,0,n.scrollHeight||"auto")})}function gr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"a",[["class","ui-paginator-page ui-paginator-element ui-state-default ui-corner-all"],["href","#"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onPageLinkClick(n,e.context.$implicit-1)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"ui-state-active":0}),(e()(),al["\u0275ted"](3,null,["",""]))],function(e,t){e(t,1,0,"ui-paginator-page ui-paginator-element ui-state-default ui-corner-all",e(t,2,0,t.context.$implicit-1==t.component.getPage()))},function(e,t){e(t,3,0,t.context.$implicit)})}function yr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,8,"p-dropdown",[],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"onChange"]],function(e,t,n){var r=!0,i=e.component;return"ngModelChange"===t&&(r=!1!==(i.rows=n)&&r),"onChange"===t&&(r=!1!==i.onRppChange(n)&&r),r},mr,Ih)),al["\u0275prd"](512,null,kh.DomHandler,kh.DomHandler,[]),al["\u0275prd"](512,null,Dh.ObjectUtils,Dh.ObjectUtils,[]),al["\u0275did"](3,13877248,null,1,Oh.Dropdown,[al.ElementRef,kh.DomHandler,al.Renderer2,al.ChangeDetectorRef,Dh.ObjectUtils,al.NgZone],{autoWidth:[0,"autoWidth"],lazy:[1,"lazy"],options:[2,"options"]},{onChange:"onChange"}),al["\u0275qud"](603979776,1,{templates:1}),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[Oh.Dropdown]),al["\u0275did"](6,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](8,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null)],function(e,t){var n=t.component;e(t,3,0,!1,!1,n.rowsPerPageItems),e(t,6,0,n.rows)},function(e,t){e(t,0,0,al["\u0275nov"](t,8).ngClassUntouched,al["\u0275nov"](t,8).ngClassTouched,al["\u0275nov"](t,8).ngClassPristine,al["\u0275nov"](t,8).ngClassDirty,al["\u0275nov"](t,8).ngClassValid,al["\u0275nov"](t,8).ngClassInvalid,al["\u0275nov"](t,8).ngClassPending)})}function vr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,40,"div",[],null,null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275did"](2,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](4,0,null,null,5,"a",[["class","ui-paginator-first ui-paginator-element ui-state-default ui-corner-all"],["href","#"]],[[8,"tabIndex",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.changePageToFirst(n)&&r),r},null,null)),al["\u0275did"](5,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](6,{"ui-state-disabled":0}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](8,0,null,null,0,"span",[["class","fa fa-step-backward"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](11,0,null,null,5,"a",[["class","ui-paginator-prev ui-paginator-element ui-state-default ui-corner-all"],["href","#"]],[[8,"tabIndex",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.changePageToPrev(n)&&r),r},null,null)),al["\u0275did"](12,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](13,{"ui-state-disabled":0}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](15,0,null,null,0,"span",[["class","fa fa-backward"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](18,0,null,null,4,"span",[["class","ui-paginator-pages"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,gr)),al["\u0275did"](21,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](24,0,null,null,5,"a",[["class","ui-paginator-next ui-paginator-element ui-state-default ui-corner-all"],["href","#"]],[[8,"tabIndex",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.changePageToNext(n)&&r),r},null,null)),al["\u0275did"](25,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](26,{"ui-state-disabled":0}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](28,0,null,null,0,"span",[["class","fa fa-forward"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](31,0,null,null,5,"a",[["class","ui-paginator-last ui-paginator-element ui-state-default ui-corner-all"],["href","#"]],[[8,"tabIndex",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.changePageToLast(n)&&r),r},null,null)),al["\u0275did"](32,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](33,{"ui-state-disabled":0}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](35,0,null,null,0,"span",[["class","fa fa-step-forward"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,yr)),al["\u0275did"](39,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){var n=t.component;e(t,1,0,n.styleClass,"ui-paginator ui-widget ui-widget-header ui-unselectable-text"),e(t,2,0,n.style),e(t,5,0,"ui-paginator-first ui-paginator-element ui-state-default ui-corner-all",e(t,6,0,n.isFirstPage())),e(t,12,0,"ui-paginator-prev ui-paginator-element ui-state-default ui-corner-all",e(t,13,0,n.isFirstPage())),e(t,21,0,n.pageLinks),e(t,25,0,"ui-paginator-next ui-paginator-element ui-state-default ui-corner-all",e(t,26,0,n.isLastPage())),e(t,32,0,"ui-paginator-last ui-paginator-element ui-state-default ui-corner-all",e(t,33,0,n.isLastPage())),e(t,39,0,n.rowsPerPageOptions)},function(e,t){var n=t.component;e(t,4,0,n.isFirstPage()?-1:null),e(t,11,0,n.isFirstPage()?-1:null),e(t,24,0,n.isLastPage()?-1:null),e(t,31,0,n.isLastPage()?-1:null)})}function br(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,vr)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){var n=t.component;e(t,2,0,!!n.alwaysShow||n.pageLinks&&n.pageLinks.length>1)},null)}function _r(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](1,0,null,null,15,"div",[["class","ui-radiobutton ui-widget"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](3,0,null,null,3,"div",[["class","ui-helper-hidden-accessible"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](5,0,null,null,0,"input",[["type","radio"]],[[8,"checked",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](8,0,null,null,7,"div",[["class","ui-radiobutton-box ui-widget ui-radiobutton-relative ui-state-default"]],null,[[null,"click"],[null,"mouseenter"],[null,"mouseleave"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==i.handleClick(n)&&r),"mouseenter"===t&&(r=0!=(i.hover=!0)&&r),"mouseleave"===t&&(r=0!=(i.hover=!1)&&r),r},null,null)),al["\u0275did"](9,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](10,{"ui-state-hover":0,"ui-state-active":1}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](12,0,null,null,2,"span",[["class","ui-radiobutton-icon ui-clickable"]],null,null,null,null,null)),al["\u0275did"](13,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](14,{"fa fa-circle":0}),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){var n=t.component;e(t,9,0,"ui-radiobutton-box ui-widget ui-radiobutton-relative ui-state-default",e(t,10,0,n.hover,n.checked)),e(t,13,0,"ui-radiobutton-icon ui-clickable",e(t,14,0,n.checked))},function(e,t){e(t,5,0,t.component.checked)})}function wr(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](1,0,null,null,15,"div",[["class","ui-chkbox ui-widget"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](3,0,null,null,3,"div",[["class","ui-helper-hidden-accessible"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](5,0,null,null,0,"input",[["type","checkbox"]],[[8,"checked",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](8,0,null,null,7,"div",[["class","ui-chkbox-box ui-widget ui-corner-all ui-state-default"]],null,[[null,"click"],[null,"mouseover"],[null,"mouseout"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==i.handleClick(n)&&r),"mouseover"===t&&(r=0!=(i.hover=!0)&&r),"mouseout"===t&&(r=0!=(i.hover=!1)&&r),r},null,null)),al["\u0275did"](9,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](10,{"ui-state-hover":0,"ui-state-active":1,"ui-state-disabled":2}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](12,0,null,null,2,"span",[["class","ui-chkbox-icon ui-clickable"]],null,null,null,null,null)),al["\u0275did"](13,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](14,{"fa fa-check":0}),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){var n=t.component;e(t,9,0,"ui-chkbox-box ui-widget ui-corner-all ui-state-default",e(t,10,0,n.hover&&!n.disabled,n.checked&&!n.disabled,n.disabled)),e(t,13,0,"ui-chkbox-icon ui-clickable",e(t,14,0,n.checked))},function(e,t){e(t,5,0,t.component.checked)})}function xr(e){return al["\u0275vid"](0,[],null,null)}function Cr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"span",[["class","ui-column-resizer ui-clickable"]],null,[[null,"mousedown"]],function(e,t,n){var r=!0;return"mousedown"===t&&(r=!1!==e.component.dt.initColumnResize(n)&&r),r},null,null))],null,null)}function Er(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[["class","ui-column-title"]],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.parent.context.$implicit.header)})}function Sr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"span",[["class","ui-column-title"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](2,16777216,null,null,1,"p-columnHeaderTemplateLoader",[],null,null,null,Xn,_h)),al["\u0275did"](3,245760,null,0,ah.ColumnHeaderTemplateLoader,[al.ViewContainerRef],{column:[0,"column"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "]))],function(e,t){e(t,3,0,t.parent.context.$implicit)},null)}function Or(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,2,"span",[["class","ui-sortable-column-icon fa fa-fw fa-sort"]],null,null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"fa-sort-desc":0,"fa-sort-asc":1})],function(e,t){var n=t.component;e(t,1,0,"ui-sortable-column-icon fa fa-fw fa-sort",e(t,2,0,-1==n.dt.getSortOrder(t.parent.context.$implicit),1==n.dt.getSortOrder(t.parent.context.$implicit)))},null)}function Tr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"input",[["class","ui-column-filter ui-inputtext ui-widget ui-state-default ui-corner-all"]],[[1,"type",0],[1,"maxlength",0],[1,"placeholder",0],[8,"value",0]],[[null,"click"],[null,"input"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==i.dt.onFilterInputClick(n)&&r),"input"===t&&(r=!1!==i.dt.onFilterKeyup(n.target.value,e.parent.context.$implicit.filterField||e.parent.context.$implicit.field,e.parent.context.$implicit.filterMatchMode)&&r),r},null,null))],null,function(e,t){var n=t.component;e(t,0,0,t.parent.context.$implicit.filterType,t.parent.context.$implicit.filterMaxlength,t.parent.context.$implicit.filterPlaceholder,n.dt.filters[t.parent.context.$implicit.filterField||t.parent.context.$implicit.field]?n.dt.filters[t.parent.context.$implicit.filterField||t.parent.context.$implicit.field].value:"")})}function kr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,16777216,null,null,1,"p-columnFilterTemplateLoader",[],null,null,null,er,xh)),al["\u0275did"](1,245760,null,0,ah.ColumnFilterTemplateLoader,[al.ViewContainerRef],{column:[0,"column"]},null),(e()(),al["\u0275and"](0,null,null,0))],function(e,t){e(t,1,0,t.parent.context.$implicit)},null)}function Dr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"p-dtCheckbox",[],null,[[null,"onChange"]],function(e,t,n){var r=!0;return"onChange"===t&&(r=!1!==e.component.dt.toggleRowsWithCheckbox(n)&&r),r},wr,Ph)),al["\u0275did"](1,49152,null,0,Sh.DTCheckbox,[],{checked:[0,"checked"],disabled:[1,"disabled"]},{onChange:"onChange"})],function(e,t){var n=t.component;e(t,1,0,n.dt.allSelected,n.dt.isEmpty())},null)}function Ir(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](1,0,[["headerCell",1]],null,25,"th",[],[[1,"id",0],[1,"colspan",0],[1,"rowspan",0],[1,"tabindex",0],[1,"scope",0]],[[null,"click"],[null,"dragstart"],[null,"dragleave"],[null,"drop"],[null,"mousedown"],[null,"keydown"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==i.dt.sort(n,e.context.$implicit)&&r),"dragstart"===t&&(r=!1!==i.dt.onColumnDragStart(n)&&r),"dragleave"===t&&(r=!1!==i.dt.onColumnDragleave(n)&&r),"drop"===t&&(r=!1!==i.dt.onColumnDrop(n)&&r),"mousedown"===t&&(r=!1!==i.dt.onHeaderMousedown(n,al["\u0275nov"](e,1))&&r),"keydown"===t&&(r=!1!==i.dt.onHeaderKeydown(n,e.context.$implicit)&&r),r},null,null)),al["\u0275did"](2,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](3,{"ui-state-default ui-unselectable-text":0,"ui-sortable-column":1,"ui-state-active":2,"ui-resizable-column":3,"ui-selection-column":4,"ui-helper-hidden":5}),al["\u0275did"](4,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Cr)),al["\u0275did"](7,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Er)),al["\u0275did"](10,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Sr)),al["\u0275did"](13,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Or)),al["\u0275did"](16,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Tr)),al["\u0275did"](19,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,kr)),al["\u0275did"](22,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Dr)),al["\u0275did"](25,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){var n=t.component;e(t,2,0,t.context.$implicit.headerStyleClass||t.context.$implicit.styleClass,e(t,3,0,!0,t.context.$implicit.sortable,n.dt.isSorted(t.context.$implicit),n.dt.resizableColumns,t.context.$implicit.selectionMode,t.context.$implicit.hidden)),e(t,4,0,t.context.$implicit.headerStyle||t.context.$implicit.style),e(t,7,0,n.dt.resizableColumns&&("fit"==n.dt.columnResizeMode&&!t.context.last||"expand"==n.dt.columnResizeMode)),e(t,10,0,!t.context.$implicit.selectionMode&&!t.context.$implicit.headerTemplate),e(t,13,0,t.context.$implicit.headerTemplate),e(t,16,0,t.context.$implicit.sortable),e(t,19,0,t.context.$implicit.filter&&!t.context.$implicit.filterTemplate),e(t,22,0,t.context.$implicit.filter&&t.context.$implicit.filterTemplate),e(t,25,0,"multiple"==t.context.$implicit.selectionMode&&!0===n.dt.showHeaderCheckbox)},function(e,t){e(t,1,0,t.context.$implicit.colId,t.context.$implicit.colspan,t.context.$implicit.rowspan,t.context.$implicit.sortable?t.component.tabindex:null,t.context.$implicit.scope||(t.context.$implicit.colspan?"colgroup":"col"))})}function Rr(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Ir)),al["\u0275did"](2,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){e(t,2,0,t.component.columns)},null)}function Mr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[["class","ui-column-footer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.parent.context.$implicit.footer)})}function Pr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"span",[["class","ui-column-footer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,16777216,null,null,1,"p-columnFooterTemplateLoader",[],null,null,null,Jn,wh)),al["\u0275did"](3,245760,null,0,ah.ColumnFooterTemplateLoader,[al.ViewContainerRef],{column:[0,"column"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){e(t,3,0,t.parent.context.$implicit)},null)}function Nr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,10,"td",[],[[1,"colspan",0],[1,"rowspan",0]],null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"ui-state-default":0,"ui-helper-hidden":1}),al["\u0275did"](3,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Mr)),al["\u0275did"](6,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Pr)),al["\u0275did"](9,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){e(t,1,0,t.context.$implicit.footerStyleClass||t.context.$implicit.styleClass,e(t,2,0,!0,t.context.$implicit.hidden)),e(t,3,0,t.context.$implicit.footerStyle||t.context.$implicit.style),e(t,6,0,!t.context.$implicit.footerTemplate),e(t,9,0,t.context.$implicit.footerTemplate)},function(e,t){e(t,0,0,t.context.$implicit.colspan,t.context.$implicit.rowspan)})}function Ar(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Nr)),al["\u0275did"](2,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){e(t,2,0,t.component.columns)},null)}function Lr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"a",[["href","#"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.dt.toggleRowGroup(n,e.parent.parent.context.$implicit)&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275eld"](2,0,null,null,1,"span",[["class","fa fa-fw"]],null,null,null,null,null)),al["\u0275did"](3,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "]))],function(e,t){var n=t.component;e(t,3,0,"fa fa-fw",n.dt.isRowGroupExpanded(t.parent.parent.context.$implicit)?n.dt.expandedIcon:n.dt.collapsedIcon)},null)}function Fr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,[["rowGroupElement",1]],null,15,"tr",[["class","ui-widget-header ui-rowgroup-header"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.dt.onRowGroupClick(n)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),al["\u0275pod"](2,{cursor:0}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](4,0,null,null,10,"td",[],[[1,"colspan",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Lr)),al["\u0275did"](7,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](9,0,null,null,4,"span",[["class","ui-rowgroup-header-name"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275eld"](11,16777216,null,null,1,"p-templateLoader",[],null,null,null,nr,Eh)),al["\u0275did"](12,245760,null,0,ah.TemplateLoader,[al.ViewContainerRef],{template:[0,"template"],data:[1,"data"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,n.dt.sortableRowGroup?"pointer":"auto")),e(t,7,0,n.dt.expandableRowGroups),e(t,12,0,n.dt.rowGroupHeaderTemplate,t.parent.context.$implicit)},function(e,t){e(t,4,0,t.component.dt.visibleColumns().length)})}function jr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[["class","ui-column-title"]],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.parent.parent.context.$implicit.header)})}function Vr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[["class","ui-cell-data"]],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.component.dt.resolveFieldData(t.parent.parent.parent.parent.context.$implicit,t.parent.parent.context.$implicit.field))})}function zr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"span",[["class","ui-cell-data"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275eld"](2,16777216,null,null,1,"p-columnBodyTemplateLoader",[],null,null,null,Yn,bh)),al["\u0275did"](3,770048,null,0,ah.ColumnBodyTemplateLoader,[al.ViewContainerRef],{column:[0,"column"],rowData:[1,"rowData"],rowIndex:[2,"rowIndex"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){e(t,3,0,t.parent.parent.context.$implicit,t.parent.parent.parent.parent.context.$implicit,t.parent.parent.parent.parent.context.index+t.component.dt.first)},null)}function Br(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,5,"input",[["class","ui-inputtext ui-widget ui-state-default ui-corner-all"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keydown"],[null,"blur"],[null,"input"],[null,"change"],[null,"compositionstart"],[null,"compositionend"]],function(e,t,n){var r=!0,i=e.component;return"input"===t&&(r=!1!==al["\u0275nov"](e,1)._handleInput(n.target.value)&&r),"blur"===t&&(r=!1!==al["\u0275nov"](e,1).onTouched()&&r),"compositionstart"===t&&(r=!1!==al["\u0275nov"](e,1)._compositionStart()&&r),"compositionend"===t&&(r=!1!==al["\u0275nov"](e,1)._compositionEnd(n.target.value)&&r),"ngModelChange"===t&&(r=!1!==(e.parent.parent.parent.parent.parent.context.$implicit[e.parent.parent.parent.context.$implicit.field]=n)&&r),"keydown"===t&&(r=!1!==i.dt.onCellEditorKeydown(n,e.parent.parent.parent.context.$implicit,e.parent.parent.parent.parent.parent.context.$implicit,e.parent.parent.parent.parent.parent.context.index)&&r),"blur"===t&&(r=!1!==i.dt.onCellEditorBlur(n,e.parent.parent.parent.context.$implicit,e.parent.parent.parent.parent.parent.context.$implicit,e.parent.parent.parent.parent.parent.context.index)&&r),"input"===t&&(r=!1!==i.dt.onCellEditorInput(n,e.parent.parent.parent.context.$implicit,e.parent.parent.parent.parent.parent.context.$implicit,e.parent.parent.parent.parent.parent.context.index)&&r),"change"===t&&(r=!1!==i.dt.onCellEditorChange(n,e.parent.parent.parent.context.$implicit,e.parent.parent.parent.parent.parent.context.$implicit,e.parent.parent.parent.parent.parent.context.index)&&r),r},null,null)),al["\u0275did"](1,16384,null,0,Fu.DefaultValueAccessor,[al.Renderer2,al.ElementRef,[2,Fu.COMPOSITION_BUFFER_MODE]],null,null),al["\u0275prd"](1024,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[Fu.DefaultValueAccessor]),al["\u0275did"](3,671744,null,0,Fu.NgModel,[[8,null],[8,null],[8,null],[2,Fu.NG_VALUE_ACCESSOR]],{model:[0,"model"]},{update:"ngModelChange"}),al["\u0275prd"](2048,null,Fu.NgControl,null,[Fu.NgModel]),al["\u0275did"](5,16384,null,0,Fu.NgControlStatus,[Fu.NgControl],null,null)],function(e,t){e(t,3,0,t.parent.parent.parent.parent.parent.context.$implicit[t.parent.parent.parent.context.$implicit.field])},function(e,t){e(t,0,0,al["\u0275nov"](t,5).ngClassUntouched,al["\u0275nov"](t,5).ngClassTouched,al["\u0275nov"](t,5).ngClassPristine,al["\u0275nov"](t,5).ngClassDirty,al["\u0275nov"](t,5).ngClassValid,al["\u0275nov"](t,5).ngClassInvalid,al["\u0275nov"](t,5).ngClassPending)})}function Hr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"a",[["class","ui-cell-editor-proxy-focus"],["href","#"]],null,[[null,"focus"]],function(e,t,n){var r=!0;return"focus"===t&&(r=!1!==e.component.dt.onCustomEditorFocusPrev(n,e.parent.parent.parent.context.index)&&r),r},null,null))],null,null)}function Wr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,16777216,null,null,1,"p-columnEditorTemplateLoader",[],null,null,null,tr,Ch)),al["\u0275did"](1,245760,null,0,ah.ColumnEditorTemplateLoader,[al.ViewContainerRef],{column:[0,"column"],rowData:[1,"rowData"],rowIndex:[2,"rowIndex"]},null),(e()(),al["\u0275and"](0,null,null,0))],function(e,t){e(t,1,0,t.parent.parent.parent.context.$implicit,t.parent.parent.parent.parent.parent.context.$implicit,t.parent.parent.parent.parent.parent.context.index)},null)}function qr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"a",[["class","ui-cell-editor-proxy-focus"],["href","#"]],null,[[null,"focus"]],function(e,t,n){var r=!0;return"focus"===t&&(r=!1!==e.component.dt.onCustomEditorFocusNext(n,e.parent.parent.parent.context.index)&&r),r},null,null))],null,null)}function Ur(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,13,"div",[["class","ui-cell-editor"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Br)),al["\u0275did"](3,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Hr)),al["\u0275did"](6,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Wr)),al["\u0275did"](9,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,qr)),al["\u0275did"](12,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){e(t,3,0,!t.parent.parent.context.$implicit.editorTemplate),e(t,6,0,t.parent.parent.context.$implicit.editorTemplate),e(t,9,0,t.parent.parent.context.$implicit.editorTemplate),e(t,12,0,t.parent.parent.context.$implicit.editorTemplate)},null)}function Gr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"a",[["href","#"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.dt.toggleRow(e.parent.parent.parent.parent.context.$implicit,n)&&r),r},null,null)),(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275eld"](2,0,null,null,1,"span",[["class","ui-row-toggler fa fa-fw ui-clickable"]],null,null,null,null,null)),al["\u0275did"](3,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){var n=t.component;e(t,3,0,"ui-row-toggler fa fa-fw ui-clickable",n.dt.isRowExpanded(t.parent.parent.parent.parent.context.$implicit)?n.dt.expandedIcon:n.dt.collapsedIcon)},null)}function Kr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"p-dtRadioButton",[],null,[[null,"onClick"]],function(e,t,n){var r=!0;return"onClick"===t&&(r=!1!==e.component.dt.selectRowWithRadio(n,e.parent.parent.parent.parent.context.$implicit)&&r),r},_r,Mh)),al["\u0275did"](1,49152,null,0,Sh.DTRadioButton,[],{checked:[0,"checked"]},{onClick:"onClick"})],function(e,t){e(t,1,0,t.component.dt.isSelected(t.parent.parent.parent.parent.context.$implicit))},null)}function $r(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"p-dtCheckbox",[],null,[[null,"onChange"]],function(e,t,n){var r=!0;return"onChange"===t&&(r=!1!==e.component.dt.toggleRowWithCheckbox(n,e.parent.parent.parent.parent.context.$implicit)&&r),r},wr,Ph)),al["\u0275did"](1,49152,null,0,Sh.DTCheckbox,[],{checked:[0,"checked"]},{onChange:"onChange"})],function(e,t){e(t,1,0,t.component.dt.isSelected(t.parent.parent.parent.parent.context.$implicit))},null)}function Zr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,[["cell",1]],null,25,"td",[],[[1,"rowspan",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.dt.switchCellToEditMode(al["\u0275nov"](e,0),e.parent.context.$implicit,e.parent.parent.parent.context.$implicit)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](2,{"ui-editable-column":0,"ui-selection-column":1,"ui-helper-hidden":2}),al["\u0275did"](3,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,jr)),al["\u0275did"](6,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Vr)),al["\u0275did"](9,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,zr)),al["\u0275did"](12,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Ur)),al["\u0275did"](15,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Gr)),al["\u0275did"](18,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Kr)),al["\u0275did"](21,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,$r)),al["\u0275did"](24,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "]))],function(e,t){var n=t.component;e(t,1,0,t.parent.context.$implicit.bodyStyleClass||t.parent.context.$implicit.styleClass,e(t,2,0,t.parent.context.$implicit.editable,t.parent.context.$implicit.selectionMode,t.parent.context.$implicit.hidden)),e(t,3,0,t.parent.context.$implicit.bodyStyle||t.parent.context.$implicit.style),e(t,6,0,n.dt.responsive),e(t,9,0,!t.parent.context.$implicit.bodyTemplate&&!t.parent.context.$implicit.expander&&!t.parent.context.$implicit.selectionMode),e(t,12,0,t.parent.context.$implicit.bodyTemplate),e(t,15,0,t.parent.context.$implicit.editable),e(t,18,0,t.parent.context.$implicit.expander),e(t,21,0,"single"==t.parent.context.$implicit.selectionMode),e(t,24,0,"multiple"==t.parent.context.$implicit.selectionMode)},function(e,t){var n=t.component;e(t,0,0,"rowspan"==n.dt.rowGroupMode&&n.dt.sortField==t.parent.context.$implicit.field&&n.dt.rowGroupMetadata[n.dt.resolveFieldData(t.parent.parent.parent.context.$implicit,n.dt.sortField)].index==t.parent.parent.parent.context.index?n.dt.rowGroupMetadata[n.dt.resolveFieldData(t.parent.parent.parent.context.$implicit,n.dt.sortField)].size:null)})}function Qr(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Zr)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "]))],function(e,t){var n=t.component;e(t,2,0,!n.dt.rowGroupMode||"subheader"==n.dt.rowGroupMode||"rowspan"==n.dt.rowGroupMode&&(n.dt.sortField==t.context.$implicit.field&&n.dt.rowGroupMetadata[n.dt.resolveFieldData(t.parent.parent.context.$implicit,n.dt.sortField)].index==t.parent.parent.context.index||n.dt.sortField!=t.context.$implicit.field))},null)}function Yr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,[["rowElement",1]],null,6,"tr",[],null,[[null,"click"],[null,"dblclick"],[null,"contextmenu"],[null,"touchend"]],function(e,t,n){var r=!0,i=e.component;return"click"===t&&(r=!1!==i.dt.handleRowClick(n,e.parent.context.$implicit,e.parent.context.index)&&r),"dblclick"===t&&(r=!1!==i.dt.rowDblclick(n,e.parent.context.$implicit)&&r),"contextmenu"===t&&(r=!1!==i.dt.onRowRightClick(n,e.parent.context.$implicit)&&r),"touchend"===t&&(r=!1!==i.dt.handleRowTouchEnd(n)&&r),r},null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pad"](2,5),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Qr)),al["\u0275did"](5,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,t.parent.context.even&&"rowspan"!=n.dt.rowGroupMode?"ui-datatable-even":"",t.parent.context.odd&&"rowspan"!=n.dt.rowGroupMode?"ui-datatable-odd":"",n.dt.isSelected(t.parent.context.$implicit)?"ui-state-highlight":"",n.dt.isRowExpanded(t.parent.context.$implicit)?"ui-expanded-row":"",n.dt.getRowStyleClass(t.parent.context.$implicit,t.parent.context.index))),e(t,5,0,n.columns)},null)}function Xr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,7,"tr",[["class","ui-expanded-row-content"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,0,null,null,4,"td",[],[[1,"colspan",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](4,16777216,null,null,1,"p-rowExpansionLoader",[],null,null,null,xr,Nh)),al["\u0275did"](5,245760,null,0,Sh.RowExpansionLoader,[al.ViewContainerRef],{template:[0,"template"],rowData:[1,"rowData"],rowIndex:[2,"rowIndex"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){e(t,5,0,t.component.dt.rowExpansionTemplate,t.parent.context.$implicit,t.parent.context.index)},function(e,t){e(t,2,0,t.component.dt.visibleColumns().length)})}function Jr(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"tr",[["class","ui-widget-header ui-rowgroup-footer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,16777216,null,null,1,"p-templateLoader",[["class","ui-helper-hidden"]],null,null,null,nr,Eh)),al["\u0275did"](3,245760,null,0,ah.TemplateLoader,[al.ViewContainerRef],{template:[0,"template"],data:[1,"data"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){e(t,3,0,t.component.dt.rowGroupFooterTemplate,t.parent.context.$implicit)},null)}function ei(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Fr)),al["\u0275did"](2,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Yr)),al["\u0275did"](5,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Xr)),al["\u0275did"](8,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Jr)),al["\u0275did"](11,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){var n=t.component;e(t,2,0,"subheader"==n.dt.rowGroupMode&&(0===t.context.index||n.dt.resolveFieldData(t.context.$implicit,n.dt.groupField)!==n.dt.resolveFieldData(n.dt.dataToRender[t.context.index-1],n.dt.groupField))),e(t,5,0,!n.dt.expandableRowGroups||n.dt.isRowGroupExpanded(t.context.$implicit)),e(t,8,0,n.dt.expandableRows&&n.dt.isRowExpanded(t.context.$implicit)),e(t,11,0,n.dt.rowGroupFooterTemplate&&"subheader"==n.dt.rowGroupMode&&(t.context.index===n.dt.dataToRender.length-1||n.dt.resolveFieldData(t.context.$implicit,n.dt.groupField)!==n.dt.resolveFieldData(n.dt.dataToRender[t.context.index+1],n.dt.groupField))&&(!n.dt.expandableRowGroups||n.dt.isRowGroupExpanded(t.context.$implicit)))},null)}function ti(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](1,null,["",""]))],null,function(e,t){e(t,1,0,t.component.dt.emptyMessage)})}function ni(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,10,"tr",[["class","ui-widget-content ui-datatable-emptymessage-row"]],[[4,"visibility",null]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](2,0,null,null,7,"td",[["class","ui-datatable-emptymessage"]],[[1,"colspan",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ti)),al["\u0275did"](5,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](7,16777216,null,null,1,"p-templateLoader",[],null,null,null,nr,Eh)),al["\u0275did"](8,245760,null,0,ah.TemplateLoader,[al.ViewContainerRef],{template:[0,"template"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){var n=t.component;e(t,5,0,!n.dt.emptyMessageTemplate),e(t,8,0,n.dt.emptyMessageTemplate)},function(e,t){var n=t.component;e(t,0,0,n.dt.loading?"hidden":"visible"),e(t,2,0,n.dt.visibleColumns().length)})}function ri(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ei)),al["\u0275did"](2,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null),(e()(),al["\u0275ted"](-1,null,["\n\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ni)),al["\u0275did"](5,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){var n=t.component;e(t,2,0,n.data,n.dt.rowTrackBy),e(t,5,0,n.dt.isEmpty())},null)}function ii(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"tr",[["class","ui-state-default"]],null,null,null,Rr,Ah)),al["\u0275did"](1,49152,null,0,Sh.ColumnHeaders,[Sh.DataTable],{columns:[0,"columns"]},null)],function(e,t){e(t,1,0,t.component.columns)},null)}function oi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"tr",[["class","ui-state-default"]],null,null,null,Rr,Ah)),al["\u0275did"](1,49152,null,0,Sh.ColumnHeaders,[Sh.DataTable],{columns:[0,"columns"]},null)],function(e,t){e(t,1,0,t.context.$implicit.columns)},null)}function li(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,oi)),al["\u0275did"](2,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){e(t,2,0,t.component.headerColumnGroup.rows)},null)}function ai(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"tbody",[],null,null,null,ri,Fh)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{"ui-datatable-data ui-widget-content":0,"ui-datatable-hoverable-rows":1}),al["\u0275did"](3,49152,null,0,Sh.TableBody,[Sh.DataTable],{columns:[0,"columns"],data:[1,"data"]},null)],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,!0,n.dt.rowHover||n.dt.selectionMode)),e(t,3,0,n.columns,n.dt.frozenValue)},null)}function si(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"col",[],null,null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](2,{"ui-helper-hidden":0}),al["\u0275did"](3,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null)],function(e,t){e(t,1,0,e(t,2,0,t.context.$implicit.hidden)),e(t,3,0,t.context.$implicit.headerStyle||t.context.$implicit.style)},null)}function ui(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"tr",[["class","ui-state-default"]],null,null,null,Ar,Lh)),al["\u0275did"](1,49152,null,0,Sh.ColumnFooters,[Sh.DataTable],{columns:[0,"columns"]},null)],function(e,t){e(t,1,0,t.component.columns)},null)}function ci(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"tr",[["class","ui-state-default"]],null,null,null,Ar,Lh)),al["\u0275did"](1,49152,null,0,Sh.ColumnFooters,[Sh.DataTable],{columns:[0,"columns"]},null)],function(e,t){e(t,1,0,t.context.$implicit.columns)},null)}function di(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ci)),al["\u0275did"](2,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){e(t,2,0,t.component.footerColumnGroup.rows)},null)}function pi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,[[6,0],["scrollFooter",1]],null,20,"div",[["class","ui-widget-header ui-datatable-scrollable-footer"]],null,null,null,null,null)),al["\u0275did"](1,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),al["\u0275pod"](2,{width:0}),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](4,0,[[7,0],["scrollFooterBox",1]],null,15,"div",[["class","ui-datatable-scrollable-footer-box"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](6,0,null,null,12,"table",[],null,null,null,null,null)),al["\u0275did"](7,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275did"](8,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](10,0,null,null,7,"tfoot",[["class","ui-datatable-tfoot"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ui)),al["\u0275did"](13,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,di)),al["\u0275did"](16,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "]))],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,n.width)),e(t,7,0,n.dt.tableStyleClass),e(t,8,0,n.dt.tableStyle),e(t,13,0,!n.footerColumnGroup),e(t,16,0,n.footerColumnGroup)},null)}function fi(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{scrollHeaderViewChild:0}),al["\u0275qud"](402653184,2,{scrollHeaderBoxViewChild:0}),al["\u0275qud"](402653184,3,{scrollBodyViewChild:0}),al["\u0275qud"](402653184,4,{scrollTableViewChild:0}),al["\u0275qud"](402653184,5,{scrollTableWrapperViewChild:0}),al["\u0275qud"](671088640,6,{scrollFooterViewChild:0}),al["\u0275qud"](671088640,7,{scrollFooterBoxViewChild:0}),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](8,0,[[1,0],["scrollHeader",1]],null,23,"div",[["class","ui-widget-header ui-datatable-scrollable-header"]],null,null,null,null,null)),al["\u0275did"](9,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),al["\u0275pod"](10,{width:0}),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](12,0,[[2,0],["scrollHeaderBox",1]],null,18,"div",[["class","ui-datatable-scrollable-header-box"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](14,0,null,null,15,"table",[],null,null,null,null,null)),al["\u0275did"](15,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275did"](16,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](18,0,null,null,7,"thead",[["class","ui-datatable-thead"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ii)),al["\u0275did"](21,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,li)),al["\u0275did"](24,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ai)),al["\u0275did"](28,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](33,0,[[3,0],["scrollBody",1]],null,23,"div",[["class","ui-datatable-scrollable-body"]],null,null,null,null,null)),al["\u0275did"](34,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),al["\u0275pod"](35,{width:0}),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](37,0,[[5,0],["scrollTableWrapper",1]],null,18,"div",[["class","ui-datatable-scrollable-table-wrapper"],["style","position:relative"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](39,0,[[4,0],["scrollTable",1]],null,15,"table",[["style","top:0px"]],null,null,null,null,null)),al["\u0275did"](40,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](41,{"ui-datatable-virtual-table":0}),al["\u0275did"](42,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](44,0,null,null,4,"colgroup",[["class","ui-datatable-scrollable-colgroup"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,si)),al["\u0275did"](47,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](50,0,null,null,3,"tbody",[],null,null,null,ri,Fh)),al["\u0275did"](51,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](52,{"ui-datatable-data ui-widget-content":0,"ui-datatable-hoverable-rows":1}),al["\u0275did"](53,49152,null,0,Sh.TableBody,[Sh.DataTable],{columns:[0,"columns"],data:[1,"data"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,pi)),al["\u0275did"](59,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){var n=t.component;e(t,9,0,e(t,10,0,n.width)),e(t,15,0,n.dt.tableStyleClass),e(t,16,0,n.dt.tableStyle),e(t,21,0,!n.headerColumnGroup),e(t,24,0,n.headerColumnGroup),e(t,28,0,n.dt.frozenValue),e(t,34,0,e(t,35,0,n.width)),e(t,40,0,n.dt.tableStyleClass,e(t,41,0,n.virtualScroll)),e(t,42,0,n.dt.tableStyle),e(t,47,0,n.columns),e(t,51,0,e(t,52,0,!0,n.dt.rowHover||n.dt.selectionMode)),e(t,53,0,n.columns,n.dt.dataToRender),e(t,59,0,n.dt.hasFooter())},null)}function hi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,0,"div",[["class","ui-datatable-loading ui-widget-overlay"]],null,null,null,null,null))],null,null)}function mi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"div",[["class","ui-datatable-loading-content"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "]))],null,function(e,t){e(t,2,0,"fa fa-spin fa-2x "+t.component.loadingIcon)})}function gi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"div",[["class","ui-datatable-header ui-widget-header"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),al["\u0275ncd"](null,0),(e()(),al["\u0275ted"](-1,null,["\n            "]))],null,null)}function yi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"p-paginator",[["styleClass","ui-paginator-top"]],null,[[null,"onPageChange"]],function(e,t,n){var r=!0;return"onPageChange"===t&&(r=!1!==e.component.onPageChange(n)&&r),r},br,Rh)),al["\u0275did"](1,49152,null,0,Th.Paginator,[],{pageLinkSize:[0,"pageLinkSize"],styleClass:[1,"styleClass"],alwaysShow:[2,"alwaysShow"],totalRecords:[3,"totalRecords"],first:[4,"first"],rows:[5,"rows"],rowsPerPageOptions:[6,"rowsPerPageOptions"]},{onPageChange:"onPageChange"})],function(e,t){var n=t.component;e(t,1,0,n.pageLinks,"ui-paginator-top",n.alwaysShowPaginator,n.totalRecords,n.first,n.rows,n.rowsPerPageOptions)},null)}function vi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"tr",[["class","ui-state-default"]],null,null,null,Rr,Ah)),al["\u0275did"](1,49152,null,0,Sh.ColumnHeaders,[Sh.DataTable],{columns:[0,"columns"]},null)],function(e,t){e(t,1,0,t.component.columns)},null)}function bi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"tr",[["class","ui-state-default"]],null,null,null,Rr,Ah)),al["\u0275did"](1,49152,null,0,Sh.ColumnHeaders,[Sh.DataTable],{columns:[0,"columns"]},null)],function(e,t){e(t,1,0,t.context.$implicit.columns)},null)}function _i(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,bi)),al["\u0275did"](2,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){e(t,2,0,t.component.headerColumnGroups.first.rows)},null)}function wi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"tr",[["class","ui-state-default"]],null,null,null,Ar,Lh)),al["\u0275did"](1,49152,null,0,Sh.ColumnFooters,[Sh.DataTable],{columns:[0,"columns"]},null)],function(e,t){e(t,1,0,t.component.columns)},null)}function xi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"tr",[["class","ui-state-default"]],null,null,null,Ar,Lh)),al["\u0275did"](1,49152,null,0,Sh.ColumnFooters,[Sh.DataTable],{columns:[0,"columns"]},null)],function(e,t){e(t,1,0,t.context.$implicit.columns)},null)}function Ci(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n                            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,xi)),al["\u0275did"](2,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "]))],function(e,t){e(t,2,0,t.component.footerColumnGroups.first.rows)},null)}function Ei(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,7,"tfoot",[["class","ui-datatable-tfoot"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,wi)),al["\u0275did"](3,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Ci)),al["\u0275did"](6,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "]))],function(e,t){var n=t.component;e(t,3,0,!n.footerColumnGroups.first),e(t,6,0,n.footerColumnGroups.first)},null)}function Si(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,23,"div",[["class","ui-datatable-tablewrapper"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](2,0,null,null,20,"table",[],null,null,null,null,null)),al["\u0275did"](3,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275did"](4,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](6,0,null,null,7,"thead",[["class","ui-datatable-thead"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,vi)),al["\u0275did"](9,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                        "])),(e()(),al["\u0275and"](16777216,null,null,1,null,_i)),al["\u0275did"](12,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Ei)),al["\u0275did"](16,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](18,0,null,null,3,"tbody",[],null,null,null,ri,Fh)),al["\u0275did"](19,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngClass:[0,"ngClass"]},null),al["\u0275pod"](20,{"ui-datatable-data ui-widget-content":0,"ui-datatable-hoverable-rows":1}),al["\u0275did"](21,49152,null,0,Sh.TableBody,[Sh.DataTable],{columns:[0,"columns"],data:[1,"data"]},null),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){var n=t.component;e(t,3,0,n.tableStyleClass),e(t,4,0,n.tableStyle),e(t,9,0,!n.headerColumnGroups.first),e(t,12,0,n.headerColumnGroups.first),e(t,16,0,n.hasFooter()),e(t,19,0,e(t,20,0,!0,n.rowHover||n.selectionMode)),e(t,21,0,n.columns,n.dataToRender)},null)}function Oi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"div",[["class","ui-datatable-scrollable-view ui-datatable-frozen-view"],["frozen","true"]],null,null,null,fi,jh)),al["\u0275did"](1,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),al["\u0275pod"](2,{width:0}),al["\u0275did"](3,12763136,null,0,Sh.ScrollableView,[Sh.DataTable,kh.DomHandler,al.ElementRef,al.Renderer2,al.NgZone],{columns:[0,"columns"],headerColumnGroup:[1,"headerColumnGroup"],footerColumnGroup:[2,"footerColumnGroup"],frozen:[3,"frozen"]},null)],function(e,t){var n=t.component;e(t,1,0,e(t,2,0,n.frozenWidth)),e(t,3,0,n.frozenColumns,n.frozenHeaderColumnGroup,n.frozenFooterColumnGroup,"true")},null)}function Ti(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275eld"](1,0,null,null,11,"div",[["class","ui-datatable-scrollable-wrapper ui-helper-clearfix"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Oi)),al["\u0275did"](4,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n                    "])),(e()(),al["\u0275eld"](6,0,null,null,5,"div",[["class","ui-datatable-scrollable-view"]],null,[[null,"onVirtualScroll"]],function(e,t,n){var r=!0;return"onVirtualScroll"===t&&(r=!1!==e.component.onVirtualScroll(n)&&r),r},fi,jh)),al["\u0275did"](7,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](8,{"ui-datatable-unfrozen-view":0}),al["\u0275did"](9,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),al["\u0275pod"](10,{width:0,left:1}),al["\u0275did"](11,12763136,null,0,Sh.ScrollableView,[Sh.DataTable,kh.DomHandler,al.ElementRef,al.Renderer2,al.NgZone],{columns:[0,"columns"],headerColumnGroup:[1,"headerColumnGroup"],footerColumnGroup:[2,"footerColumnGroup"],virtualScroll:[3,"virtualScroll"]},{onVirtualScroll:"onVirtualScroll"}),(e()(),al["\u0275ted"](-1,null,["\n                "])),(e()(),al["\u0275ted"](-1,null,["\n            "]))],function(e,t){var n=t.component;e(t,4,0,n.hasFrozenColumns()),e(t,7,0,"ui-datatable-scrollable-view",e(t,8,0,n.hasFrozenColumns())),e(t,9,0,e(t,10,0,n.unfrozenWidth,n.frozenWidth)),e(t,11,0,n.scrollableColumns,n.scrollableHeaderColumnGroup,n.scrollableFooterColumnGroup,n.virtualScroll)},null)}function ki(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"p-paginator",[["styleClass","ui-paginator-bottom"]],null,[[null,"onPageChange"]],function(e,t,n){var r=!0;return"onPageChange"===t&&(r=!1!==e.component.onPageChange(n)&&r),r},br,Rh)),al["\u0275did"](1,49152,null,0,Th.Paginator,[],{pageLinkSize:[0,"pageLinkSize"],styleClass:[1,"styleClass"],alwaysShow:[2,"alwaysShow"],totalRecords:[3,"totalRecords"],first:[4,"first"],rows:[5,"rows"],rowsPerPageOptions:[6,"rowsPerPageOptions"]},{onPageChange:"onPageChange"})],function(e,t){var n=t.component;e(t,1,0,n.pageLinks,"ui-paginator-bottom",n.alwaysShowPaginator,n.totalRecords,n.first,n.rows,n.rowsPerPageOptions)},null)}function Di(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,3,"div",[["class","ui-datatable-footer ui-widget-header"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n                "])),al["\u0275ncd"](null,1),(e()(),al["\u0275ted"](-1,null,["\n            "]))],null,null)}function Ii(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275eld"](1,0,null,null,34,"div",[],[[4,"width",null]],null,null,null,null)),al["\u0275did"](2,278528,null,0,cl.NgClass,[al.IterableDiffers,al.KeyValueDiffers,al.ElementRef,al.Renderer2],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),al["\u0275pod"](3,{"ui-datatable ui-widget":0,"ui-datatable-reflow":1,"ui-datatable-stacked":2,"ui-datatable-resizable":3,"ui-datatable-scrollable":4}),al["\u0275did"](4,278528,null,0,cl.NgStyle,[al.KeyValueDiffers,al.ElementRef,al.Renderer2],{ngStyle:[0,"ngStyle"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,hi)),al["\u0275did"](7,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,mi)),al["\u0275did"](10,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,gi)),al["\u0275did"](13,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,yi)),al["\u0275did"](16,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Si)),al["\u0275did"](19,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            \n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Ti)),al["\u0275did"](22,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            \n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,ki)),al["\u0275did"](25,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275and"](16777216,null,null,1,null,Di)),al["\u0275did"](28,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n            \n            "])),(e()(),al["\u0275eld"](30,0,null,null,0,"div",[["class","ui-column-resizer-helper ui-state-highlight"],["style","display:none"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](32,0,null,null,0,"span",[["class","fa fa-arrow-down ui-datatable-reorder-indicator-up"],["style","position: absolute; display: none;"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](34,0,null,null,0,"span",[["class","fa fa-arrow-up ui-datatable-reorder-indicator-down"],["style","position: absolute; display: none;"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,null,["\n    "]))],function(e,t){var n=t.component;e(t,2,0,n.styleClass,e(t,3,0,!0,n.responsive,n.stacked,n.resizableColumns,n.scrollable)),e(t,4,0,n.style),e(t,7,0,n.loading),e(t,10,0,n.loading),e(t,13,0,n.header),e(t,16,0,n.paginator&&("top"===n.paginatorPosition||"both"==n.paginatorPosition)),e(t,19,0,!n.scrollable),e(t,22,0,n.scrollable),e(t,25,0,n.paginator&&("bottom"===n.paginatorPosition||"both"==n.paginatorPosition)),e(t,28,0,n.footer)},function(e,t){e(t,1,0,t.component.containerWidth)})}function Ri(e){return al["\u0275vid"](2,[al["\u0275qud"](402653184,1,{_inputElement:0}),(e()(),al["\u0275eld"](1,0,null,null,3,"label",[["class","mat-button-toggle-label"]],[[1,"for",0]],null,null,null,null)),(e()(),al["\u0275eld"](2,0,[[1,0],["input",1]],null,0,"input",[["class","mat-button-toggle-input cdk-visually-hidden"]],[[8,"type",0],[8,"id",0],[8,"checked",0],[8,"disabled",0],[8,"name",0],[1,"aria-label",0],[1,"aria-labelledby",0]],[[null,"change"],[null,"click"]],function(e,t,n){var r=!0,i=e.component;return"change"===t&&(r=!1!==i._onInputChange(n)&&r),"click"===t&&(r=!1!==i._onInputClick(n)&&r),r},null,null)),(e()(),al["\u0275eld"](3,0,null,null,1,"div",[["class","mat-button-toggle-label-content"]],null,null,null,null,null)),al["\u0275ncd"](null,0),(e()(),al["\u0275eld"](5,0,null,null,0,"div",[["class","mat-button-toggle-focus-overlay"]],null,null,null,null,null))],null,function(e,t){var n=t.component;e(t,1,0,n.inputId),e(t,2,0,n._type,n.inputId,n.checked,n.disabled||null,n.name,n.ariaLabel,n.ariaLabelledby)})}function Mi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,6,"p-column",[],null,null,null,Qn,vh)),al["\u0275did"](1,1097728,[[5,4]],2,ah.Column,[],{field:[0,"field"],header:[1,"header"],sortable:[2,"sortable"],style:[3,"style"],headerStyleClass:[4,"headerStyleClass"],footerStyle:[5,"footerStyle"]},null),al["\u0275qud"](603979776,8,{templates:1}),al["\u0275qud"](335544320,9,{template:0}),al["\u0275pod"](4,{"text-align":0,"text-overflow":1,"word-wrap":2,"word-break":3}),al["\u0275pod"](5,{color:0}),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t\t"]))],function(e,t){var n=t.component;e(t,1,0,t.context.$implicit.field,t.context.$implicit.header,!0,e(t,4,0,"left","ellipsis","break-word","break-all"),n.datatable-n.header,e(t,5,0,"blue"))},null)}function Pi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,18,"div",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\t\t\t\t\n\t\t\t\t"])),(e()(),al["\u0275eld"](2,0,null,null,15,"p-dataTable",[["id","review-table"]],[[8,"hidden",0]],null,null,Ii,Vh)),al["\u0275prd"](512,null,kh.DomHandler,kh.DomHandler,[]),al["\u0275prd"](512,null,Dh.ObjectUtils,Dh.ObjectUtils,[]),al["\u0275did"](5,14139392,null,6,Sh.DataTable,[al.ElementRef,kh.DomHandler,al.IterableDiffers,al.Renderer2,al.ChangeDetectorRef,Dh.ObjectUtils,al.NgZone],{paginator:[0,"paginator"],rows:[1,"rows"],pageLinks:[2,"pageLinks"],rowsPerPageOptions:[3,"rowsPerPageOptions"],responsive:[4,"responsive"],style:[5,"style"],value:[6,"value"]},null),al["\u0275qud"](335544320,2,{header:0}),al["\u0275qud"](335544320,3,{footer:0}),al["\u0275qud"](603979776,4,{templates:1}),al["\u0275qud"](603979776,5,{cols:1}),al["\u0275qud"](603979776,6,{headerColumnGroups:1}),al["\u0275qud"](603979776,7,{footerColumnGroups:1}),al["\u0275pad"](12,6),al["\u0275pod"](13,{width:0,overflow:1}),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t\t"])),(e()(),al["\u0275and"](16777216,null,null,1,null,Mi)),al["\u0275did"](16,802816,null,0,cl.NgForOf,[al.ViewContainerRef,al.TemplateRef,al.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"]))],function(e,t){var n=t.component;e(t,5,0,!0,20,3,e(t,12,0,5,10,20,30,40,50),!0,e(t,13,0,"100%","hidden"),n.data),e(t,16,0,n.dataColumns)},function(e,t){e(t,2,0,t.component.loading)})}function Ni(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"div",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"])),(e()(),al["\u0275and"](16777216,null,null,1,null,Pi)),al["\u0275did"](3,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n\t\t"]))],function(e,t){e(t,3,0,"TABLE"==t.component.selectedOutputView)},null)}function Ai(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,7,"div",[["class","queryErrorMessage"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](2,0,null,null,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["ERROR:"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](5,0,null,null,1,"span",[],null,null,null,null,null)),(e()(),al["\u0275ted"](6,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"]))],null,function(e,t){e(t,6,0,t.component.queryMessage)})}function Li(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,9,"div",[["class","data-viewer-container"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t\t"])),(e()(),al["\u0275eld"](2,0,null,null,3,"button",[["class","button-export mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.exportToText()&&r),r},J,nc)),al["\u0275did"](3,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](4,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](-1,0,["EXPORT"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t\t"])),(e()(),al["\u0275eld"](7,0,null,null,1,"pre",[["class","json-output"]],null,null,null,null,null)),(e()(),al["\u0275ted"](8,null,["",""])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"]))],null,function(e,t){var n=t.component;e(t,2,0,al["\u0275nov"](t,3).disabled||null),e(t,8,0,n.jsonOutput)})}function Fi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"div",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\t\n\t\t\t\t"])),(e()(),al["\u0275and"](16777216,null,null,1,null,Li)),al["\u0275did"](3,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"]))],function(e,t){e(t,3,0,"JSON"==t.component.selectedOutputView)},null)}function ji(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,21,"div",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\t\n\t\t\t"])),(e()(),al["\u0275and"](16777216,null,null,1,null,Ai)),al["\u0275did"](3,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\t\n\t\t\t "])),(e()(),al["\u0275eld"](5,0,null,null,11,"div",[["class","data-viewer-container"]],[[8,"hidden",0]],null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](7,0,null,null,3,"button",[["class","button-expand mat-button"],["mat-button",""]],[[8,"disabled",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.expandTree()&&r),r},J,nc)),al["\u0275did"](8,180224,null,0,$s,[al.ElementRef,pl,La],null,null),al["\u0275did"](9,16384,null,0,Gs,[],null,null),(e()(),al["\u0275ted"](10,0,["",""])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](12,0,null,null,3,"p-tree",[],null,null,null,Gn,dh)),al["\u0275did"](13,1294336,null,1,lh.Tree,[[2,sh.TreeDragDropService]],{value:[0,"value"],style:[1,"style"]},null),al["\u0275qud"](603979776,10,{templates:1}),al["\u0275pod"](15,{width:0,border:1,"font-family":2,"font-size":3,"font-weight":4}),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"])),(e()(),al["\u0275and"](16777216,null,null,2,null,Fi)),al["\u0275did"](19,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275pid"](131072,cl.AsyncPipe,[al.ChangeDetectorRef]),(e()(),al["\u0275ted"](-1,null,["\n\t\t"]))],function(e,t){var n=t.component;e(t,3,0,t.context.ngIf.sqlQueryError.metrics),e(t,13,0,n.treeData,e(t,15,0,"100%","none","Roboto Mono","0.80rem","500")),e(t,19,0,al["\u0275unv"](t,19,0,al["\u0275nov"](t,20).transform(n.loaded$)))},function(e,t){var n=t.component;e(t,5,0,"TREE"!=n.selectedOutputView),e(t,7,0,al["\u0275nov"](t,8).disabled||null),e(t,10,0,n.toogleExpand)})}function Vi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,36,"span",[["class","metrics"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](2,0,null,null,1,"span",[["class","span-results"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["SUCCESS:"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](5,0,null,null,1,"span",[["class","span-results"]],null,null,null,null,null)),(e()(),al["\u0275ted"](6,null,["Count: ",""])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](8,0,null,null,1,"span",[["class","span-results"]],null,null,null,null,null)),(e()(),al["\u0275ted"](9,null,["Size: ",""])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](11,0,null,null,1,"span",[["class","span-results"]],null,null,null,null,null)),(e()(),al["\u0275ted"](12,null,["Elapsed time: ",""])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](14,0,null,null,1,"span",[["class","span-results"]],null,null,null,null,null)),(e()(),al["\u0275ted"](15,null,["Execution time: ",""])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](17,0,null,null,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275eld"](19,0,null,null,16,"mat-button-toggle-group",[["class","output-group mat-button-toggle-group"],["role","radiogroup"]],[[2,"mat-button-toggle-vertical",null]],[[null,"change"]],function(e,t,n){var r=!0;return"change"===t&&(r=!1!==e.component.onSelect(al["\u0275nov"](e,21).value)&&r),r},null,null)),al["\u0275prd"](5120,null,Fu.NG_VALUE_ACCESSOR,function(e){return[e]},[Wh]),al["\u0275did"](21,16384,[["group",4]],1,Wh,[al.ChangeDetectorRef],{value:[0,"value"]},{change:"change"}),al["\u0275qud"](603979776,11,{_buttonToggles:1}),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t\t"])),(e()(),al["\u0275eld"](24,0,null,null,2,"mat-button-toggle",[["class","mat-button-toggle"],["mat-button",""],["value","TABLE"]],[[2,"mat-button-toggle-standalone",null],[2,"mat-button-toggle-checked",null],[2,"mat-button-toggle-disabled",null],[1,"id",0]],null,null,Ri,Kh)),al["\u0275did"](25,245760,[[11,4]],0,Uh,[[2,Wh],[2,qh],al.ChangeDetectorRef,Vc,al.ElementRef,La],{value:[0,"value"]},null),(e()(),al["\u0275ted"](-1,0,["TABLE"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t\t"])),(e()(),al["\u0275eld"](28,0,null,null,2,"mat-button-toggle",[["class","mat-button-toggle"],["mat-button",""],["value","TREE"]],[[2,"mat-button-toggle-standalone",null],[2,"mat-button-toggle-checked",null],[2,"mat-button-toggle-disabled",null],[1,"id",0]],null,null,Ri,Kh)),al["\u0275did"](29,245760,[[11,4]],0,Uh,[[2,Wh],[2,qh],al.ChangeDetectorRef,Vc,al.ElementRef,La],{value:[0,"value"]},null),(e()(),al["\u0275ted"](-1,0,["TREE"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t\t"])),(e()(),al["\u0275eld"](32,0,null,null,2,"mat-button-toggle",[["class","mat-button-toggle"],["mat-button",""],["value","JSON"]],[[2,"mat-button-toggle-standalone",null],[2,"mat-button-toggle-checked",null],[2,"mat-button-toggle-disabled",null],[1,"id",0]],null,null,Ri,Kh)),al["\u0275did"](33,245760,[[11,4]],0,Uh,[[2,Wh],[2,qh],al.ChangeDetectorRef,Vc,al.ElementRef,La],{value:[0,"value"]},null),(e()(),al["\u0275ted"](-1,0,["JSON"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t\t"])),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"]))],function(e,t){e(t,21,0,al["\u0275inlineInterpolate"](1,"",t.component.selectedOutput,"")),e(t,25,0,"TABLE"),e(t,29,0,"TREE"),e(t,33,0,"JSON")},function(e,t){e(t,6,0,t.parent.context.ngIf.sqlQueryResult.metrics.resultCount),e(t,9,0,t.parent.context.ngIf.sqlQueryResult.metrics.resultSize),e(t,12,0,t.parent.context.ngIf.sqlQueryResult.metrics.elapsedTime),e(t,15,0,t.parent.context.ngIf.sqlQueryResult.metrics.executionTime),e(t,19,0,al["\u0275nov"](t,21).vertical),e(t,24,0,!al["\u0275nov"](t,25).buttonToggleGroup&&!al["\u0275nov"](t,25).buttonToggleGroupMultiple,al["\u0275nov"](t,25).checked,al["\u0275nov"](t,25).disabled,al["\u0275nov"](t,25).id),e(t,28,0,!al["\u0275nov"](t,29).buttonToggleGroup&&!al["\u0275nov"](t,29).buttonToggleGroupMultiple,al["\u0275nov"](t,29).checked,al["\u0275nov"](t,29).disabled,al["\u0275nov"](t,29).id),e(t,32,0,!al["\u0275nov"](t,33).buttonToggleGroup&&!al["\u0275nov"](t,33).buttonToggleGroupMultiple,al["\u0275nov"](t,33).checked,al["\u0275nov"](t,33).disabled,al["\u0275nov"](t,33).id)})}function zi(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,4,"div",[],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n\t\t\t"])),(e()(),al["\u0275and"](16777216,null,null,1,null,Vi)),al["\u0275did"](3,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),(e()(),al["\u0275ted"](-1,null,["\n\t\t"]))],function(e,t){e(t,3,0,t.context.ngIf.sqlQueryResult.metrics)},null)}function Bi(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,36,"mat-card",[["class","sql-results-card mat-card"]],null,null,null,Te,gd)),al["\u0275did"](2,49152,null,0,hd,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n\t"])),(e()(),al["\u0275eld"](4,0,null,0,12,"mat-toolbar",[["class","results-selector mat-toolbar"],["color","primary"]],[[2,"mat-toolbar-multiple-rows",null],[2,"mat-toolbar-single-row",null]],null,null,ke,bd)),al["\u0275did"](5,4243456,null,1,yd,[al.ElementRef,pl],{color:[0,"color"]},null),al["\u0275qud"](603979776,1,{_toolbarRows:1}),(e()(),al["\u0275ted"](-1,0,["\n\t\t"])),(e()(),al["\u0275eld"](8,0,null,0,2,"mat-icon",[["class","toolbar-icon mat-icon"],["role","img"]],null,null,null,te,ic)),al["\u0275did"](9,638976,null,0,Au,[al.ElementRef,Nu,[8,null]],null,null),(e()(),al["\u0275ted"](-1,0,["menu"])),(e()(),al["\u0275ted"](-1,0,["\n\t    "])),(e()(),al["\u0275eld"](12,0,null,0,1,"span",[["class","output-query-string"]],null,null,null,null,null)),(e()(),al["\u0275ted"](13,null,["OUTPUT",""])),(e()(),al["\u0275ted"](-1,0,["\n\t\t"])),(e()(),al["\u0275eld"](15,0,null,0,0,"span",[["class","spacer"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,0,["\n\t"])),(e()(),al["\u0275ted"](-1,0,["\n  \t"])),(e()(),al["\u0275eld"](18,0,null,0,10,"mat-card-content",[["class","content-area mat-card-content"]],null,null,null,null,null)),al["\u0275did"](19,16384,null,0,pd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n\t\t"])),(e()(),al["\u0275and"](16777216,null,null,2,null,Ni)),al["\u0275did"](22,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275pid"](131072,cl.AsyncPipe,[al.ChangeDetectorRef]),(e()(),al["\u0275ted"](-1,null,["\n\t\t"])),(e()(),al["\u0275and"](16777216,null,null,2,null,ji)),al["\u0275did"](26,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275pid"](131072,cl.AsyncPipe,[al.ChangeDetectorRef]),(e()(),al["\u0275ted"](-1,null,["\n\t"])),(e()(),al["\u0275ted"](-1,0,["\n\t"])),(e()(),al["\u0275eld"](30,0,null,0,6,"mat-card-actions",[["class","actions mat-card-actions"]],[[2,"mat-card-actions-align-end",null]],null,null,null,null)),al["\u0275did"](31,16384,null,0,fd,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n\t\t"])),(e()(),al["\u0275and"](16777216,null,null,2,null,zi)),al["\u0275did"](34,16384,null,0,cl.NgIf,[al.ViewContainerRef,al.TemplateRef],{ngIf:[0,"ngIf"]},null),al["\u0275pid"](131072,cl.AsyncPipe,[al.ChangeDetectorRef]),(e()(),al["\u0275ted"](-1,null,["\n\t"])),(e()(),al["\u0275ted"](-1,0,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){var n=t.component;e(t,5,0,"primary"),e(t,9,0),e(t,22,0,al["\u0275unv"](t,22,0,al["\u0275nov"](t,23).transform(n.loaded$))),e(t,26,0,al["\u0275unv"](t,26,0,al["\u0275nov"](t,27).transform(n.loaded$))),e(t,34,0,al["\u0275unv"](t,34,0,al["\u0275nov"](t,35).transform(n.loaded$)))},function(e,t){var n=t.component;e(t,4,0,al["\u0275nov"](t,5)._toolbarRows.length,!al["\u0275nov"](t,5)._toolbarRows.length),e(t,13,0,n.outputQueryString),e(t,30,0,"end"===al["\u0275nov"](t,31).align)})}function Hi(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n\n"])),(e()(),al["\u0275eld"](1,0,null,null,16,"div",[["class","query-container"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](3,0,null,null,4,"div",[["class","metadata"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["   \n    "])),(e()(),al["\u0275eld"](5,0,null,null,1,"awc-metadata",[["class","metadata-card"]],null,null,null,Kn,fh)),al["\u0275did"](6,114688,null,0,ph,[Yp.m,al.ChangeDetectorRef],null,null),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](9,0,null,null,7,"div",[["class","vertical"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](11,0,null,null,1,"awc-query",[["class","query-card"]],null,null,null,Zn,yh)),al["\u0275did"](12,49152,null,0,gh,[Yp.m],null,null),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](14,0,null,null,1,"awc-results",[["class","output-card"]],null,null,null,Bi,Qh)),al["\u0275did"](15,114688,null,0,Zh,[Yp.m,al.ChangeDetectorRef],null,null),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,[" \n\n"]))],function(e,t){e(t,6,0),e(t,15,0)},null)}function Wi(e){return al["\u0275vid"](0,[al["\u0275qud"](402653184,1,{dataverses:0}),al["\u0275qud"](402653184,2,{datasets:0}),al["\u0275qud"](402653184,3,{datatypes:0}),al["\u0275qud"](402653184,4,{indexes:0}),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](5,0,null,null,47,"mat-tab-group",[["class","metadata-menu mat-tab-group"]],[[2,"mat-tab-group-dynamic-height",null],[2,"mat-tab-group-inverted-header",null]],[[null,"selectedTabChange"]],function(e,t,n){var r=!0;return"selectedTabChange"===t&&(r=!1!==e.component.tabChange()&&r),r},pn,nh)),al["\u0275did"](6,3325952,null,1,Xf,[al.ElementRef,al.ChangeDetectorRef],null,{selectedTabChange:"selectedTabChange"}),al["\u0275qud"](603979776,5,{_tabs:1}),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](9,16777216,null,null,9,"mat-tab",[["class","submenu"],["label","DATAVERSES"]],null,null,null,yn,oh)),al["\u0275did"](10,770048,[[5,4]],1,$f,[al.ViewContainerRef],{textLabel:[0,"textLabel"]},null),al["\u0275qud"](335544320,6,{templateLabel:0}),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275eld"](13,0,null,0,4,"div",[["class","dataverses"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](15,0,null,null,1,"awc-dataverses",[["class","dataverses"]],null,null,null,Xe,af)),al["\u0275did"](16,12697600,[[1,4],["dataverses",4]],0,tf,[Yp.m,Fs],{errorMessage:[0,"errorMessage"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](20,16777216,null,null,9,"mat-tab",[["label","DATASETS"]],null,null,null,yn,oh)),al["\u0275did"](21,770048,[[5,4]],1,$f,[al.ViewContainerRef],{textLabel:[0,"textLabel"]},null),al["\u0275qud"](335544320,7,{templateLabel:0}),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275eld"](24,0,null,0,4,"div",[["class","datasets"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](26,0,null,null,1,"awc-datasets",[["class","datasets"]],null,null,null,Et,yf)),al["\u0275did"](27,114688,[[2,4],["datasets",4]],0,ff,[Yp.m,Fs],{errorMessage:[0,"errorMessage"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,0,["  \n    "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](31,16777216,null,null,9,"mat-tab",[["label","DATATYPES"]],null,null,null,yn,oh)),al["\u0275did"](32,770048,[[5,4]],1,$f,[al.ViewContainerRef],{textLabel:[0,"textLabel"]},null),al["\u0275qud"](335544320,8,{templateLabel:0}),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275eld"](35,0,null,0,4,"div",[["class","datatypes"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](37,0,null,null,1,"awc-datatypes",[["class","datatypes"]],null,null,null,Lt,Tf)),al["\u0275did"](38,114688,[[3,4],["datatypes",4]],0,Cf,[Yp.m,Fs],{errorMessage:[0,"errorMessage"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](42,16777216,null,null,9,"mat-tab",[["class","indexes"],["label","INDEXES"]],null,null,null,yn,oh)),al["\u0275did"](43,770048,[[5,4]],1,$f,[al.ViewContainerRef],{textLabel:[0,"textLabel"]},null),al["\u0275qud"](335544320,9,{templateLabel:0}),(e()(),al["\u0275ted"](-1,0,["\n        "])),(e()(),al["\u0275eld"](46,0,null,0,4,"div",[["class","indexes"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n            "])),(e()(),al["\u0275eld"](48,0,null,null,1,"awc-indexes",[["class","indexes"]],null,null,null,nn,Ff)),al["\u0275did"](49,114688,[[4,4],["indexes",4]],0,Pf,[Yp.m,Fs],{errorMessage:[0,"errorMessage"]},null),(e()(),al["\u0275ted"](-1,null,["\n        "])),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n\n"]))],function(e,t){var n=t.component;e(t,10,0,"DATAVERSES"),e(t,16,0,n.message),e(t,21,0,"DATASETS"),e(t,27,0,n.message),e(t,32,0,"DATATYPES"),e(t,38,0,n.message),e(t,43,0,"INDEXES"),e(t,49,0,n.message)},function(e,t){e(t,5,0,al["\u0275nov"](t,6).dynamicHeight,"below"===al["\u0275nov"](t,6).headerPosition)})}function qi(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,22,"div",[["class","content"]],null,null,null,null,null)),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275eld"](3,0,null,null,19,"mat-tab-group",[["class","menu mat-tab-group"]],[[2,"mat-tab-group-dynamic-height",null],[2,"mat-tab-group-inverted-header",null]],null,null,pn,nh)),al["\u0275did"](4,3325952,null,1,Xf,[al.ElementRef,al.ChangeDetectorRef],null,null),al["\u0275qud"](603979776,1,{_tabs:1}),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](7,16777216,null,null,6,"mat-tab",[["label",">_ QUERY"]],null,null,null,yn,oh)),al["\u0275did"](8,770048,[[1,4]],1,$f,[al.ViewContainerRef],{textLabel:[0,"textLabel"]},null),al["\u0275qud"](335544320,2,{templateLabel:0}),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](11,0,null,0,1,"awc-query-container",[],null,null,null,Hi,nm)),al["\u0275did"](12,49152,null,0,tm,[Yp.m],null,null),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n    "])),(e()(),al["\u0275eld"](15,16777216,null,null,6,"mat-tab",[["label","METADATA"]],null,null,null,yn,oh)),al["\u0275did"](16,770048,[[1,4]],1,$f,[al.ViewContainerRef],{textLabel:[0,"textLabel"]},null),al["\u0275qud"](335544320,3,{templateLabel:0}),(e()(),al["\u0275ted"](-1,0,["\n      "])),(e()(),al["\u0275eld"](19,0,null,0,1,"awc-metadata-container",[],null,null,null,Wi,im)),al["\u0275did"](20,49152,null,0,rm,[],null,null),(e()(),al["\u0275ted"](-1,0,["\n    "])),(e()(),al["\u0275ted"](-1,null,["\n  "])),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275ted"](-1,null,["\n"]))],function(e,t){e(t,8,0,">_ QUERY"),e(t,16,0,"METADATA")},function(e,t){e(t,3,0,al["\u0275nov"](t,4).dynamicHeight,"below"===al["\u0275nov"](t,4).headerPosition)})}function Ui(e){return al["\u0275vid"](0,[(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](1,0,null,null,1,"awc-bar",[],null,null,null,ln,Wf)),al["\u0275did"](2,49152,null,0,Hf,[],null,null),(e()(),al["\u0275ted"](-1,null,["\n"])),(e()(),al["\u0275eld"](4,0,null,null,1,"awc-tab",[],null,null,null,qi,lm)),al["\u0275did"](5,49152,null,0,om,[Yp.m],null,null),(e()(),al["\u0275ted"](-1,null,["\n"]))],null,null)}function Gi(e){switch(e.length){case 0:return new Rs.NoopAnimationPlayer;case 1:return e[0];default:return new Rs["\u0275AnimationGroupPlayer"](e)}}function Ki(e,t,n,r,i,o){void 0===i&&(i={}),void 0===o&&(o={});var l=[],a=[],s=-1,u=null;if(r.forEach(function(e){var n=e.offset,r=n==s,c=r&&u||{};Object.keys(e).forEach(function(n){var r=n,a=e[n];if("offset"!==n)switch(r=t.normalizePropertyName(r,l),a){case Rs["\u0275PRE_STYLE"]:a=i[n];break;case Rs.AUTO_STYLE:a=o[n];break;default:a=t.normalizeStyleValue(n,r,a,l)}c[r]=a}),r||a.push(c),u=c,s=n}),l.length)throw new Error("Unable to animate due to the following errors:\n - "+l.join("\n - "));return a}function $i(e,t,n,r){switch(t){case"start":e.onStart(function(){return r(n&&Zi(n,"start",e.totalTime))});break;case"done":e.onDone(function(){return r(n&&Zi(n,"done",e.totalTime))});break;case"destroy":e.onDestroy(function(){return r(n&&Zi(n,"destroy",e.totalTime))})}}function Zi(e,t,n){var r=Qi(e.element,e.triggerName,e.fromState,e.toState,t||e.phaseName,void 0==n?e.totalTime:n),i=e._data;return null!=i&&(r._data=i),r}function Qi(e,t,n,r,i,o){return void 0===i&&(i=""),void 0===o&&(o=0),{element:e,triggerName:t,fromState:n,toState:r,phaseName:i,totalTime:o}}function Yi(e,t,n){var r;return e instanceof Map?(r=e.get(t))||e.set(t,r=n):(r=e[t])||(r=e[t]=n),r}function Xi(e){var t=e.indexOf(":");return[e.substring(1,t),e.substr(t+1)]}function Ji(e){mm||(mm=eo()||{},gm=!!mm.style&&"WebkitAppearance"in mm.style);var t=!0;return mm.style&&"ebkit"!=e.substring(1,6)&&!(t=e in mm.style)&&gm&&(t="Webkit"+e.charAt(0).toUpperCase()+e.substr(1)in mm.style),t}function eo(){return"undefined"!=typeof document?document.body:null}function to(e){if("number"==typeof e)return e;var t=e.match(/^(-?[\.\d]+)(m?s)/);return!t||t.length<2?0:no(parseFloat(t[1]),t[2])}function no(e,t){switch(t){case"s":return e*xm;default:return e}}function ro(e,t,n){return e.hasOwnProperty("duration")?e:function(e,t,n){var r,i=0,o="";if("string"==typeof e){var l=e.match(/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i);if(null===l)return t.push('The provided timing value "'+e+'" is invalid.'),{duration:0,delay:0,easing:""};r=no(parseFloat(l[1]),l[2]);var a=l[3];null!=a&&(i=no(Math.floor(parseFloat(a)),l[4]));var s=l[5];s&&(o=s)}else r=e;if(!n){var u=!1,c=t.length;r<0&&(t.push("Duration values below 0 are not allowed for this animation step."),u=!0),i<0&&(t.push("Delay values below 0 are not allowed for this animation step."),u=!0),u&&t.splice(c,0,'The provided timing value "'+e+'" is invalid.')}return{duration:r,delay:i,easing:o}}(e,t,n)}function io(e,t){return void 0===t&&(t={}),Object.keys(e).forEach(function(n){t[n]=e[n]}),t}function oo(e,t,n){if(void 0===n&&(n={}),t)for(var r in e)n[r]=e[r];else io(e,n);return n}function lo(e,t){e.style&&Object.keys(t).forEach(function(n){var r=fo(n);e.style[r]=t[n]})}function ao(e,t){e.style&&Object.keys(t).forEach(function(t){var n=fo(t);e.style[n]=""})}function so(e){return Array.isArray(e)?1==e.length?e[0]:Object(Rs.sequence)(e):e}function uo(e){var t=[];if("string"==typeof e){for(var n=e.toString(),r=void 0;r=Om.exec(n);)t.push(r[1]);Om.lastIndex=0}return t}function co(e,t,n){var r=e.toString(),i=r.replace(Om,function(e,r){var i=t[r];return t.hasOwnProperty(r)||(n.push("Please provide a value for the animation param "+r),i=""),i.toString()});return i==r?e:i}function po(e){for(var t=[],n=e.next();!n.done;)t.push(n.value),n=e.next();return t}function fo(e){return e.replace(Tm,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return e[1].toUpperCase()})}function ho(e,t,n){switch(t.type){case 7:return e.visitTrigger(t,n);case 0:return e.visitState(t,n);case 1:return e.visitTransition(t,n);case 2:return e.visitSequence(t,n);case 3:return e.visitGroup(t,n);case 4:return e.visitAnimate(t,n);case 5:return e.visitKeyframes(t,n);case 6:return e.visitStyle(t,n);case 8:return e.visitReference(t,n);case 9:return e.visitAnimateChild(t,n);case 10:return e.visitAnimateRef(t,n);case 11:return e.visitQuery(t,n);case 12:return e.visitStagger(t,n);default:throw new Error("Unable to resolve animation metadata node #"+t.type)}}function mo(e,t){var n=Dm.has(e)||Im.has(e),r=Dm.has(t)||Im.has(t);return function(i,o){var l=e==km||e==i,a=t==km||t==o;return!l&&n&&"boolean"==typeof i&&(l=i?Dm.has(e):Im.has(e)),!a&&r&&"boolean"==typeof o&&(a=o?Dm.has(t):Im.has(t)),l&&a}}function go(e,t,n){return new Mm(e).build(t,n)}function yo(e){return!Array.isArray(e)&&"object"==typeof e}function vo(e){return e?(e=io(e)).params&&(e.params=function(e){return e?io(e):null}(e.params)):e={},e}function bo(e,t,n){return{duration:e,delay:t,easing:n}}function _o(e,t,n,r,i,o,l,a){return void 0===l&&(l=null),void 0===a&&(a=!1),{type:1,element:e,keyframes:t,preStyleProps:n,postStyleProps:r,duration:i,delay:o,totalTime:i+o,easing:l,subTimeline:a}}function wo(e,t,n,r,i,o,l,a,s,u){return void 0===o&&(o={}),void 0===l&&(l={}),void 0===u&&(u=[]),(new Fm).buildKeyframes(e,t,n,r,i,o,l,a,s,u)}function xo(e,t){void 0===t&&(t=3);var n=Math.pow(10,t-1);return Math.round(e*n)/n}function Co(e,t,n,r,i,o,l,a,s,u,c,d){return{type:0,element:e,triggerName:t,isRemovalTransition:i,fromState:n,fromStyles:o,toState:r,toStyles:l,timelines:a,queriedElements:s,preStyleProps:u,postStyleProps:c,errors:d}}function Eo(e,t,n){e.hasOwnProperty(t)?e.hasOwnProperty(n)||(e[n]=e[t]):e.hasOwnProperty(n)&&(e[t]=e[n])}function So(e){return e&&1===e.nodeType}function Oo(e,t){var n=e.style.display;return e.style.display=null!=t?t:"none",n}function To(e,t,n,r,i){var o=[];n.forEach(function(e){return o.push(Oo(e))});var l=[];r.forEach(function(n,r){var o={};n.forEach(function(e){var n=o[e]=t.computeStyle(r,e,i);n&&0!=n.length||(r[ng]=tg,l.push(r))}),e.set(r,o)});var a=0;return n.forEach(function(e){return Oo(e,o[a++])}),l}function ko(e,t){function n(e){if(!e)return i;var t=l.get(e);if(t)return t;var a=e.parentNode;return t=r.has(a)?a:o.has(a)?i:n(a),l.set(e,t),t}var r=new Map;if(e.forEach(function(e){return r.set(e,[])}),0==t.length)return r;var i=1,o=new Set(t),l=new Map;return t.forEach(function(e){var t=n(e);t!==i&&r.get(t).push(e)}),r}function Do(e,t){if(e.classList)e.classList.add(t);else{var n=e[ug];n||(n=e[ug]={}),n[t]=!0}}function Io(e,t){if(e.classList)e.classList.remove(t);else{var n=e[ug];n&&delete n[t]}}function Ro(e,t){for(var n=0;n<e.length;n++){var r=e[n];r instanceof Rs["\u0275AnimationGroupPlayer"]?Ro(r.players,t):t.push(r)}}function Mo(e,t,n){var r=n.get(e);if(!r)return!1;var i=t.get(e);return i?r.forEach(function(e){return i.add(e)}):t.set(e,r),n.delete(e),!0}function Po(e,t){return window.getComputedStyle(e)[t]}function No(e,t,n,r,i){return e.setProperty(t,"@@"+n+":"+r,i)}function Ao(){return"undefined"!=typeof Element&&"function"==typeof Element.prototype.animate?new pg:new _m}function Lo(){return new Wm}function Fo(e,t,n){return new gg(e,t,n)}function jo(e,t,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),Object(nu.a)(e,t,n)(this)}function Vo(){return"undefined"!=typeof window?window.indexedDB:self.indexedDB}function zo(e){return function(){return e.scrollStrategies.reposition()}}function Bo(e){return function(){return e.scrollStrategies.reposition()}}function Ho(e){return function(){return e.scrollStrategies.reposition()}}function Wo(e){return e||new Ng}function qo(e){return e||new Lg}function Uo(e){var t=(void 0===e?{dispatch:!0}:e).dispatch;return function(e,n){!function(t,n){var r=e.constructor,i=r.hasOwnProperty(ly)?r[ly]:Object.defineProperty(r,ly,{value:[]})[ly];Array.prototype.push.apply(i,n)}(0,[{propertyName:n,dispatch:t}])}}function Go(e){return Object.getPrototypeOf(e)}function Ko(e){var t=function(e){var t=Go(e).constructor.name,n=ay(e).map(function(n){var r=n.propertyName,i=n.dispatch,o="function"==typeof e[r]?e[r]():e[r];if(!1===i)return function(){return function(e){return e.lift(new Wg)}(this)}.call(o);var l=function(){return function(e){return e.lift(new Ug)}(this)}.call(o);return iu.a.call(l,function(n){return{effect:e[r],notification:n,propertyName:r,sourceName:t,sourceInstance:e}})});return Ll.a.apply(void 0,n)}(e);return function(t){var n=Go(e);return sy in n&&"function"==typeof n[sy]}()?e.ngrxOnRunEffects(t):t}function $o(e){var t=e.propertyName;return'"'+e.sourceName+"."+t+("function"==typeof e.sourceInstance[t]?"()":"")+'"'}function Zo(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return e}function Qo(){return console}function Yo(e,t){switch(void 0===e&&(e=yy),t.type){case Ad:return Object.assign({},e,{loading:!0});case Ld:return Object.assign({},e,{loaded:!0,loading:!1,dataverses:t.payload});case Fd:return Object.assign({},e,{createDataverse:[],createDataverseName:t.payload,createDataverseError:[],createDataverseSuccess:!1,createDataverseFailed:!1});case jd:return Object.assign({},e,{createDataverse:t.payload,createDataverseError:[],createDataverseSuccess:!0,createDataverseFailed:!1});case Vd:return Object.assign({},e,{createDataverse:[],createDataverseError:t.payload,createDataverseSuccess:!1,createDataverseFailed:!0});case zd:return Object.assign({},e,{dropDataverse:[],dropDataverseName:t.payload,dropDataverseError:[],dropDataverseSuccess:!1,dropDataverseFailed:!1});case Bd:return Object.assign({},e,{dropDataverse:t.payload,dropDataverseError:[],dropDataverseSuccess:!0,dropDataverseFailed:!1});case Hd:return Object.assign({},e,{dropDataverse:[],dropDataverseError:t.payload,dropDataverseSuccess:!1,dropDataverseFailed:!0});default:return e}}function Xo(e,t){switch(void 0===e&&(e=vy),t.type){case lp:return Object.assign({},e,{guideSelectsDataset:t.payload});case Xd:return Object.assign({},e,{loading:!0});case Jd:return Object.assign({},e,{loaded:!0,loading:!1,datasets:t.payload});case ep:return Object.assign({},e,{createDataset:[],createDatasetError:[],createDatasetSuccess:!1,createDatasetFailed:!1});case tp:return Object.assign({},e,{createDataset:t.payload,createDatasetName:t.payload,createDatasetError:[],createDatasetSuccess:!0,createDatasetFailed:!1});case np:return Object.assign({},e,{createDataset:[],createDatasetError:t.payload,createDatasetSuccess:!1,createDatasetFailed:!0});case rp:return Object.assign({},e,{dropDataset:[],dropDatasetError:[],dropDatasetName:t.payload,dropDatasetSuccess:!1,dropDatasetFailed:!1});case ip:return Object.assign({},e,{dropDataset:t.payload,dropDatasetError:[],dropDatasetSuccess:!0,dropDatasetFailed:!1});case op:return Object.assign({},e,{dropDataset:[],dropDatasetError:t.payload,dropDatasetSuccess:!1,dropDatasetFailed:!0});default:return e}}function Jo(e,t){switch(void 0===e&&(e=by),t.type){case yp:return Object.assign({},e,{loading:!0});case vp:return Object.assign({},e,{loaded:!0,loading:!1,datatypes:t.payload});case bp:return Object.assign({},e,{createDatatype:[],createDatatypeName:t.payload,createDatatypeError:[],createDatatypeSuccess:!1,createDatatypeFailed:!1});case _p:return Object.assign({},e,{createDatatype:t.payload,createDatatypeError:[],createDatatypeSuccess:!0,createDatatypeFailed:!1});case wp:return Object.assign({},e,{createDatatype:[],createDatatypeError:t.payload,createDatatypeSuccess:!1,createDatatypeFailed:!0});case xp:return Object.assign({},e,{dropDatatype:[],dropDatatypeName:t.payload,dropDatatypeError:[],dropDatatypeSuccess:!1,dropDatatypeFailed:!1});case Cp:return Object.assign({},e,{dropDatatype:t.payload,dropDatatypeError:[],dropDatatypeSuccess:!0,dropDatatypeFailed:!1});case Ep:return Object.assign({},e,{dropDatatype:[],dropDatatypeError:t.payload,dropDatatypeSuccess:!1,dropDatatypeFailed:!0});default:return e}}function el(e,t){switch(void 0===e&&(e=_y),t.type){case Np:return Object.assign({},e,{loading:!0});case Ap:return Object.assign({},e,{loaded:!0,loading:!1,indexes:t.payload});case Lp:return Object.assign({},e,{createIndex:[],createIndexName:t.payload,createIndexError:[],createIndexSuccess:!1,createIndexFailed:!1});case Fp:return Object.assign({},e,{createIndex:[],createIndexError:[],createIndexSuccess:!0,createIndexFailed:!1});case Fp:return Object.assign({},e,{createIndex:t.payload,createIndexError:[],createIndexSuccess:!1,createIndexFailed:!0});case jp:return Object.assign({},e,{dropIndex:[],dropIndexError:[],dropIndexName:t.payload,dropIndexSuccess:!1,dropIndexFailed:!1});case Vp:return Object.assign({},e,{dropIndex:t.payload,dropIndexError:[],dropIndexSuccess:!0,dropIndexFailed:!1});case zp:return Object.assign({},e,{dropIndex:[],dropIndexError:t.payload,dropIndexSuccess:!1,dropIndexFailed:!0});default:return e}}function tl(e,t){switch(void 0===e&&(e=wy),t.type){case Cd:return Object.assign({},e,{loading:!1,loaded:!0,success:!1,sqlQueryString:t.payload,sqlQueryResult:[],sqlQueryError:[]});case Ed:return Object.assign({},e,{loading:!1,loaded:!0,success:!0,sqlQueryResult:t.payload,sqlQueryError:[]});case Sd:return Object.assign({},e,{loading:!1,loaded:!0,success:!1,sqlQueryResult:[],sqlQueryError:t.payload});default:return e}}function nl(e,t){switch(void 0===e&&(e=xy),t.type){case Od:return Object.assign({},e,{loading:!1,loaded:!0,success:!1,sqlQueryMetadataString:t.payload,sqlQueryMetadataResult:[],sqlQueryMetadataError:[]});case Td:return Object.assign({},e,{loading:!1,loaded:!0,success:!0,sqlQueryMetadataResult:t.payload,sqlQueryMetadataError:[]});case kd:return Object.assign({},e,{loading:!1,loaded:!0,success:!1,sqlQueryMetadataResult:[],sqlQueryMetadataError:t.payload});default:return e}}function rl(e,t){switch(void 0===e&&(e=Cy),t.type){case Yh:return Object.assign({},e,{tree:[],loading:!0,loaded:!1});case Xh:return Object.assign({},e,{tree:e.tree.concat([t.payload]),loading:!1,loaded:!0});default:return e}}function il(e){return j(e)(this)}Object.defineProperty(t,"__esModule",{value:!0}),n("TU+8"),n("rgUS");var ol,ll,al=n("LMZF"),sl=function(){},ul=function(e){this.appCoreService=e,this.title="Asterix DB Web Console"},cl=n("Un6q"),dl="undefined"!=typeof Intl&&Intl.v8BreakIterator,pl=function(){return function(){this.isBrowser="object"==typeof document&&!!document,this.EDGE=this.isBrowser&&/(edge)/i.test(navigator.userAgent),this.TRIDENT=this.isBrowser&&/(msie|trident)/i.test(navigator.userAgent),this.BLINK=this.isBrowser&&!(!window.chrome&&!dl)&&!!CSS&&!this.EDGE&&!this.TRIDENT,this.WEBKIT=this.isBrowser&&/AppleWebKit/i.test(navigator.userAgent)&&!this.BLINK&&!this.EDGE&&!this.TRIDENT,this.IOS=this.isBrowser&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,this.FIREFOX=this.isBrowser&&/(firefox|minefield)/i.test(navigator.userAgent),this.ANDROID=this.isBrowser&&/android/i.test(navigator.userAgent)&&!this.TRIDENT,this.SAFARI=this.isBrowser&&/safari/i.test(navigator.userAgent)&&this.WEBKIT}}(),fl=["color","button","checkbox","date","datetime-local","email","file","hidden","image","month","number","password","radio","range","reset","search","submit","tel","text","time","url","week"],hl=function(){},ml=n("TO51"),gl=n("AP4T"),yl=n("Oryw"),vl=yl.a.of,bl=n("6Xbx"),_l=n("8ofh"),wl=n("B1iP"),xl=n("NePw"),Cl=n("qLnt"),El=Object.prototype.toString,Sl=function(e){function t(t,n,r,i){e.call(this),this.sourceObj=t,this.eventName=n,this.selector=r,this.options=i}return Object(bl.__extends)(t,e),t.create=function(e,n,r,i){return Object(wl.a)(r)&&(i=r,r=void 0),new t(e,n,i,r)},t.setupSubscription=function(e,n,r,i,o){var l;if(e&&"[object NodeList]"===El.call(e)||e&&"[object HTMLCollection]"===El.call(e))for(var a=0,s=e.length;a<s;a++)t.setupSubscription(e[a],n,r,i,o);else if(e&&"function"==typeof e.addEventListener&&"function"==typeof e.removeEventListener){var u=e;e.addEventListener(n,r,o),l=function(){return u.removeEventListener(n,r)}}else if(e&&"function"==typeof e.on&&"function"==typeof e.off){var c=e;e.on(n,r),l=function(){return c.off(n,r)}}else{if(!e||"function"!=typeof e.addListener||"function"!=typeof e.removeListener)throw new TypeError("Invalid event target");var d=e;e.addListener(n,r),l=function(){return d.removeListener(n,r)}}i.add(new Cl.a(l))},t.prototype._subscribe=function(e){var n=this.selector;t.setupSubscription(this.sourceObj,this.eventName,n?function(){for(var t=[],r=0;r<arguments.length;r++)t[r-0]=arguments[r];var i=Object(_l.a)(n).apply(void 0,t);i===xl.a?e.error(xl.a.e):e.next(i)}:function(t){return e.next(t)},e,this.options)},t}(gl.a).create,Ol=n("GTlS"),Tl=new(n("wclm").a)(Ol.a),kl=n("lI6h"),Dl=n("qgI0"),Il=function(){function e(e){this.durationSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new Rl(e,this.durationSelector))},e}(),Rl=function(e){function t(t,n){e.call(this,t),this.durationSelector=n,this.hasValue=!1}return Object(bl.__extends)(t,e),t.prototype._next=function(e){if(this.value=e,this.hasValue=!0,!this.throttled){var t=Object(_l.a)(this.durationSelector)(e);if(t===xl.a)this.destination.error(xl.a.e);else{var n=Object(Dl.a)(this,t);n.closed?this.clearThrottle():this.add(this.throttled=n)}}},t.prototype.clearThrottle=function(){var e=this.value,t=this.hasValue,n=this.throttled;n&&(this.remove(n),this.throttled=null,n.unsubscribe()),t&&(this.value=null,this.hasValue=!1,this.destination.next(e))},t.prototype.notifyNext=function(e,t,n,r){this.clearThrottle()},t.prototype.notifyComplete=function(){this.clearThrottle()},t}(kl.a),Ml=n("1j/l"),Pl=n("3iOE"),Nl=function(e){function t(t,n,r){void 0===t&&(t=0),e.call(this),this.period=-1,this.dueTime=0,function(e){return!Object(Ml.a)(e)&&e-parseFloat(e)+1>=0}(n)?this.period=Number(n)<1?1:Number(n):Object(Pl.a)(n)&&(r=n),Object(Pl.a)(r)||(r=Tl),this.scheduler=r,this.dueTime=function(e){return e instanceof Date&&!isNaN(+e)}(t)?+t-this.scheduler.now():t}return Object(bl.__extends)(t,e),t.create=function(e,n,r){return void 0===e&&(e=0),new t(e,n,r)},t.dispatch=function(e){var t=e.index,n=e.period,r=e.subscriber;if(r.next(t),!r.closed){if(-1===n)return r.complete();e.index=t+1,this.schedule(e,n)}},t.prototype._subscribe=function(e){return this.scheduler.schedule(t.dispatch,this.dueTime,{index:0,period:this.period,subscriber:e})},t}(gl.a).create,Al=n("LaOa"),Ll=n("2kLc"),Fl=function(){function e(e,t){this._ngZone=e,this._platform=t,this._scrolled=new ml.Subject,this._globalSubscription=null,this._scrolledCount=0,this.scrollContainers=new Map}return e.prototype.register=function(e){var t=this,n=e.elementScrolled().subscribe(function(){return t._scrolled.next(e)});this.scrollContainers.set(e,n)},e.prototype.deregister=function(e){var t=this.scrollContainers.get(e);t&&(t.unsubscribe(),this.scrollContainers.delete(e))},e.prototype.scrolled=function(e){var t=this;return void 0===e&&(e=20),this._platform.isBrowser?gl.a.create(function(n){t._globalSubscription||t._addGlobalListener();var r=e>0?t._scrolled.pipe(o(e)).subscribe(n):t._scrolled.subscribe(n);return t._scrolledCount++,function(){r.unsubscribe(),t._scrolledCount--,t._globalSubscription&&!t._scrolledCount&&(t._globalSubscription.unsubscribe(),t._globalSubscription=null)}}):vl()},e.prototype.ancestorScrolled=function(e,t){var n=this.getAncestorScrollContainers(e);return this.scrolled(t).pipe(Object(Al.a)(function(e){return!e||n.indexOf(e)>-1}))},e.prototype.getAncestorScrollContainers=function(e){var t=this,n=[];return this.scrollContainers.forEach(function(r,i){t._scrollableContainsElement(i,e)&&n.push(i)}),n},e.prototype._scrollableContainsElement=function(e,t){var n=t.nativeElement,r=e.getElementRef().nativeElement;do{if(n==r)return!0}while(n=n.parentElement);return!1},e.prototype._addGlobalListener=function(){var e=this;this._globalSubscription=this._ngZone.runOutsideAngular(function(){return Sl(window.document,"scroll").subscribe(function(){return e._scrolled.next()})})},e}(),jl=function(){function e(e,t){var n=this;this._change=e.isBrowser?t.runOutsideAngular(function(){return Object(Ll.a)(Sl(window,"resize"),Sl(window,"orientationchange"))}):vl(),this._invalidateCache=this.change().subscribe(function(){return n._updateViewportSize()})}return e.prototype.ngOnDestroy=function(){this._invalidateCache.unsubscribe()},e.prototype.getViewportSize=function(){return this._viewportSize||this._updateViewportSize(),{width:this._viewportSize.width,height:this._viewportSize.height}},e.prototype.getViewportRect=function(){var e=this.getViewportScrollPosition(),t=this.getViewportSize(),n=t.width,r=t.height;return{top:e.top,left:e.left,bottom:e.top+r,right:e.left+n,height:r,width:n}},e.prototype.getViewportScrollPosition=function(){var e=document.documentElement.getBoundingClientRect();return{top:-e.top||document.body.scrollTop||window.scrollY||document.documentElement.scrollTop||0,left:-e.left||document.body.scrollLeft||window.scrollX||document.documentElement.scrollLeft||0}},e.prototype.change=function(e){return void 0===e&&(e=20),e>0?this._change.pipe(o(e)):this._change},e.prototype._updateViewportSize=function(){this._viewportSize={width:window.innerWidth,height:window.innerHeight}},e}(),Vl=function(){},zl=new al.InjectionToken("cdk-dir-doc"),Bl=function(){return function(e){this.value="ltr",this.change=new al.EventEmitter,e&&(this.value=(e.body?e.body.dir:null)||(e.documentElement?e.documentElement.dir:null)||"ltr")}}(),Hl=function(){},Wl=function(){function e(){}return e.prototype.attach=function(e){return null==e&&function(){throw Error("Attempting to attach a portal to a null PortalOutlet")}(),e.hasAttached()&&s(),this._attachedHost=e,e.attach(this)},e.prototype.detach=function(){var e=this._attachedHost;null==e?function(){throw Error("Attempting to detach a portal that is not attached to a host")}():(this._attachedHost=null,e.detach())},Object.defineProperty(e.prototype,"isAttached",{get:function(){return null!=this._attachedHost},enumerable:!0,configurable:!0}),e.prototype.setAttachedHost=function(e){this._attachedHost=e},e}(),ql=function(e){function t(t,n,r){var i=e.call(this)||this;return i.component=t,i.viewContainerRef=n,i.injector=r,i}return Object(bl.__extends)(t,e),t}(Wl),Ul=function(e){function t(t,n,r){var i=e.call(this)||this;return i.templateRef=t,i.viewContainerRef=n,r&&(i.context=r),i}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"origin",{get:function(){return this.templateRef.elementRef},enumerable:!0,configurable:!0}),t.prototype.attach=function(t,n){return void 0===n&&(n=this.context),this.context=n,e.prototype.attach.call(this,t)},t.prototype.detach=function(){return this.context=void 0,e.prototype.detach.call(this)},t}(Wl),Gl=function(){function e(){this._isDisposed=!1}return e.prototype.hasAttached=function(){return!!this._attachedPortal},e.prototype.attach=function(e){return e||function(){throw Error("Must provide a portal to attach")}(),this.hasAttached()&&s(),this._isDisposed&&function(){throw Error("This PortalOutlet has already been disposed")}(),e instanceof ql?(this._attachedPortal=e,this.attachComponentPortal(e)):e instanceof Ul?(this._attachedPortal=e,this.attachTemplatePortal(e)):void function(){throw Error("Attempting to attach an unknown Portal type. BasePortalOutlet accepts either a ComponentPortal or a TemplatePortal.")}()},e.prototype.detach=function(){this._attachedPortal&&(this._attachedPortal.setAttachedHost(null),this._attachedPortal=null),this._invokeDisposeFn()},e.prototype.dispose=function(){this.hasAttached()&&this.detach(),this._invokeDisposeFn(),this._isDisposed=!0},e.prototype.setDisposeFn=function(e){this._disposeFn=e},e.prototype._invokeDisposeFn=function(){this._disposeFn&&(this._disposeFn(),this._disposeFn=null)},e}(),Kl=function(e){function t(t,n,r,i){var o=e.call(this)||this;return o._hostDomElement=t,o._componentFactoryResolver=n,o._appRef=r,o._defaultInjector=i,o}return Object(bl.__extends)(t,e),t.prototype.attachComponentPortal=function(e){var t,n=this,r=this._componentFactoryResolver.resolveComponentFactory(e.component);return e.viewContainerRef?(t=e.viewContainerRef.createComponent(r,e.viewContainerRef.length,e.injector||e.viewContainerRef.parentInjector),this.setDisposeFn(function(){return t.destroy()})):(t=r.create(e.injector||this._defaultInjector),this._appRef.attachView(t.hostView),this.setDisposeFn(function(){n._appRef.detachView(t.hostView),t.destroy()})),this._hostDomElement.appendChild(this._getComponentRootNode(t)),t},t.prototype.attachTemplatePortal=function(e){var t=this,n=e.viewContainerRef,r=n.createEmbeddedView(e.templateRef,e.context);return r.detectChanges(),r.rootNodes.forEach(function(e){return t._hostDomElement.appendChild(e)}),this.setDisposeFn(function(){var e=n.indexOf(r);-1!==e&&n.remove(e)}),r},t.prototype.dispose=function(){e.prototype.dispose.call(this),null!=this._hostDomElement.parentNode&&this._hostDomElement.parentNode.removeChild(this._hostDomElement)},t.prototype._getComponentRootNode=function(e){return e.hostView.rootNodes[0]},t}(Gl),$l=function(e){function t(t,n){var r=e.call(this)||this;return r._componentFactoryResolver=t,r._viewContainerRef=n,r._isInitialized=!1,r}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"_deprecatedPortal",{get:function(){return this.portal},set:function(e){this.portal=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"_deprecatedPortalHost",{get:function(){return this.portal},set:function(e){this.portal=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"portal",{get:function(){return this._attachedPortal},set:function(t){(!this.hasAttached()||t||this._isInitialized)&&(this.hasAttached()&&e.prototype.detach.call(this),t&&e.prototype.attach.call(this,t),this._attachedPortal=t)},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){this._isInitialized=!0},t.prototype.ngOnDestroy=function(){e.prototype.dispose.call(this),this._attachedPortal=null},t.prototype.attachComponentPortal=function(t){t.setAttachedHost(this);var n=null!=t.viewContainerRef?t.viewContainerRef:this._viewContainerRef,r=this._componentFactoryResolver.resolveComponentFactory(t.component),i=n.createComponent(r,n.length,t.injector||n.parentInjector);return e.prototype.setDisposeFn.call(this,function(){return i.destroy()}),this._attachedPortal=t,i},t.prototype.attachTemplatePortal=function(t){var n=this;t.setAttachedHost(this);var r=this._viewContainerRef.createEmbeddedView(t.templateRef,t.context);return e.prototype.setDisposeFn.call(this,function(){return n._viewContainerRef.clear()}),this._attachedPortal=t,r},t}(Gl),Zl=function(){},Ql=function(){function e(e,t){this._parentInjector=e,this._customTokens=t}return e.prototype.get=function(e,t){var n=this._customTokens.get(e);return void 0!==n?n:this._parentInjector.get(e,t)},e}(),Yl=n("E9/g"),Xl=function(e){function t(){var t=e.call(this,"argument out of range");this.name=t.name="ArgumentOutOfRangeError",this.stack=t.stack,this.message=t.message}return Object(bl.__extends)(t,e),t}(Error),Jl=n("Ecq+"),ea=function(){function e(e){if(this.total=e,this.total<0)throw new Xl}return e.prototype.call=function(e,t){return t.subscribe(new ta(e,this.total))},e}(),ta=function(e){function t(t,n){e.call(this,t),this.total=n,this.count=0}return Object(bl.__extends)(t,e),t.prototype._next=function(e){var t=this.total,n=++this.count;n<=t&&(this.destination.next(e),n===t&&(this.destination.complete(),this.unsubscribe()))},t}(Yl.a),na=function(){function e(){}return e.prototype.enable=function(){},e.prototype.disable=function(){},e.prototype.attach=function(){},e}(),ra=function(){return function(e){var t=this;this.scrollStrategy=new na,this.panelClass="",this.hasBackdrop=!1,this.backdropClass="cdk-overlay-dark-backdrop",this.direction="ltr",e&&Object.keys(e).forEach(function(n){return t[n]=e[n]})}}(),ia=function(){function e(e,t){this._scrollDispatcher=e,this._ngZone=t,this._scrollSubscription=null}return e.prototype.attach=function(e){if(this._overlayRef)throw f();this._overlayRef=e},e.prototype.enable=function(){var e=this;this._scrollSubscription||(this._scrollSubscription=this._scrollDispatcher.scrolled(0).subscribe(function(){e._ngZone.run(function(){e.disable(),e._overlayRef.hasAttached()&&e._overlayRef.detach()})}))},e.prototype.disable=function(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)},e}(),oa=function(){function e(e){this._viewportRuler=e,this._previousHTMLStyles={top:"",left:""},this._isEnabled=!1}return e.prototype.attach=function(){},e.prototype.enable=function(){if(this._canBeEnabled()){var e=document.documentElement;this._previousScrollPosition=this._viewportRuler.getViewportScrollPosition(),this._previousHTMLStyles.left=e.style.left||"",this._previousHTMLStyles.top=e.style.top||"",e.style.left=-this._previousScrollPosition.left+"px",e.style.top=-this._previousScrollPosition.top+"px",e.classList.add("cdk-global-scrollblock"),this._isEnabled=!0}},e.prototype.disable=function(){if(this._isEnabled){var e=document.documentElement,t=document.body,n=e.style.scrollBehavior||"",r=t.style.scrollBehavior||"";this._isEnabled=!1,e.style.left=this._previousHTMLStyles.left,e.style.top=this._previousHTMLStyles.top,e.classList.remove("cdk-global-scrollblock"),e.style.scrollBehavior=t.style.scrollBehavior="auto",window.scroll(this._previousScrollPosition.left,this._previousScrollPosition.top),e.style.scrollBehavior=n,t.style.scrollBehavior=r}},e.prototype._canBeEnabled=function(){if(document.documentElement.classList.contains("cdk-global-scrollblock")||this._isEnabled)return!1;var e=document.body,t=this._viewportRuler.getViewportSize();return e.scrollHeight>t.height||e.scrollWidth>t.width},e}(),la=function(){function e(e,t,n,r){this._scrollDispatcher=e,this._viewportRuler=t,this._ngZone=n,this._config=r,this._scrollSubscription=null}return e.prototype.attach=function(e){if(this._overlayRef)throw f();this._overlayRef=e},e.prototype.enable=function(){var e=this;this._scrollSubscription||(this._scrollSubscription=this._scrollDispatcher.scrolled(this._config?this._config.scrollThrottle:0).subscribe(function(){if(e._overlayRef.updatePosition(),e._config&&e._config.autoClose){var t=e._overlayRef.overlayElement.getBoundingClientRect(),n=e._viewportRuler.getViewportSize(),r=n.width,i=n.height;h(t,[{width:r,height:i,bottom:i,right:r,top:0,left:0}])&&(e.disable(),e._ngZone.run(function(){return e._overlayRef.detach()}))}}))},e.prototype.disable=function(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)},e}(),aa=function(){return function(e,t,n){var r=this;this._scrollDispatcher=e,this._viewportRuler=t,this._ngZone=n,this.noop=function(){return new na},this.close=function(){return new ia(r._scrollDispatcher,r._ngZone)},this.block=function(){return new oa(r._viewportRuler)},this.reposition=function(e){return new la(r._scrollDispatcher,r._viewportRuler,r._ngZone,e)}}}(),sa=function(){function e(e,t,n,r,i){this._portalOutlet=e,this._pane=t,this._config=n,this._ngZone=r,this._keyboardDispatcher=i,this._backdropElement=null,this._backdropClick=new ml.Subject,this._attachments=new ml.Subject,this._detachments=new ml.Subject,this._keydownEvents=new ml.Subject,n.scrollStrategy&&n.scrollStrategy.attach(this)}return Object.defineProperty(e.prototype,"overlayElement",{get:function(){return this._pane},enumerable:!0,configurable:!0}),e.prototype.attach=function(e){var t=this,n=this._portalOutlet.attach(e);return this._config.positionStrategy&&this._config.positionStrategy.attach(this),this._updateStackingOrder(),this._updateElementSize(),this._updateElementDirection(),this._config.scrollStrategy&&this._config.scrollStrategy.enable(),this._ngZone.onStable.asObservable().pipe(u(1)).subscribe(function(){t.updatePosition()}),this._togglePointerEvents(!0),this._config.hasBackdrop&&this._attachBackdrop(),this._config.panelClass&&(Array.isArray(this._config.panelClass)?this._config.panelClass.forEach(function(e){return t._pane.classList.add(e)}):this._pane.classList.add(this._config.panelClass)),this._attachments.next(),this._keyboardDispatcher.add(this),n},e.prototype.detach=function(){if(this.hasAttached()){this.detachBackdrop(),this._togglePointerEvents(!1),this._config.positionStrategy&&this._config.positionStrategy.detach&&this._config.positionStrategy.detach(),this._config.scrollStrategy&&this._config.scrollStrategy.disable();var e=this._portalOutlet.detach();return this._detachments.next(),this._keyboardDispatcher.remove(this),e}},e.prototype.dispose=function(){var e=this.hasAttached();this._config.positionStrategy&&this._config.positionStrategy.dispose(),this._config.scrollStrategy&&this._config.scrollStrategy.disable(),this.detachBackdrop(),this._keyboardDispatcher.remove(this),this._portalOutlet.dispose(),this._attachments.complete(),this._backdropClick.complete(),this._keydownEvents.complete(),e&&this._detachments.next(),this._detachments.complete()},e.prototype.hasAttached=function(){return this._portalOutlet.hasAttached()},e.prototype.backdropClick=function(){return this._backdropClick.asObservable()},e.prototype.attachments=function(){return this._attachments.asObservable()},e.prototype.detachments=function(){return this._detachments.asObservable()},e.prototype.keydownEvents=function(){return this._keydownEvents.asObservable()},e.prototype.getConfig=function(){return this._config},e.prototype.updatePosition=function(){this._config.positionStrategy&&this._config.positionStrategy.apply()},e.prototype.updateSize=function(e){this._config=Object(bl.__assign)({},this._config,e),this._updateElementSize()},e.prototype.setDirection=function(e){this._config=Object(bl.__assign)({},this._config,{direction:e}),this._updateElementDirection()},e.prototype._updateElementDirection=function(){this._pane.setAttribute("dir",this._config.direction)},e.prototype._updateElementSize=function(){(this._config.width||0===this._config.width)&&(this._pane.style.width=g(this._config.width)),(this._config.height||0===this._config.height)&&(this._pane.style.height=g(this._config.height)),(this._config.minWidth||0===this._config.minWidth)&&(this._pane.style.minWidth=g(this._config.minWidth)),(this._config.minHeight||0===this._config.minHeight)&&(this._pane.style.minHeight=g(this._config.minHeight)),(this._config.maxWidth||0===this._config.maxWidth)&&(this._pane.style.maxWidth=g(this._config.maxWidth)),(this._config.maxHeight||0===this._config.maxHeight)&&(this._pane.style.maxHeight=g(this._config.maxHeight))},e.prototype._togglePointerEvents=function(e){this._pane.style.pointerEvents=e?"auto":"none"},e.prototype._attachBackdrop=function(){var e=this;this._backdropElement=document.createElement("div"),this._backdropElement.classList.add("cdk-overlay-backdrop"),this._config.backdropClass&&this._backdropElement.classList.add(this._config.backdropClass),this._pane.parentElement.insertBefore(this._backdropElement,this._pane),this._backdropElement.addEventListener("click",function(){return e._backdropClick.next(null)}),this._ngZone.runOutsideAngular(function(){requestAnimationFrame(function(){e._backdropElement&&e._backdropElement.classList.add("cdk-overlay-backdrop-showing")})})},e.prototype._updateStackingOrder=function(){this._pane.nextSibling&&this._pane.parentNode.appendChild(this._pane)},e.prototype.detachBackdrop=function(){var e=this,t=this._backdropElement;if(t){var n=function(){t&&t.parentNode&&t.parentNode.removeChild(t),e._backdropElement==t&&(e._backdropElement=null)};t.classList.remove("cdk-overlay-backdrop-showing"),this._config.backdropClass&&t.classList.remove(this._config.backdropClass),t.addEventListener("transitionend",n),t.style.pointerEvents="none",this._ngZone.runOutsideAngular(function(){setTimeout(n,500)})}},e}(),ua=function(){function e(e,t,n,r,i){this._connectedTo=n,this._viewportRuler=r,this._document=i,this._dir="ltr",this._offsetX=0,this._offsetY=0,this.scrollables=[],this._resizeSubscription=Cl.a.EMPTY,this._preferredPositions=[],this._applied=!1,this._positionLocked=!1,this._onPositionChange=new ml.Subject,this._origin=this._connectedTo.nativeElement,this.withFallbackPosition(e,t)}return Object.defineProperty(e.prototype,"_isRtl",{get:function(){return"rtl"===this._dir},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"onPositionChange",{get:function(){return this._onPositionChange.asObservable()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"positions",{get:function(){return this._preferredPositions},enumerable:!0,configurable:!0}),e.prototype.attach=function(e){var t=this;this._overlayRef=e,this._pane=e.overlayElement,this._resizeSubscription.unsubscribe(),this._resizeSubscription=this._viewportRuler.change().subscribe(function(){return t.apply()})},e.prototype.dispose=function(){this._applied=!1,this._resizeSubscription.unsubscribe()},e.prototype.detach=function(){this._applied=!1,this._resizeSubscription.unsubscribe()},e.prototype.apply=function(){if(this._applied&&this._positionLocked&&this._lastConnectedPosition)this.recalculateLastPosition();else{this._applied=!0;for(var e,t,n=this._pane,r=this._origin.getBoundingClientRect(),i=n.getBoundingClientRect(),o=this._viewportRuler.getViewportSize(),l=0,a=this._preferredPositions;l<a.length;l++){var s=a[l],u=this._getOriginConnectionPoint(r,s),c=this._getOverlayPoint(u,i,o,s);if(c.fitsInViewport)return this._setElementPosition(n,i,c,s),void(this._lastConnectedPosition=s);(!e||e.visibleArea<c.visibleArea)&&(e=c,t=s)}this._setElementPosition(n,i,e,t)}},e.prototype.recalculateLastPosition=function(){if(this._lastConnectedPosition){var e=this._origin.getBoundingClientRect(),t=this._pane.getBoundingClientRect(),n=this._viewportRuler.getViewportSize(),r=this._lastConnectedPosition||this._preferredPositions[0],i=this._getOriginConnectionPoint(e,r),o=this._getOverlayPoint(i,t,n,r);this._setElementPosition(this._pane,t,o,r)}},e.prototype.withScrollableContainers=function(e){this.scrollables=e},e.prototype.withFallbackPosition=function(e,t,n,r){var i=new function(e,t,n,r){this.offsetX=n,this.offsetY=r,this.originX=e.originX,this.originY=e.originY,this.overlayX=t.overlayX,this.overlayY=t.overlayY}(e,t,n,r);return this._preferredPositions.push(i),this},e.prototype.withDirection=function(e){return this._dir=e,this},e.prototype.withOffsetX=function(e){return this._offsetX=e,this},e.prototype.withOffsetY=function(e){return this._offsetY=e,this},e.prototype.withLockedPosition=function(e){return this._positionLocked=e,this},e.prototype._getStartX=function(e){return this._isRtl?e.right:e.left},e.prototype._getEndX=function(e){return this._isRtl?e.left:e.right},e.prototype._getOriginConnectionPoint=function(e,t){var n,r=this._getStartX(e),i=this._getEndX(e);n="center"==t.originX?r+e.width/2:"start"==t.originX?r:i;var o;return o="center"==t.originY?e.top+e.height/2:"top"==t.originY?e.top:e.bottom,{x:n,y:o}},e.prototype._getOverlayPoint=function(e,t,n,r){var i;i="center"==r.overlayX?-t.width/2:"start"===r.overlayX?this._isRtl?-t.width:0:this._isRtl?0:-t.width;var o;o="center"==r.overlayY?-t.height/2:"top"==r.overlayY?0:-t.height;var l=e.x+i+(void 0===r.offsetX?this._offsetX:r.offsetX),a=e.y+o+(void 0===r.offsetY?this._offsetY:r.offsetY),s=0-a,u=a+t.height-n.height,c=this._subtractOverflows(t.width,0-l,l+t.width-n.width)*this._subtractOverflows(t.height,s,u);return{x:l,y:a,fitsInViewport:t.width*t.height===c,visibleArea:c}},e.prototype._getScrollVisibility=function(e){var t=this._origin.getBoundingClientRect(),n=e.getBoundingClientRect(),r=this.scrollables.map(function(e){return e.getElementRef().nativeElement.getBoundingClientRect()});return{isOriginClipped:m(t,r),isOriginOutsideView:h(t,r),isOverlayClipped:m(n,r),isOverlayOutsideView:h(n,r)}},e.prototype._setElementPosition=function(e,t,n,r){var i,o="bottom"===r.overlayY?"bottom":"top",l="top"===o?n.y:this._document.documentElement.clientHeight-(n.y+t.height),a="left"==(i="rtl"===this._dir?"end"===r.overlayX?"left":"right":"end"===r.overlayX?"right":"left")?n.x:this._document.documentElement.clientWidth-(n.x+t.width);["top","bottom","left","right"].forEach(function(t){return e.style[t]=null}),e.style[o]=l+"px",e.style[i]=a+"px";var s=new function(e,t){this.connectionPair=e,this.scrollableViewProperties=t}(r,this._getScrollVisibility(e));this._onPositionChange.next(s)},e.prototype._subtractOverflows=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return t.reduce(function(e,t){return e-Math.max(t,0)},e)},e}(),ca=function(){function e(e){this._document=e,this._cssPosition="static",this._topOffset="",this._bottomOffset="",this._leftOffset="",this._rightOffset="",this._alignItems="",this._justifyContent="",this._width="",this._height="",this._wrapper=null}return e.prototype.attach=function(e){this._overlayRef=e},e.prototype.top=function(e){return void 0===e&&(e=""),this._bottomOffset="",this._topOffset=e,this._alignItems="flex-start",this},e.prototype.left=function(e){return void 0===e&&(e=""),this._rightOffset="",this._leftOffset=e,this._justifyContent="flex-start",this},e.prototype.bottom=function(e){return void 0===e&&(e=""),this._topOffset="",this._bottomOffset=e,this._alignItems="flex-end",this},e.prototype.right=function(e){return void 0===e&&(e=""),this._leftOffset="",this._rightOffset=e,this._justifyContent="flex-end",this},e.prototype.width=function(e){return void 0===e&&(e=""),this._width=e,"100%"===e&&this.left("0px"),this},e.prototype.height=function(e){return void 0===e&&(e=""),this._height=e,"100%"===e&&this.top("0px"),this},e.prototype.centerHorizontally=function(e){return void 0===e&&(e=""),this.left(e),this._justifyContent="center",this},e.prototype.centerVertically=function(e){return void 0===e&&(e=""),this.top(e),this._alignItems="center",this},e.prototype.apply=function(){var e=this._overlayRef.overlayElement;!this._wrapper&&e.parentNode&&(this._wrapper=this._document.createElement("div"),this._wrapper.classList.add("cdk-global-overlay-wrapper"),e.parentNode.insertBefore(this._wrapper,e),this._wrapper.appendChild(e));var t=e.style,n=e.parentNode.style;t.position=this._cssPosition,t.marginTop=this._topOffset,t.marginLeft=this._leftOffset,t.marginBottom=this._bottomOffset,t.marginRight=this._rightOffset,t.width=this._width,t.height=this._height,n.justifyContent=this._justifyContent,n.alignItems=this._alignItems},e.prototype.dispose=function(){this._wrapper&&this._wrapper.parentNode&&(this._wrapper.parentNode.removeChild(this._wrapper),this._wrapper=null)},e}(),da=function(){function e(e,t){this._viewportRuler=e,this._document=t}return e.prototype.global=function(){return new ca(this._document)},e.prototype.connectedTo=function(e,t,n){return new ua(t,n,e,this._viewportRuler,this._document)},e}(),pa=function(){function e(e){this._document=e,this._attachedOverlays=[]}return e.prototype.ngOnDestroy=function(){this._unsubscribeFromKeydownEvents()},e.prototype.add=function(e){this._keydownEventSubscription||this._subscribeToKeydownEvents(),this._attachedOverlays.push(e)},e.prototype.remove=function(e){var t=this._attachedOverlays.indexOf(e);t>-1&&this._attachedOverlays.splice(t,1),0===this._attachedOverlays.length&&this._unsubscribeFromKeydownEvents()},e.prototype._subscribeToKeydownEvents=function(){var e=this,t=Sl(this._document.body,"keydown");this._keydownEventSubscription=t.pipe(Object(Al.a)(function(){return!!e._attachedOverlays.length})).subscribe(function(t){e._selectOverlayFromEvent(t)._keydownEvents.next(t)})},e.prototype._unsubscribeFromKeydownEvents=function(){this._keydownEventSubscription&&(this._keydownEventSubscription.unsubscribe(),this._keydownEventSubscription=null)},e.prototype._selectOverlayFromEvent=function(e){return this._attachedOverlays.find(function(t){return t.overlayElement===e.target||t.overlayElement.contains(e.target)})||this._attachedOverlays[this._attachedOverlays.length-1]},e}(),fa=function(){function e(e){this._document=e}return e.prototype.ngOnDestroy=function(){this._containerElement&&this._containerElement.parentNode&&this._containerElement.parentNode.removeChild(this._containerElement)},e.prototype.getContainerElement=function(){return this._containerElement||this._createContainer(),this._containerElement},e.prototype._createContainer=function(){var e=this._document.createElement("div");e.classList.add("cdk-overlay-container"),this._document.body.appendChild(e),this._containerElement=e},e}(),ha=0,ma=new ra,ga=function(){function e(e,t,n,r,i,o,l,a,s){this.scrollStrategies=e,this._overlayContainer=t,this._componentFactoryResolver=n,this._positionBuilder=r,this._keyboardDispatcher=i,this._appRef=o,this._injector=l,this._ngZone=a,this._document=s}return e.prototype.create=function(e){void 0===e&&(e=ma);var t=this._createPaneElement(),n=this._createPortalOutlet(t);return new sa(n,t,e,this._ngZone,this._keyboardDispatcher)},e.prototype.position=function(){return this._positionBuilder},e.prototype._createPaneElement=function(){var e=this._document.createElement("div");return e.id="cdk-overlay-"+ha++,e.classList.add("cdk-overlay-pane"),this._overlayContainer.getContainerElement().appendChild(e),e},e.prototype._createPortalOutlet=function(e){return new Kl(e,this._componentFactoryResolver,this._appRef,this._injector)},e}(),ya=new al.InjectionToken("cdk-connected-overlay-scroll-strategy"),va=function(){},ba=function(){function e(e,t){this.dueTime=e,this.scheduler=t}return e.prototype.call=function(e,t){return t.subscribe(new _a(e,this.dueTime,this.scheduler))},e}(),_a=function(e){function t(t,n,r){e.call(this,t),this.dueTime=n,this.scheduler=r,this.debouncedSubscription=null,this.lastValue=null,this.hasValue=!1}return Object(bl.__extends)(t,e),t.prototype._next=function(e){this.clearDebounce(),this.lastValue=e,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(w,this.dueTime,this))},t.prototype._complete=function(){this.debouncedNext(),this.destination.complete()},t.prototype.debouncedNext=function(){this.clearDebounce(),this.hasValue&&(this.destination.next(this.lastValue),this.lastValue=null,this.hasValue=!1)},t.prototype.clearDebounce=function(){var e=this.debouncedSubscription;null!==e&&(this.remove(e),e.unsubscribe(),this.debouncedSubscription=null)},t}(Yl.a),wa=n("qqDE"),xa=function(){function e(e,t,n){this.nextOrObserver=e,this.error=t,this.complete=n}return e.prototype.call=function(e,t){return t.subscribe(new Ca(e,this.nextOrObserver,this.error,this.complete))},e}(),Ca=function(e){function t(t,n,r,i){e.call(this,t);var o=new Yl.a(n,r,i);o.syncErrorThrowable=!0,this.add(o),this.safeSubscriber=o}return Object(bl.__extends)(t,e),t.prototype._next=function(e){var t=this.safeSubscriber;t.next(e),t.syncErrorThrown?this.destination.error(t.syncErrorValue):this.destination.next(e)},t.prototype._error=function(e){var t=this.safeSubscriber;t.error(e),this.destination.error(t.syncErrorThrown?t.syncErrorValue:e)},t.prototype._complete=function(){var e=this.safeSubscriber;e.complete(),e.syncErrorThrown?this.destination.error(e.syncErrorValue):this.destination.complete()},t}(Yl.a),Ea=function(){function e(e){this._platform=e}return e.prototype.isDisabled=function(e){return e.hasAttribute("disabled")},e.prototype.isVisible=function(e){return!!(e.offsetWidth||e.offsetHeight||"function"==typeof e.getClientRects&&e.getClientRects().length)&&"visible"===getComputedStyle(e).visibility},e.prototype.isTabbable=function(e){if(!this._platform.isBrowser)return!1;var t=(e.ownerDocument.defaultView||window).frameElement;if(t){var n=t&&t.nodeName.toLowerCase();if(-1===E(t))return!1;if((this._platform.BLINK||this._platform.WEBKIT)&&"object"===n)return!1;if((this._platform.BLINK||this._platform.WEBKIT)&&!this.isVisible(t))return!1}var r=e.nodeName.toLowerCase(),i=E(e);if(e.hasAttribute("contenteditable"))return-1!==i;if("iframe"===r)return!1;if("audio"===r){if(!e.hasAttribute("controls"))return!1;if(this._platform.BLINK)return!0}if("video"===r){if(!e.hasAttribute("controls")&&this._platform.TRIDENT)return!1;if(this._platform.BLINK||this._platform.FIREFOX)return!0}return("object"!==r||!this._platform.BLINK&&!this._platform.WEBKIT)&&!(this._platform.WEBKIT&&this._platform.IOS&&!function(e){var t=e.nodeName.toLowerCase(),n="input"===t&&e.type;return"text"===n||"password"===n||"select"===t||"textarea"===t}(e))&&e.tabIndex>=0},e.prototype.isFocusable=function(e){return function(e){return!function(e){return"input"==e.nodeName.toLowerCase()&&"hidden"==e.type}(e)&&(function(t){var n=e.nodeName.toLowerCase();return"input"===n||"select"===n||"button"===n||"textarea"===n}()||function(e){return"a"==e.nodeName.toLowerCase()&&e.hasAttribute("href")}(e)||e.hasAttribute("contenteditable")||C(e))}(e)&&!this.isDisabled(e)&&this.isVisible(e)},e}(),Sa=function(){function e(e,t,n,r,i){void 0===i&&(i=!1),this._element=e,this._checker=t,this._ngZone=n,this._document=r,this._enabled=!0,i||this.attachAnchors()}return Object.defineProperty(e.prototype,"enabled",{get:function(){return this._enabled},set:function(e){this._enabled=e,this._startAnchor&&this._endAnchor&&(this._startAnchor.tabIndex=this._endAnchor.tabIndex=this._enabled?0:-1)},enumerable:!0,configurable:!0}),e.prototype.destroy=function(){this._startAnchor&&this._startAnchor.parentNode&&this._startAnchor.parentNode.removeChild(this._startAnchor),this._endAnchor&&this._endAnchor.parentNode&&this._endAnchor.parentNode.removeChild(this._endAnchor),this._startAnchor=this._endAnchor=null},e.prototype.attachAnchors=function(){var e=this;this._startAnchor||(this._startAnchor=this._createAnchor()),this._endAnchor||(this._endAnchor=this._createAnchor()),this._ngZone.runOutsideAngular(function(){e._startAnchor.addEventListener("focus",function(){e.focusLastTabbableElement()}),e._endAnchor.addEventListener("focus",function(){e.focusFirstTabbableElement()}),e._element.parentNode&&(e._element.parentNode.insertBefore(e._startAnchor,e._element),e._element.parentNode.insertBefore(e._endAnchor,e._element.nextSibling))})},e.prototype.focusInitialElementWhenReady=function(){var e=this;return new Promise(function(t){e._executeOnStable(function(){return t(e.focusInitialElement())})})},e.prototype.focusFirstTabbableElementWhenReady=function(){var e=this;return new Promise(function(t){e._executeOnStable(function(){return t(e.focusFirstTabbableElement())})})},e.prototype.focusLastTabbableElementWhenReady=function(){var e=this;return new Promise(function(t){e._executeOnStable(function(){return t(e.focusLastTabbableElement())})})},e.prototype._getRegionBoundary=function(e){for(var t=this._element.querySelectorAll("[cdk-focus-region-"+e+"], [cdkFocusRegion"+e+"], [cdk-focus-"+e+"]"),n=0;n<t.length;n++)t[n].hasAttribute("cdk-focus-"+e)?console.warn("Found use of deprecated attribute 'cdk-focus-"+e+"', use 'cdkFocusRegion"+e+"' instead.",t[n]):t[n].hasAttribute("cdk-focus-region-"+e)&&console.warn("Found use of deprecated attribute 'cdk-focus-region-"+e+"', use 'cdkFocusRegion"+e+"' instead.",t[n]);return"start"==e?t.length?t[0]:this._getFirstTabbableElement(this._element):t.length?t[t.length-1]:this._getLastTabbableElement(this._element)},e.prototype.focusInitialElement=function(){var e=this._element.querySelector("[cdk-focus-initial], [cdkFocusInitial]");return this._element.hasAttribute("cdk-focus-initial")&&console.warn("Found use of deprecated attribute 'cdk-focus-initial', use 'cdkFocusInitial' instead.",this._element),e?(e.focus(),!0):this.focusFirstTabbableElement()},e.prototype.focusFirstTabbableElement=function(){var e=this._getRegionBoundary("start");return e&&e.focus(),!!e},e.prototype.focusLastTabbableElement=function(){var e=this._getRegionBoundary("end");return e&&e.focus(),!!e},e.prototype._getFirstTabbableElement=function(e){if(this._checker.isFocusable(e)&&this._checker.isTabbable(e))return e;for(var t=e.children||e.childNodes,n=0;n<t.length;n++){var r=t[n].nodeType===Node.ELEMENT_NODE?this._getFirstTabbableElement(t[n]):null;if(r)return r}return null},e.prototype._getLastTabbableElement=function(e){if(this._checker.isFocusable(e)&&this._checker.isTabbable(e))return e;for(var t=e.children||e.childNodes,n=t.length-1;n>=0;n--){var r=t[n].nodeType===Node.ELEMENT_NODE?this._getLastTabbableElement(t[n]):null;if(r)return r}return null},e.prototype._createAnchor=function(){var e=this._document.createElement("div");return e.tabIndex=this._enabled?0:-1,e.classList.add("cdk-visually-hidden"),e.classList.add("cdk-focus-trap-anchor"),e},e.prototype._executeOnStable=function(e){this._ngZone.isStable?e():this._ngZone.onStable.asObservable().pipe(u(1)).subscribe(e)},e}(),Oa=function(){function e(e,t,n){this._checker=e,this._ngZone=t,this._document=n}return e.prototype.create=function(e,t){return void 0===t&&(t=!1),new Sa(e,this._checker,this._ngZone,this._document,t)},e}(),Ta=function(){function e(e,t,n){this._elementRef=e,this._focusTrapFactory=t,this._previouslyFocusedElement=null,this._document=n,this.focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement,!0)}return Object.defineProperty(e.prototype,"enabled",{get:function(){return this.focusTrap.enabled},set:function(e){this.focusTrap.enabled=c(e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"autoCapture",{get:function(){return this._autoCapture},set:function(e){this._autoCapture=c(e)},enumerable:!0,configurable:!0}),e.prototype.ngOnDestroy=function(){this.focusTrap.destroy(),this._previouslyFocusedElement&&(this._previouslyFocusedElement.focus(),this._previouslyFocusedElement=null)},e.prototype.ngAfterContentInit=function(){this.focusTrap.attachAnchors(),this.autoCapture&&(this._previouslyFocusedElement=this._document.activeElement,this.focusTrap.focusInitialElementWhenReady())},e}(),ka="cdk-describedby-message",Da="cdk-describedby-host",Ia=0,Ra=new Map,Ma=null,Pa=function(){function e(e){this._document=e}return e.prototype.describe=function(e,t){t.trim()&&(Ra.has(t)||this._createMessageElement(t),this._isElementDescribedByMessage(e,t)||this._addMessageReference(e,t))},e.prototype.removeDescription=function(e,t){if(t.trim()){this._isElementDescribedByMessage(e,t)&&this._removeMessageReference(e,t);var n=Ra.get(t);n&&0===n.referenceCount&&this._deleteMessageElement(t),Ma&&0===Ma.childNodes.length&&this._deleteMessagesContainer()}},e.prototype.ngOnDestroy=function(){for(var e=this._document.querySelectorAll("["+Da+"]"),t=0;t<e.length;t++)this._removeCdkDescribedByReferenceIds(e[t]),e[t].removeAttribute(Da);Ma&&this._deleteMessagesContainer(),Ra.clear()},e.prototype._createMessageElement=function(e){var t=this._document.createElement("div");t.setAttribute("id",ka+"-"+Ia++),t.appendChild(this._document.createTextNode(e)),Ma||this._createMessagesContainer(),Ma.appendChild(t),Ra.set(e,{messageElement:t,referenceCount:0})},e.prototype._deleteMessageElement=function(e){var t=Ra.get(e),n=t&&t.messageElement;Ma&&n&&Ma.removeChild(n),Ra.delete(e)},e.prototype._createMessagesContainer=function(){(Ma=this._document.createElement("div")).setAttribute("id","cdk-describedby-message-container"),Ma.setAttribute("aria-hidden","true"),Ma.style.display="none",this._document.body.appendChild(Ma)},e.prototype._deleteMessagesContainer=function(){this._document.body.removeChild(Ma),Ma=null},e.prototype._removeCdkDescribedByReferenceIds=function(e){var t=S(e,"aria-describedby").filter(function(e){return 0!=e.indexOf(ka)});e.setAttribute("aria-describedby",t.join(" "))},e.prototype._addMessageReference=function(e,t){var n=Ra.get(t);!function(e,t,n){var r=S(e,"aria-describedby");r.some(function(e){return e.trim()==n.trim()})||(r.push(n.trim()),e.setAttribute("aria-describedby",r.join(" ")))}(e,0,n.messageElement.id),e.setAttribute(Da,""),n.referenceCount++},e.prototype._removeMessageReference=function(e,t){var n=Ra.get(t);n.referenceCount--,function(e,t,n){var r=S(e,"aria-describedby").filter(function(e){return e!=n.trim()});e.setAttribute("aria-describedby",r.join(" "))}(e,0,n.messageElement.id),e.removeAttribute(Da)},e.prototype._isElementDescribedByMessage=function(e,t){var n=S(e,"aria-describedby"),r=Ra.get(t),i=r&&r.messageElement.id;return!!i&&-1!=n.indexOf(i)},e}(),Na=new al.InjectionToken("liveAnnouncerElement"),Aa=function(){function e(e,t){this._document=t,this._liveElement=e||this._createLiveElement()}return e.prototype.announce=function(e,t){var n=this;void 0===t&&(t="polite"),this._liveElement.textContent="",this._liveElement.setAttribute("aria-live",t),setTimeout(function(){return n._liveElement.textContent=e},100)},e.prototype.ngOnDestroy=function(){this._liveElement&&this._liveElement.parentNode&&this._liveElement.parentNode.removeChild(this._liveElement)},e.prototype._createLiveElement=function(){var e=this._document.createElement("div");return e.classList.add("cdk-visually-hidden"),e.setAttribute("aria-atomic","true"),e.setAttribute("aria-live","polite"),this._document.body.appendChild(e),e},e}(),La=function(){function e(e,t){this._ngZone=e,this._platform=t,this._origin=null,this._windowFocused=!1,this._elementInfo=new WeakMap,this._unregisterGlobalListeners=function(){},this._monitoredElementCount=0}return e.prototype.monitor=function(e,t,n){var r=this;if(t instanceof al.Renderer2||(n=t),n=!!n,!this._platform.isBrowser)return vl(null);if(this._elementInfo.has(e)){var i=this._elementInfo.get(e);return i.checkChildren=n,i.subject.asObservable()}var o={unlisten:function(){},checkChildren:n,subject:new ml.Subject};this._elementInfo.set(e,o),this._incrementMonitoredElementCount();var l=function(t){return r._onFocus(t,e)},a=function(t){return r._onBlur(t,e)};return this._ngZone.runOutsideAngular(function(){e.addEventListener("focus",l,!0),e.addEventListener("blur",a,!0)}),o.unlisten=function(){e.removeEventListener("focus",l,!0),e.removeEventListener("blur",a,!0)},o.subject.asObservable()},e.prototype.stopMonitoring=function(e){var t=this._elementInfo.get(e);t&&(t.unlisten(),t.subject.complete(),this._setClasses(e),this._elementInfo.delete(e),this._decrementMonitoredElementCount())},e.prototype.focusVia=function(e,t){this._setOriginForCurrentEventQueue(t),e.focus()},e.prototype._registerGlobalListeners=function(){var e=this;if(this._platform.isBrowser){var t=function(){e._lastTouchTarget=null,e._setOriginForCurrentEventQueue("keyboard")},n=function(){e._lastTouchTarget||e._setOriginForCurrentEventQueue("mouse")},i=function(t){null!=e._touchTimeout&&clearTimeout(e._touchTimeout),e._lastTouchTarget=t.target,e._touchTimeout=setTimeout(function(){return e._lastTouchTarget=null},650)},o=function(){e._windowFocused=!0,setTimeout(function(){return e._windowFocused=!1},0)};this._ngZone.runOutsideAngular(function(){document.addEventListener("keydown",t,!0),document.addEventListener("mousedown",n,!0),document.addEventListener("touchstart",i,!r()||{passive:!0,capture:!0}),window.addEventListener("focus",o)}),this._unregisterGlobalListeners=function(){document.removeEventListener("keydown",t,!0),document.removeEventListener("mousedown",n,!0),document.removeEventListener("touchstart",i,!r()||{passive:!0,capture:!0}),window.removeEventListener("focus",o)}}},e.prototype._toggleClass=function(e,t,n){n?e.classList.add(t):e.classList.remove(t)},e.prototype._setClasses=function(e,t){this._elementInfo.get(e)&&(this._toggleClass(e,"cdk-focused",!!t),this._toggleClass(e,"cdk-touch-focused","touch"===t),this._toggleClass(e,"cdk-keyboard-focused","keyboard"===t),this._toggleClass(e,"cdk-mouse-focused","mouse"===t),this._toggleClass(e,"cdk-program-focused","program"===t))},e.prototype._setOriginForCurrentEventQueue=function(e){var t=this;this._origin=e,setTimeout(function(){return t._origin=null},0)},e.prototype._wasCausedByTouch=function(e){var t=e.target;return this._lastTouchTarget instanceof Node&&t instanceof Node&&(t===this._lastTouchTarget||t.contains(this._lastTouchTarget))},e.prototype._onFocus=function(e,t){var n=this._elementInfo.get(t);n&&(n.checkChildren||t===e.target)&&(this._origin||(this._origin=this._windowFocused&&this._lastFocusOrigin?this._lastFocusOrigin:this._wasCausedByTouch(e)?"touch":"program"),this._setClasses(t,this._origin),n.subject.next(this._origin),this._lastFocusOrigin=this._origin,this._origin=null)},e.prototype._onBlur=function(e,t){var n=this._elementInfo.get(t);!n||n.checkChildren&&e.relatedTarget instanceof Node&&t.contains(e.relatedTarget)||(this._setClasses(t),n.subject.next(null))},e.prototype._incrementMonitoredElementCount=function(){1==++this._monitoredElementCount&&this._registerGlobalListeners()},e.prototype._decrementMonitoredElementCount=function(){--this._monitoredElementCount||(this._unregisterGlobalListeners(),this._unregisterGlobalListeners=function(){})},e}(),Fa=function(){function e(e,t){var n=this;this._elementRef=e,this._focusMonitor=t,this.cdkFocusChange=new al.EventEmitter,this._monitorSubscription=this._focusMonitor.monitor(this._elementRef.nativeElement,this._elementRef.nativeElement.hasAttribute("cdkMonitorSubtreeFocus")).subscribe(function(e){return n.cdkFocusChange.emit(e)})}return e.prototype.ngOnDestroy=function(){this._focusMonitor.stopMonitoring(this._elementRef.nativeElement),this._monitorSubscription.unsubscribe()},e}(),ja=function(){},Va=n("RyBE"),za=new al.InjectionToken("mat-sanity-checks"),Ba=function(){function e(e){this._sanityChecksEnabled=e,this._hasDoneGlobalChecks=!1,this._hasCheckedHammer=!1,this._document="object"==typeof document&&document?document:null,this._window="object"==typeof window&&window?window:null,this._areChecksEnabled()&&!this._hasDoneGlobalChecks&&(this._checkDoctypeIsDefined(),this._checkThemeIsPresent(),this._hasDoneGlobalChecks=!0)}return e.prototype._areChecksEnabled=function(){return this._sanityChecksEnabled&&Object(al.isDevMode)()&&!this._isTestEnv()},e.prototype._isTestEnv=function(){return this._window&&(this._window.__karma__||this._window.jasmine)},e.prototype._checkDoctypeIsDefined=function(){this._document&&!this._document.doctype&&console.warn("Current document does not have a doctype. This may cause some Angular Material components not to behave as expected.")},e.prototype._checkThemeIsPresent=function(){if(this._document&&"function"==typeof getComputedStyle){var e=this._document.createElement("div");e.classList.add("mat-theme-loaded-marker"),this._document.body.appendChild(e);var t=getComputedStyle(e);t&&"none"!==t.display&&console.warn("Could not find Angular Material core theme. Most Material components may not work as expected. For more info refer to the theming guide: https://material.angular.io/guide/theming"),this._document.body.removeChild(e)}},e.prototype._checkHammerIsAvailable=function(){!this._hasCheckedHammer&&this._window&&(this._areChecksEnabled()&&!this._window.Hammer&&console.warn("Could not find HammerJS. Certain Angular Material components may not work correctly."),this._hasCheckedHammer=!0)},e}(),Ha=new al.InjectionToken("MAT_DATE_LOCALE"),Wa=function(){function e(){this._localeChanges=new ml.Subject}return Object.defineProperty(e.prototype,"localeChanges",{get:function(){return this._localeChanges},enumerable:!0,configurable:!0}),e.prototype.deserialize=function(e){return null==e||this.isDateInstance(e)&&this.isValid(e)?e:this.invalid()},e.prototype.setLocale=function(e){this.locale=e,this._localeChanges.next()},e.prototype.compareDate=function(e,t){return this.getYear(e)-this.getYear(t)||this.getMonth(e)-this.getMonth(t)||this.getDate(e)-this.getDate(t)},e.prototype.sameDate=function(e,t){if(e&&t){var n=this.isValid(e),r=this.isValid(t);return n&&r?!this.compareDate(e,t):n==r}return e==t},e.prototype.clampDate=function(e,t,n){return t&&this.compareDate(e,t)<0?t:n&&this.compareDate(e,n)>0?n:e},e}(),qa=new al.InjectionToken("mat-date-formats"),Ua="undefined"!=typeof Intl,Ga={long:["January","February","March","April","May","June","July","August","September","October","November","December"],short:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],narrow:["J","F","M","A","M","J","J","A","S","O","N","D"]},Ka=M(31,function(e){return String(e+1)}),$a={long:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],short:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],narrow:["S","M","T","W","T","F","S"]},Za=/^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|(?:(?:\+|-)\d{2}:\d{2}))?)?$/,Qa=function(e){function t(t){var n=e.call(this)||this;return e.prototype.setLocale.call(n,t),n.useUtcForDisplay=!("object"==typeof document&&document&&/(msie|trident)/i.test(navigator.userAgent)),n}return Object(bl.__extends)(t,e),t.prototype.getYear=function(e){return e.getFullYear()},t.prototype.getMonth=function(e){return e.getMonth()},t.prototype.getDate=function(e){return e.getDate()},t.prototype.getDayOfWeek=function(e){return e.getDay()},t.prototype.getMonthNames=function(e){var t=this;if(Ua){var n=new Intl.DateTimeFormat(this.locale,{month:e});return M(12,function(e){return t._stripDirectionalityCharacters(n.format(new Date(2017,e,1)))})}return Ga[e]},t.prototype.getDateNames=function(){var e=this;if(Ua){var t=new Intl.DateTimeFormat(this.locale,{day:"numeric"});return M(31,function(n){return e._stripDirectionalityCharacters(t.format(new Date(2017,0,n+1)))})}return Ka},t.prototype.getDayOfWeekNames=function(e){var t=this;if(Ua){var n=new Intl.DateTimeFormat(this.locale,{weekday:e});return M(7,function(e){return t._stripDirectionalityCharacters(n.format(new Date(2017,0,e+1)))})}return $a[e]},t.prototype.getYearName=function(e){if(Ua){var t=new Intl.DateTimeFormat(this.locale,{year:"numeric"});return this._stripDirectionalityCharacters(t.format(e))}return String(this.getYear(e))},t.prototype.getFirstDayOfWeek=function(){return 0},t.prototype.getNumDaysInMonth=function(e){return this.getDate(this._createDateWithOverflow(this.getYear(e),this.getMonth(e)+1,0))},t.prototype.clone=function(e){return this.createDate(this.getYear(e),this.getMonth(e),this.getDate(e))},t.prototype.createDate=function(e,t,n){if(t<0||t>11)throw Error('Invalid month index "'+t+'". Month index has to be between 0 and 11.');if(n<1)throw Error('Invalid date "'+n+'". Date has to be greater than 0.');var r=this._createDateWithOverflow(e,t,n);if(r.getMonth()!=t)throw Error('Invalid date "'+n+'" for month with index "'+t+'".');return r},t.prototype.today=function(){return new Date},t.prototype.parse=function(e){return"number"==typeof e?new Date(e):e?new Date(Date.parse(e)):null},t.prototype.format=function(e,t){if(!this.isValid(e))throw Error("NativeDateAdapter: Cannot format invalid date.");if(Ua){this.useUtcForDisplay&&(e=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())),t=Object(bl.__assign)({},t,{timeZone:"utc"}));var n=new Intl.DateTimeFormat(this.locale,t);return this._stripDirectionalityCharacters(n.format(e))}return this._stripDirectionalityCharacters(e.toDateString())},t.prototype.addCalendarYears=function(e,t){return this.addCalendarMonths(e,12*t)},t.prototype.addCalendarMonths=function(e,t){var n=this._createDateWithOverflow(this.getYear(e),this.getMonth(e)+t,this.getDate(e));return this.getMonth(n)!=((this.getMonth(e)+t)%12+12)%12&&(n=this._createDateWithOverflow(this.getYear(n),this.getMonth(n),0)),n},t.prototype.addCalendarDays=function(e,t){return this._createDateWithOverflow(this.getYear(e),this.getMonth(e),this.getDate(e)+t)},t.prototype.toIso8601=function(e){return[e.getUTCFullYear(),this._2digit(e.getUTCMonth()+1),this._2digit(e.getUTCDate())].join("-")},t.prototype.deserialize=function(t){if("string"==typeof t){if(!t)return null;if(Za.test(t)){var n=new Date(t);if(this.isValid(n))return n}}return e.prototype.deserialize.call(this,t)},t.prototype.isDateInstance=function(e){return e instanceof Date},t.prototype.isValid=function(e){return!isNaN(e.getTime())},t.prototype.invalid=function(){return new Date(NaN)},t.prototype._createDateWithOverflow=function(e,t,n){var r=new Date(e,t,n);return e>=0&&e<100&&r.setFullYear(this.getYear(r)-1900),r},t.prototype._2digit=function(e){return("00"+e).slice(-2)},t.prototype._stripDirectionalityCharacters=function(e){return e.replace(/[\u200e\u200f]/g,"")},t}(Wa),Ya={parse:{dateInput:null},display:{dateInput:{year:"numeric",month:"numeric",day:"numeric"},monthYearLabel:{year:"numeric",month:"short"},dateA11yLabel:{year:"numeric",month:"long",day:"numeric"},monthYearA11yLabel:{year:"numeric",month:"long"}}},Xa=function(){},Ja=function(){},es=function(){function e(){}return e.prototype.isErrorState=function(e,t){return!!(e&&e.invalid&&(e.touched||t&&t.submitted))},e}(),ts=new al.InjectionToken("MAT_HAMMER_OPTIONS"),ns=function(e){function t(t,n){var r=e.call(this)||this;return r._hammerOptions=t,r._hammer="undefined"!=typeof window?window.Hammer:null,r.events=r._hammer?["longpress","slide","slidestart","slideend","slideright","slideleft"]:[],n&&n._checkHammerIsAvailable(),r}return Object(bl.__extends)(t,e),t.prototype.buildHammer=function(e){var t=new this._hammer(e,this._hammerOptions||void 0),n=new this._hammer.Pan,r=new this._hammer.Swipe,i=new this._hammer.Press,o=this._createRecognizer(n,{event:"slide",threshold:0},r),l=this._createRecognizer(i,{event:"longpress",time:500});return n.recognizeWith(r),t.add([r,i,n,o,l]),t},t.prototype._createRecognizer=function(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];var i=new e.constructor(t);return n.push(e),n.forEach(function(e){return i.recognizeWith(e)}),i},t}(Va.g),rs=function(){},is=function(){var e={FADING_IN:0,VISIBLE:1,FADING_OUT:2,HIDDEN:3};return e[e.FADING_IN]="FADING_IN",e[e.VISIBLE]="VISIBLE",e[e.FADING_OUT]="FADING_OUT",e[e.HIDDEN]="HIDDEN",e}(),os=function(){function e(e,t,n){this._renderer=e,this.element=t,this.config=n,this.state=is.HIDDEN}return e.prototype.fadeOut=function(){this._renderer.fadeOutRipple(this)},e}(),ls=function(){function e(e,t,n){this._ngZone=t,this._isPointerDown=!1,this._triggerEvents=new Map,this._activeRipples=new Set,this.rippleConfig={},this.rippleDisabled=!1,n.isBrowser&&(this._containerElement=e.nativeElement,this._triggerEvents.set("mousedown",this.onMousedown.bind(this)),this._triggerEvents.set("mouseup",this.onPointerUp.bind(this)),this._triggerEvents.set("mouseleave",this.onPointerUp.bind(this)),this._triggerEvents.set("touchstart",this.onTouchStart.bind(this)),this._triggerEvents.set("touchend",this.onPointerUp.bind(this)),this.setTriggerElement(this._containerElement))}return e.prototype.fadeInRipple=function(e,t,n){var r=this;void 0===n&&(n={});var i=this._containerElement.getBoundingClientRect();n.centered&&(e=i.left+i.width/2,t=i.top+i.height/2);var o=n.radius||function(e,t,n){var r=Math.max(Math.abs(e-n.left),Math.abs(e-n.right)),i=Math.max(Math.abs(t-n.top),Math.abs(t-n.bottom));return Math.sqrt(r*r+i*i)}(e,t,i),l=450/(n.speedFactor||1),a=e-i.left,s=t-i.top,u=document.createElement("div");u.classList.add("mat-ripple-element"),u.style.left=a-o+"px",u.style.top=s-o+"px",u.style.height=2*o+"px",u.style.width=2*o+"px",u.style.backgroundColor=n.color||null,u.style.transitionDuration=l+"ms",this._containerElement.appendChild(u),function(e){window.getComputedStyle(e).getPropertyValue("opacity")}(u),u.style.transform="scale(1)";var c=new os(this,u,n);return c.state=is.FADING_IN,this._activeRipples.add(c),this.runTimeoutOutsideZone(function(){c.state=is.VISIBLE,n.persistent||r._isPointerDown||c.fadeOut()},l),c},e.prototype.fadeOutRipple=function(e){if(this._activeRipples.delete(e)){var t=e.element;t.style.transitionDuration="400ms",t.style.opacity="0",e.state=is.FADING_OUT,this.runTimeoutOutsideZone(function(){e.state=is.HIDDEN,t.parentNode.removeChild(t)},400)}},e.prototype.fadeOutAll=function(){this._activeRipples.forEach(function(e){return e.fadeOut()})},e.prototype.setTriggerElement=function(e){var t=this;this._triggerElement&&this._triggerEvents.forEach(function(e,n){t._triggerElement.removeEventListener(n,e)}),e&&this._ngZone.runOutsideAngular(function(){t._triggerEvents.forEach(function(t,n){return e.addEventListener(n,t)})}),this._triggerElement=e},e.prototype.onMousedown=function(e){var t=this._lastTouchStartEvent&&Date.now()<this._lastTouchStartEvent+800;this.rippleDisabled||t||(this._isPointerDown=!0,this.fadeInRipple(e.clientX,e.clientY,this.rippleConfig))},e.prototype.onTouchStart=function(e){this.rippleDisabled||(this._lastTouchStartEvent=Date.now(),this._isPointerDown=!0,this.fadeInRipple(e.touches[0].clientX,e.touches[0].clientY,this.rippleConfig))},e.prototype.onPointerUp=function(){this._isPointerDown&&(this._isPointerDown=!1,this._activeRipples.forEach(function(e){e.config.persistent||e.state!==is.VISIBLE||e.fadeOut()}))},e.prototype.runTimeoutOutsideZone=function(e,t){void 0===t&&(t=0),this._ngZone.runOutsideAngular(function(){return setTimeout(e,t)})},e}(),as=new al.InjectionToken("mat-ripple-global-options"),ss=function(){function e(e,t,n,r){this.radius=0,this.speedFactor=1,this._rippleRenderer=new ls(e,t,n),this._globalOptions=r||{},this._updateRippleRenderer()}return e.prototype.ngOnChanges=function(e){e.trigger&&this.trigger&&this._rippleRenderer.setTriggerElement(this.trigger),this._updateRippleRenderer()},e.prototype.ngOnDestroy=function(){this._rippleRenderer.setTriggerElement(null)},e.prototype.launch=function(e,t,n){return void 0===n&&(n=this.rippleConfig),this._rippleRenderer.fadeInRipple(e,t,n)},e.prototype.fadeOutAll=function(){this._rippleRenderer.fadeOutAll()},Object.defineProperty(e.prototype,"rippleConfig",{get:function(){return{centered:this.centered,speedFactor:this.speedFactor*(this._globalOptions.baseSpeedFactor||1),radius:this.radius,color:this.color}},enumerable:!0,configurable:!0}),e.prototype._updateRippleRenderer=function(){this._rippleRenderer.rippleDisabled=this._globalOptions.disabled||this.disabled,this._rippleRenderer.rippleConfig=this.rippleConfig},e}(),us=function(){},cs=function(){},ds=function(){},ps=new al.InjectionToken("mat-label-global-options"),fs=function(e){function t(t){e.call(this),this.observableFactory=t}return Object(bl.__extends)(t,e),t.create=function(e){return new t(e)},t.prototype._subscribe=function(e){return new hs(e,this.observableFactory)},t}(gl.a),hs=function(e){function t(t,n){e.call(this,t),this.factory=n,this.tryDefer()}return Object(bl.__extends)(t,e),t.prototype.tryDefer=function(){try{this._callFactory()}catch(e){this._error(e)}},t.prototype._callFactory=function(){var e=this.factory();e&&this.add(Object(Dl.a)(this,e))},t}(kl.a),ms=fs.create,gs=n("8Ut3"),ys=n("kQVV"),vs=n("mHG6"),bs=n("KRwF"),_s=n("xIGM"),ws=n("X3fp"),xs=function(e){function t(t,n){if(e.call(this),this.scheduler=n,null==t)throw new Error("iterator cannot be null.");this.iterator=function(e){var t=e[ws.a];if(!t&&"string"==typeof e)return new Cs(e);if(!t&&void 0!==e.length)return new Es(e);if(!t)throw new TypeError("object is not iterable");return e[ws.a]()}(t)}return Object(bl.__extends)(t,e),t.create=function(e,n){return new t(e,n)},t.dispatch=function(e){var t=e.index,n=e.iterator,r=e.subscriber;if(e.hasError)r.error(e.error);else{var i=n.next();i.done?r.complete():(r.next(i.value),e.index=t+1,r.closed?"function"==typeof n.return&&n.return():this.schedule(e))}},t.prototype._subscribe=function(e){var n=this.iterator,r=this.scheduler;if(r)return r.schedule(t.dispatch,0,{index:0,iterator:n,subscriber:e});for(;;){var i=n.next();if(i.done){e.complete();break}if(e.next(i.value),e.closed){"function"==typeof n.return&&n.return();break}}},t}(gl.a),Cs=function(){function e(e,t,n){void 0===t&&(t=0),void 0===n&&(n=e.length),this.str=e,this.idx=t,this.len=n}return e.prototype[ws.a]=function(){return this},e.prototype.next=function(){return this.idx<this.len?{done:!1,value:this.str.charAt(this.idx++)}:{done:!0,value:void 0}},e}(),Es=function(){function e(e,t,n){void 0===t&&(t=0),void 0===n&&(n=function(t){var n=+e.length;return isNaN(n)?0:0!==n&&"number"==typeof n&&_s.a.isFinite(n)?(n=function(e){var t=+n;return 0===t?t:isNaN(t)?t:t<0?-1:1}()*Math.floor(Math.abs(n)))<=0?0:n>Ss?Ss:n:n}()),this.arr=e,this.idx=t,this.len=n}return e.prototype[ws.a]=function(){return this},e.prototype.next=function(){return this.idx<this.len?{done:!1,value:this.arr[this.idx++]}:{done:!0,value:void 0}},e}(),Ss=Math.pow(2,53)-1,Os=function(e){function t(t,n){e.call(this),this.arrayLike=t,this.scheduler=n,n||1!==t.length||(this._isScalar=!0,this.value=t[0])}return Object(bl.__extends)(t,e),t.create=function(e,n){var r=e.length;return 0===r?new Jl.a:1===r?new gs.a(e[0],n):new t(e,n)},t.dispatch=function(e){var t=e.arrayLike,n=e.index,r=e.subscriber;r.closed||(n>=e.length?r.complete():(r.next(t[n]),e.index=n+1,this.schedule(e)))},t.prototype._subscribe=function(e){var n=this.arrayLike,r=this.scheduler,i=n.length;if(r)return r.schedule(t.dispatch,0,{arrayLike:n,index:0,length:i,subscriber:e});for(var o=0;o<i&&!e.closed;o++)e.next(n[o]);e.complete()},t}(gl.a),Ts=n("YRqN"),ks=n("mz3w"),Ds=function(e){function t(t,n){e.call(this,null),this.ish=t,this.scheduler=n}return Object(bl.__extends)(t,e),t.create=function(e,n){if(null!=e){if("function"==typeof e[ks.a])return e instanceof gl.a&&!n?e:new t(e,n);if(Object(Ml.a)(e))return new yl.a(e,n);if(Object(vs.a)(e))return new bs.a(e,n);if("function"==typeof e[ws.a]||"string"==typeof e)return new xs(e,n);if(Object(ys.a)(e))return new Os(e,n)}throw new TypeError((null!==e&&typeof e||e)+" is not observable")},t.prototype._subscribe=function(e){var t=this.ish,n=this.scheduler;return null==n?t[ks.a]().subscribe(e):t[ks.a]().subscribe(new Ts.a(e,n,0))},t}(gl.a).create,Is=n("bywS"),Rs=n("fAeS"),Ms=function(e){function t(t,n,r,i){var o=e.call(this)||this;return o._elementRef=t,o._focusTrapFactory=n,o._changeDetectorRef=r,o._document=i,o._elementFocusedBeforeDialogWasOpened=null,o._state="enter",o._animationStateChanged=new al.EventEmitter,o._ariaLabelledBy=null,o}return Object(bl.__extends)(t,e),t.prototype.attachComponentPortal=function(e){return this._portalOutlet.hasAttached()&&N(),this._savePreviouslyFocusedElement(),this._portalOutlet.attachComponentPortal(e)},t.prototype.attachTemplatePortal=function(e){return this._portalOutlet.hasAttached()&&N(),this._savePreviouslyFocusedElement(),this._portalOutlet.attachTemplatePortal(e)},t.prototype._trapFocus=function(){this._focusTrap||(this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement)),this._config.autoFocus&&this._focusTrap.focusInitialElementWhenReady()},t.prototype._restoreFocus=function(){var e=this._elementFocusedBeforeDialogWasOpened;e&&"function"==typeof e.focus&&e.focus(),this._focusTrap&&this._focusTrap.destroy()},t.prototype._savePreviouslyFocusedElement=function(){var e=this;this._document&&(this._elementFocusedBeforeDialogWasOpened=this._document.activeElement,Promise.resolve().then(function(){return e._elementRef.nativeElement.focus()}))},t.prototype._onAnimationDone=function(e){"enter"===e.toState?this._trapFocus():"exit"===e.toState&&this._restoreFocus(),this._animationStateChanged.emit(e)},t.prototype._onAnimationStart=function(e){this._animationStateChanged.emit(e)},t.prototype._startExitAnimation=function(){this._state="exit",this._changeDetectorRef.markForCheck()},t}(Gl),Ps=0,Ns=function(){function e(e,t,n){void 0===n&&(n="mat-dialog-"+Ps++);var r=this;this._overlayRef=e,this._containerInstance=t,this.id=n,this.disableClose=this._containerInstance._config.disableClose,this._afterOpen=new ml.Subject,this._afterClosed=new ml.Subject,this._beforeClose=new ml.Subject,t._animationStateChanged.pipe(Object(Al.a)(function(e){return"done"===e.phaseName&&"enter"===e.toState}),u(1)).subscribe(function(){r._afterOpen.next(),r._afterOpen.complete()}),t._animationStateChanged.pipe(Object(Al.a)(function(e){return"done"===e.phaseName&&"exit"===e.toState}),u(1)).subscribe(function(){r._overlayRef.dispose(),r._afterClosed.next(r._result),r._afterClosed.complete(),r.componentInstance=null})}return e.prototype.close=function(e){var t=this;this._result=e,this._containerInstance._animationStateChanged.pipe(Object(Al.a)(function(e){return"start"===e.phaseName}),u(1)).subscribe(function(){t._beforeClose.next(e),t._beforeClose.complete(),t._overlayRef.detachBackdrop()}),this._containerInstance._startExitAnimation()},e.prototype.afterOpen=function(){return this._afterOpen.asObservable()},e.prototype.afterClosed=function(){return this._afterClosed.asObservable()},e.prototype.beforeClose=function(){return this._beforeClose.asObservable()},e.prototype.backdropClick=function(){return this._overlayRef.backdropClick()},e.prototype.keydownEvents=function(){return this._overlayRef.keydownEvents()},e.prototype.updatePosition=function(e){var t=this._getPositionStrategy();return e&&(e.left||e.right)?e.left?t.left(e.left):t.right(e.right):t.centerHorizontally(),e&&(e.top||e.bottom)?e.top?t.top(e.top):t.bottom(e.bottom):t.centerVertically(),this._overlayRef.updatePosition(),this},e.prototype.updateSize=function(e,t){return void 0===e&&(e="auto"),void 0===t&&(t="auto"),this._getPositionStrategy().width(e).height(t),this._overlayRef.updatePosition(),this},e.prototype._getPositionStrategy=function(){return this._overlayRef.getConfig().positionStrategy},e}(),As=new al.InjectionToken("MatDialogData"),Ls=new al.InjectionToken("mat-dialog-scroll-strategy"),Fs=function(){function e(e,t,n,r,i){var o=this;this._overlay=e,this._injector=t,this._scrollStrategy=r,this._parentDialog=i,this._openDialogsAtThisLevel=[],this._afterAllClosedAtThisLevel=new ml.Subject,this._afterOpenAtThisLevel=new ml.Subject,this.afterAllClosed=ms(function(){return o.openDialogs.length?o._afterAllClosed:o._afterAllClosed.pipe(P(void 0))}),!i&&n&&n.subscribe(function(){return o.closeAll()})}return Object.defineProperty(e.prototype,"openDialogs",{get:function(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"afterOpen",{get:function(){return this._parentDialog?this._parentDialog.afterOpen:this._afterOpenAtThisLevel},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_afterAllClosed",{get:function(){var e=this._parentDialog;return e?e._afterAllClosed:this._afterAllClosedAtThisLevel},enumerable:!0,configurable:!0}),e.prototype.open=function(e,t){var n=this;if((t=function(e){return Object(bl.__assign)({},new function(){this.role="dialog",this.panelClass="",this.hasBackdrop=!0,this.backdropClass="",this.disableClose=!1,this.width="",this.height="",this.maxWidth="80vw",this.data=null,this.direction="ltr",this.ariaDescribedBy=null,this.ariaLabel=null,this.autoFocus=!0},e)}(t)).id&&this.getDialogById(t.id))throw Error('Dialog with id "'+t.id+'" exists already. The dialog id must be unique.');var r=this._createOverlay(t),i=this._attachDialogContainer(r,t),o=this._attachDialogContent(e,i,r,t);return this.openDialogs.push(o),o.afterClosed().subscribe(function(){return n._removeOpenDialog(o)}),this.afterOpen.next(o),o},e.prototype.closeAll=function(){for(var e=this.openDialogs.length;e--;)this.openDialogs[e].close()},e.prototype.getDialogById=function(e){return this.openDialogs.find(function(t){return t.id===e})},e.prototype._createOverlay=function(e){var t=this._getOverlayConfig(e);return this._overlay.create(t)},e.prototype._getOverlayConfig=function(e){var t=new ra({positionStrategy:this._overlay.position().global(),scrollStrategy:this._scrollStrategy(),panelClass:e.panelClass,hasBackdrop:e.hasBackdrop,direction:e.direction,minWidth:e.minWidth,minHeight:e.minHeight,maxWidth:e.maxWidth,maxHeight:e.maxHeight});return e.backdropClass&&(t.backdropClass=e.backdropClass),t},e.prototype._attachDialogContainer=function(e,t){var n=new ql(Ms,t.viewContainerRef),r=e.attach(n);return r.instance._config=t,r.instance},e.prototype._attachDialogContent=function(e,t,n,r){var i=new Ns(n,t,r.id);if(r.hasBackdrop&&n.backdropClick().subscribe(function(){i.disableClose||i.close()}),n.keydownEvents().pipe(Object(Al.a)(function(e){return 27===e.keyCode&&!i.disableClose})).subscribe(function(){return i.close()}),e instanceof al.TemplateRef)t.attachTemplatePortal(new Ul(e,null,{$implicit:r.data,dialogRef:i}));else{var o=this._createInjector(r,i,t),l=t.attachComponentPortal(new ql(e,void 0,o));i.componentInstance=l.instance}return i.updateSize(r.width,r.height).updatePosition(r.position),i},e.prototype._createInjector=function(e,t,n){var r=e&&e.viewContainerRef&&e.viewContainerRef.injector,i=new WeakMap;return i.set(Ns,t),i.set(Ms,n),i.set(As,e.data),i.set(Bl,{value:e.direction,change:vl()}),new Ql(r||this._injector,i)},e.prototype._removeOpenDialog=function(e){var t=this.openDialogs.indexOf(e);t>-1&&(this.openDialogs.splice(t,1),this.openDialogs.length||this._afterAllClosed.next())},e}(),js=0,Vs=function(){function e(e){this.dialogRef=e,this.ariaLabel="Close dialog"}return e.prototype.ngOnChanges=function(e){var t=e._matDialogClose||e._matDialogCloseResult;t&&(this.dialogResult=t.currentValue)},e}(),zs=function(){function e(e){this._container=e,this.id="mat-dialog-title-"+js++}return e.prototype.ngOnInit=function(){var e=this;this._container&&!this._container._ariaLabelledBy&&Promise.resolve().then(function(){return e._container._ariaLabelledBy=e.id})},e}(),Bs=function(){},Hs=function(){},Ws=function(){},qs=al["\u0275crt"]({encapsulation:2,styles:[".mat-dialog-container{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12);display:block;padding:24px;border-radius:2px;box-sizing:border-box;overflow:auto;outline:0;width:100%;height:100%}@media screen and (-ms-high-contrast:active){.mat-dialog-container{outline:solid 1px}}.mat-dialog-content{display:block;margin:0 -24px;padding:0 24px;max-height:65vh;overflow:auto;-webkit-overflow-scrolling:touch;-webkit-backface-visibility:hidden;backface-visibility:hidden}.mat-dialog-title{margin:0 0 20px;display:block}.mat-dialog-actions{padding:12px 0;display:flex;flex-wrap:wrap}.mat-dialog-actions:last-child{margin-bottom:-24px}.mat-dialog-actions[align=end]{justify-content:flex-end}.mat-dialog-actions[align=center]{justify-content:center}.mat-dialog-actions .mat-button+.mat-button,.mat-dialog-actions .mat-button+.mat-raised-button,.mat-dialog-actions .mat-raised-button+.mat-button,.mat-dialog-actions .mat-raised-button+.mat-raised-button{margin-left:8px}[dir=rtl] .mat-dialog-actions .mat-button+.mat-button,[dir=rtl] .mat-dialog-actions .mat-button+.mat-raised-button,[dir=rtl] .mat-dialog-actions .mat-raised-button+.mat-button,[dir=rtl] .mat-dialog-actions .mat-raised-button+.mat-raised-button{margin-left:0;margin-right:8px}"],data:{animation:[{type:7,name:"slideDialog",definitions:[{type:0,name:"enter",styles:{type:6,styles:{transform:"none",opacity:1},offset:null},options:void 0},{type:0,name:"void",styles:{type:6,styles:{transform:"translate3d(0, 25%, 0) scale(0.9)",opacity:0},offset:null},options:void 0},{type:0,name:"exit",styles:{type:6,styles:{transform:"translate3d(0, 25%, 0)",opacity:0},offset:null},options:void 0},{type:1,expr:"* => *",animation:{type:4,styles:null,timings:"400ms cubic-bezier(0.25, 0.8, 0.25, 1)"},options:null}],options:{}}]}}),Us=al["\u0275ccf"]("mat-dialog-container",Ms,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-dialog-container",[["class","mat-dialog-container"],["tabindex","-1"]],[[1,"role",0],[1,"aria-labelledby",0],[1,"aria-label",0],[1,"aria-describedby",0],[40,"@slideDialog",0]],[["component","@slideDialog.start"],["component","@slideDialog.done"]],function(e,t,n){var r=!0;return"component:@slideDialog.start"===t&&(r=!1!==al["\u0275nov"](e,1)._onAnimationStart(n)&&r),"component:@slideDialog.done"===t&&(r=!1!==al["\u0275nov"](e,1)._onAnimationDone(n)&&r),r},F,qs)),al["\u0275did"](1,49152,null,0,Ms,[al.ElementRef,Oa,al.ChangeDetectorRef,[2,cl.DOCUMENT]],null,null)],null,function(e,t){e(t,0,0,null==al["\u0275nov"](t,1)._config?null:al["\u0275nov"](t,1)._config.role,null!=al["\u0275nov"](t,1)._config&&al["\u0275nov"](t,1)._config.ariaLabel?null:al["\u0275nov"](t,1)._ariaLabelledBy,null==al["\u0275nov"](t,1)._config?null:al["\u0275nov"](t,1)._config.ariaLabel,(null==al["\u0275nov"](t,1)._config?null:al["\u0275nov"](t,1)._config.ariaDescribedBy)||null,al["\u0275nov"](t,1)._state)})},{},{},[]),Gs=function(){},Ks=function(){},$s=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i._platform=n,i._focusMonitor=r,i._isRoundButton=i._hasHostAttributes("mat-fab","mat-mini-fab"),i._isIconButton=i._hasHostAttributes("mat-icon-button"),i._focusMonitor.monitor(i._elementRef.nativeElement,!0),i}return Object(bl.__extends)(t,e),t.prototype.ngOnDestroy=function(){this._focusMonitor.stopMonitoring(this._elementRef.nativeElement)},t.prototype.focus=function(){this._getHostElement().focus()},t.prototype._getHostElement=function(){return this._elementRef.nativeElement},t.prototype._isRippleDisabled=function(){return this.disableRipple||this.disabled},t.prototype._hasHostAttributes=function(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return!!this._platform.isBrowser&&t.some(function(t){return e._getHostElement().hasAttribute(t)})},t}(I(D(R(function(e){this._elementRef=e})))),Zs=function(e){function t(t,n,r){return e.call(this,r,t,n)||this}return Object(bl.__extends)(t,e),t.prototype._haltDisabledEvents=function(e){this.disabled&&(e.preventDefault(),e.stopImmediatePropagation())},t}($s),Qs=function(){},Ys=function(){function e(e){this.selector=e}return e.prototype.call=function(e,t){return t.subscribe(new Xs(e,this.selector,this.caught))},e}(),Xs=function(e){function t(t,n,r){e.call(this,t),this.selector=n,this.caught=r}return Object(bl.__extends)(t,e),t.prototype.error=function(t){if(!this.isStopped){var n=void 0;try{n=this.selector(t,this.caught)}catch(t){return void e.prototype.error.call(this,t)}this._unsubscribeAndRecycle(),this.add(Object(Dl.a)(this,n))}},t}(kl.a),Js=function(){function e(e){this.callback=e}return e.prototype.call=function(e,t){return t.subscribe(new eu(e,this.callback))},e}(),eu=function(e){function t(t,n){e.call(this,t),this.add(new Cl.a(n))}return Object(bl.__extends)(t,e),t}(Yl.a),tu=n("eIqN"),nu=n("wP3s"),ru=n("6S6c"),iu=n("dmC+"),ou=function(){},lu=function(){},au=function(){function e(e){var t=this;this.normalizedNames=new Map,this.lazyUpdate=null,e?this.lazyInit="string"==typeof e?function(){t.headers=new Map,e.split("\n").forEach(function(e){var n=e.indexOf(":");if(n>0){var r=e.slice(0,n),i=r.toLowerCase(),o=e.slice(n+1).trim();t.maybeSetNormalizedName(r,i),t.headers.has(i)?t.headers.get(i).push(o):t.headers.set(i,[o])}})}:function(){t.headers=new Map,Object.keys(e).forEach(function(n){var r=e[n],i=n.toLowerCase();"string"==typeof r&&(r=[r]),r.length>0&&(t.headers.set(i,r),t.maybeSetNormalizedName(n,i))})}:this.headers=new Map}return e.prototype.has=function(e){return this.init(),this.headers.has(e.toLowerCase())},e.prototype.get=function(e){this.init();var t=this.headers.get(e.toLowerCase());return t&&t.length>0?t[0]:null},e.prototype.keys=function(){return this.init(),Array.from(this.normalizedNames.values())},e.prototype.getAll=function(e){return this.init(),this.headers.get(e.toLowerCase())||null},e.prototype.append=function(e,t){return this.clone({name:e,value:t,op:"a"})},e.prototype.set=function(e,t){return this.clone({name:e,value:t,op:"s"})},e.prototype.delete=function(e,t){return this.clone({name:e,value:t,op:"d"})},e.prototype.maybeSetNormalizedName=function(e,t){this.normalizedNames.has(t)||this.normalizedNames.set(t,e)},e.prototype.init=function(){var t=this;this.lazyInit&&(this.lazyInit instanceof e?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(function(e){return t.applyUpdate(e)}),this.lazyUpdate=null))},e.prototype.copyFrom=function(e){var t=this;e.init(),Array.from(e.headers.keys()).forEach(function(n){t.headers.set(n,e.headers.get(n)),t.normalizedNames.set(n,e.normalizedNames.get(n))})},e.prototype.clone=function(t){var n=new e;return n.lazyInit=this.lazyInit&&this.lazyInit instanceof e?this.lazyInit:this,n.lazyUpdate=(this.lazyUpdate||[]).concat([t]),n},e.prototype.applyUpdate=function(e){var t=e.name.toLowerCase();switch(e.op){case"a":case"s":var n=e.value;if("string"==typeof n&&(n=[n]),0===n.length)return;this.maybeSetNormalizedName(e.name,t);var r=("a"===e.op?this.headers.get(t):void 0)||[];r.push.apply(r,n),this.headers.set(t,r);break;case"d":var i=e.value;if(i){var o=this.headers.get(t);if(!o)return;0===(o=o.filter(function(e){return-1===i.indexOf(e)})).length?(this.headers.delete(t),this.normalizedNames.delete(t)):this.headers.set(t,o)}else this.headers.delete(t),this.normalizedNames.delete(t)}},e.prototype.forEach=function(e){var t=this;this.init(),Array.from(this.normalizedNames.keys()).forEach(function(n){return e(t.normalizedNames.get(n),t.headers.get(n))})},e}(),su=function(){function e(){}return e.prototype.encodeKey=function(e){return V(e)},e.prototype.encodeValue=function(e){return V(e)},e.prototype.decodeKey=function(e){return decodeURIComponent(e)},e.prototype.decodeValue=function(e){return decodeURIComponent(e)},e}(),uu=function(){function e(e){void 0===e&&(e={});var t=this;if(this.updates=null,this.cloneFrom=null,this.encoder=e.encoder||new su,e.fromString){if(e.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function(e,t){var n=new Map;return e.length>0&&e.split("&").forEach(function(e){var r=e.indexOf("="),i=-1==r?[t.decodeKey(e),""]:[t.decodeKey(e.slice(0,r)),t.decodeValue(e.slice(r+1))],o=i[0],l=i[1],a=n.get(o)||[];a.push(l),n.set(o,a)}),n}(e.fromString,this.encoder)}else e.fromObject?(this.map=new Map,Object.keys(e.fromObject).forEach(function(n){var r=e.fromObject[n];t.map.set(n,Array.isArray(r)?r:[r])})):this.map=null}return e.prototype.has=function(e){return this.init(),this.map.has(e)},e.prototype.get=function(e){this.init();var t=this.map.get(e);return t?t[0]:null},e.prototype.getAll=function(e){return this.init(),this.map.get(e)||null},e.prototype.keys=function(){return this.init(),Array.from(this.map.keys())},e.prototype.append=function(e,t){return this.clone({param:e,value:t,op:"a"})},e.prototype.set=function(e,t){return this.clone({param:e,value:t,op:"s"})},e.prototype.delete=function(e,t){return this.clone({param:e,value:t,op:"d"})},e.prototype.toString=function(){var e=this;return this.init(),this.keys().map(function(t){var n=e.encoder.encodeKey(t);return e.map.get(t).map(function(t){return n+"="+e.encoder.encodeValue(t)}).join("&")}).join("&")},e.prototype.clone=function(t){var n=new e({encoder:this.encoder});return n.cloneFrom=this.cloneFrom||this,n.updates=(this.updates||[]).concat([t]),n},e.prototype.init=function(){var e=this;null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(function(t){return e.map.set(t,e.cloneFrom.map.get(t))}),this.updates.forEach(function(t){switch(t.op){case"a":case"s":var n=("a"===t.op?e.map.get(t.param):void 0)||[];n.push(t.value),e.map.set(t.param,n);break;case"d":if(void 0===t.value){e.map.delete(t.param);break}var r=e.map.get(t.param)||[],i=r.indexOf(t.value);-1!==i&&r.splice(i,1),r.length>0?e.map.set(t.param,r):e.map.delete(t.param)}}),this.cloneFrom=null)},e}(),cu=function(){function e(e,t,n,r){this.url=t,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=e.toUpperCase();var i;if(function(e){switch(e){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||r?(this.body=void 0!==n?n:null,i=r):i=n,i&&(this.reportProgress=!!i.reportProgress,this.withCredentials=!!i.withCredentials,i.responseType&&(this.responseType=i.responseType),i.headers&&(this.headers=i.headers),i.params&&(this.params=i.params)),this.headers||(this.headers=new au),this.params){var o=this.params.toString();if(0===o.length)this.urlWithParams=t;else{var l=t.indexOf("?");this.urlWithParams=t+(-1===l?"?":l<t.length-1?"&":"")+o}}else this.params=new uu,this.urlWithParams=t}return e.prototype.serializeBody=function(){return null===this.body?null:z(this.body)||B(this.body)||H(this.body)||"string"==typeof this.body?this.body:this.body instanceof uu?this.body.toString():"object"==typeof this.body||"boolean"==typeof this.body||Array.isArray(this.body)?JSON.stringify(this.body):this.body.toString()},e.prototype.detectContentTypeHeader=function(){return null===this.body?null:H(this.body)?null:B(this.body)?this.body.type||null:z(this.body)?null:"string"==typeof this.body?"text/plain":this.body instanceof uu?"application/x-www-form-urlencoded;charset=UTF-8":"object"==typeof this.body||"number"==typeof this.body||Array.isArray(this.body)?"application/json":null},e.prototype.clone=function(t){void 0===t&&(t={});var n=t.method||this.method,r=t.url||this.url,i=t.responseType||this.responseType,o=void 0!==t.body?t.body:this.body,l=void 0!==t.withCredentials?t.withCredentials:this.withCredentials,a=void 0!==t.reportProgress?t.reportProgress:this.reportProgress,s=t.headers||this.headers,u=t.params||this.params;return void 0!==t.setHeaders&&(s=Object.keys(t.setHeaders).reduce(function(e,n){return e.set(n,t.setHeaders[n])},s)),t.setParams&&(u=Object.keys(t.setParams).reduce(function(e,n){return e.set(n,t.setParams[n])},u)),new e(n,r,o,{params:u,headers:s,reportProgress:a,responseType:i,withCredentials:l})},e}(),du=function(){var e={Sent:0,UploadProgress:1,ResponseHeader:2,DownloadProgress:3,Response:4,User:5};return e[e.Sent]="Sent",e[e.UploadProgress]="UploadProgress",e[e.ResponseHeader]="ResponseHeader",e[e.DownloadProgress]="DownloadProgress",e[e.Response]="Response",e[e.User]="User",e}(),pu=function(){return function(e,t,n){void 0===t&&(t=200),void 0===n&&(n="OK"),this.headers=e.headers||new au,this.status=void 0!==e.status?e.status:t,this.statusText=e.statusText||n,this.url=e.url||null,this.ok=this.status>=200&&this.status<300}}(),fu=function(e){function t(t){void 0===t&&(t={});var n=e.call(this,t)||this;return n.type=du.ResponseHeader,n}return Object(bl.__extends)(t,e),t.prototype.clone=function(e){return void 0===e&&(e={}),new t({headers:e.headers||this.headers,status:void 0!==e.status?e.status:this.status,statusText:e.statusText||this.statusText,url:e.url||this.url||void 0})},t}(pu),hu=function(e){function t(t){void 0===t&&(t={});var n=e.call(this,t)||this;return n.type=du.Response,n.body=void 0!==t.body?t.body:null,n}return Object(bl.__extends)(t,e),t.prototype.clone=function(e){return void 0===e&&(e={}),new t({body:void 0!==e.body?e.body:this.body,headers:e.headers||this.headers,status:void 0!==e.status?e.status:this.status,statusText:e.statusText||this.statusText,url:e.url||this.url||void 0})},t}(pu),mu=function(e){function t(t){var n=e.call(this,t,0,"Unknown Error")||this;return n.name="HttpErrorResponse",n.ok=!1,n.message=n.status>=200&&n.status<300?"Http failure during parsing for "+(t.url||"(unknown url)"):"Http failure response for "+(t.url||"(unknown url)")+": "+t.status+" "+t.statusText,n.error=t.error||null,n}return Object(bl.__extends)(t,e),t}(pu),gu=function(){function e(e){this.handler=e}return e.prototype.request=function(e,t,n){var r=this;void 0===n&&(n={});var i;if(e instanceof cu)i=e;else{var o=void 0;o=n.headers instanceof au?n.headers:new au(n.headers);var l=void 0;n.params&&(l=n.params instanceof uu?n.params:new uu({fromObject:n.params})),i=new cu(e,t,void 0!==n.body?n.body:null,{headers:o,params:l,reportProgress:n.reportProgress,responseType:n.responseType||"json",withCredentials:n.withCredentials})}var a=function(e,t){return function(e,t){return Object(nu.a)(e,t,1)}(e,t)(this)}.call(vl(i),function(e){return r.handler.handle(e)});if(e instanceof cu||"events"===n.observe)return a;var s=ru.a.call(a,function(e){return e instanceof hu});switch(n.observe||"body"){case"body":switch(i.responseType){case"arraybuffer":return iu.a.call(s,function(e){if(null!==e.body&&!(e.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return e.body});case"blob":return iu.a.call(s,function(e){if(null!==e.body&&!(e.body instanceof Blob))throw new Error("Response is not a Blob.");return e.body});case"text":return iu.a.call(s,function(e){if(null!==e.body&&"string"!=typeof e.body)throw new Error("Response is not a string.");return e.body});case"json":default:return iu.a.call(s,function(e){return e.body})}case"response":return s;default:throw new Error("Unreachable: unhandled observe type "+n.observe+"}")}},e.prototype.delete=function(e,t){return void 0===t&&(t={}),this.request("DELETE",e,t)},e.prototype.get=function(e,t){return void 0===t&&(t={}),this.request("GET",e,t)},e.prototype.head=function(e,t){return void 0===t&&(t={}),this.request("HEAD",e,t)},e.prototype.jsonp=function(e,t){return this.request("JSONP",e,{params:(new uu).append(t,"JSONP_CALLBACK"),observe:"body",responseType:"json"})},e.prototype.options=function(e,t){return void 0===t&&(t={}),this.request("OPTIONS",e,t)},e.prototype.patch=function(e,t,n){return void 0===n&&(n={}),this.request("PATCH",e,W(n,t))},e.prototype.post=function(e,t,n){return void 0===n&&(n={}),this.request("POST",e,W(n,t))},e.prototype.put=function(e,t,n){return void 0===n&&(n={}),this.request("PUT",e,W(n,t))},e}(),yu=function(){function e(e,t){this.next=e,this.interceptor=t}return e.prototype.handle=function(e){return this.interceptor.intercept(e,this.next)},e}(),vu=new al.InjectionToken("HTTP_INTERCEPTORS"),bu=function(){function e(){}return e.prototype.intercept=function(e,t){return t.handle(e)},e}(),_u=/^\)\]\}',?\n/,wu=function(){},xu=function(){function e(){}return e.prototype.build=function(){return new XMLHttpRequest},e}(),Cu=function(){function e(e){this.xhrFactory=e}return e.prototype.handle=function(e){var t=this;if("JSONP"===e.method)throw new Error("Attempted to construct Jsonp request without JsonpClientModule installed.");return new gl.a(function(n){var r=t.xhrFactory.build();if(r.open(e.method,e.urlWithParams),e.withCredentials&&(r.withCredentials=!0),e.headers.forEach(function(e,t){return r.setRequestHeader(e,t.join(","))}),e.headers.has("Accept")||r.setRequestHeader("Accept","application/json, text/plain, */*"),!e.headers.has("Content-Type")){var i=e.detectContentTypeHeader();null!==i&&r.setRequestHeader("Content-Type",i)}if(e.responseType){var o=e.responseType.toLowerCase();r.responseType="json"!==o?o:"text"}var l=e.serializeBody(),a=null,s=function(){if(null!==a)return a;var t=1223===r.status?204:r.status,n=r.statusText||"OK",i=new au(r.getAllResponseHeaders()),o=function(e){return"responseURL"in e&&e.responseURL?e.responseURL:/^X-Request-URL:/m.test(e.getAllResponseHeaders())?e.getResponseHeader("X-Request-URL"):null}(r)||e.url;return a=new fu({headers:i,status:t,statusText:n,url:o})},u=function(){var t=s(),i=t.headers,o=t.status,l=t.statusText,a=t.url,u=null;204!==o&&(u=void 0===r.response?r.responseText:r.response),0===o&&(o=u?200:0);var c=o>=200&&o<300;if("json"===e.responseType&&"string"==typeof u){var d=u;u=u.replace(_u,"");try{u=""!==u?JSON.parse(u):null}catch(e){u=d,c&&(c=!1,u={error:e,text:u})}}c?(n.next(new hu({body:u,headers:i,status:o,statusText:l,url:a||void 0})),n.complete()):n.error(new mu({error:u,headers:i,status:o,statusText:l,url:a||void 0}))},c=function(e){var t=new mu({error:e,status:r.status||0,statusText:r.statusText||"Unknown Error"});n.error(t)},d=!1,p=function(t){d||(n.next(s()),d=!0);var i={type:du.DownloadProgress,loaded:t.loaded};t.lengthComputable&&(i.total=t.total),"text"===e.responseType&&r.responseText&&(i.partialText=r.responseText),n.next(i)},f=function(e){var t={type:du.UploadProgress,loaded:e.loaded};e.lengthComputable&&(t.total=e.total),n.next(t)};return r.addEventListener("load",u),r.addEventListener("error",c),e.reportProgress&&(r.addEventListener("progress",p),null!==l&&r.upload&&r.upload.addEventListener("progress",f)),r.send(l),n.next({type:du.Sent}),function(){r.removeEventListener("error",c),r.removeEventListener("load",u),e.reportProgress&&(r.removeEventListener("progress",p),null!==l&&r.upload&&r.upload.removeEventListener("progress",f)),r.abort()}})},e}(),Eu=new al.InjectionToken("XSRF_COOKIE_NAME"),Su=new al.InjectionToken("XSRF_HEADER_NAME"),Ou=function(){},Tu=function(){function e(e,t,n){this.doc=e,this.platform=t,this.cookieName=n,this.lastCookieString="",this.lastToken=null,this.parseCount=0}return e.prototype.getToken=function(){if("server"===this.platform)return null;var e=this.doc.cookie||"";return e!==this.lastCookieString&&(this.parseCount++,this.lastToken=Object(cl["\u0275parseCookieValue"])(e,this.cookieName),this.lastCookieString=e),this.lastToken},e}(),ku=function(){function e(e,t){this.tokenService=e,this.headerName=t}return e.prototype.intercept=function(e,t){var n=e.url.toLowerCase();if("GET"===e.method||"HEAD"===e.method||n.startsWith("http://")||n.startsWith("https://"))return t.handle(e);var r=this.tokenService.getToken();return null===r||e.headers.has(this.headerName)||(e=e.clone({headers:e.headers.set(this.headerName,r)})),t.handle(e)},e}(),Du=function(){function e(){}return e.disable=function(){return{ngModule:e,providers:[{provide:ku,useClass:bu}]}},e.withOptions=function(t){return void 0===t&&(t={}),{ngModule:e,providers:[t.cookieName?{provide:Eu,useValue:t.cookieName}:[],t.headerName?{provide:Su,useValue:t.headerName}:[]]}},e}(),Iu=function(){},Ru=n("Jsyr"),Mu=function(e){function t(t,n){e.call(this),this.error=t,this.scheduler=n}return Object(bl.__extends)(t,e),t.create=function(e,n){return new t(e,n)},t.dispatch=function(e){e.subscriber.error(e.error)},t.prototype._subscribe=function(e){var n=this.error,r=this.scheduler;if(e.syncErrorThrowable=!0,r)return r.schedule(t.dispatch,0,{error:n,subscriber:e});e.error(n)},t}(gl.a).create,Pu=function(e){this.url=e,this.svgElement=null},Nu=function(){function e(e,t){this._httpClient=e,this._sanitizer=t,this._svgIconConfigs=new Map,this._iconSetConfigs=new Map,this._cachedIconsByUrl=new Map,this._inProgressUrlFetches=new Map,this._fontCssClassesByAlias=new Map,this._defaultFontSetClass="material-icons"}return e.prototype.addSvgIcon=function(e,t){return this.addSvgIconInNamespace("",e,t)},e.prototype.addSvgIconInNamespace=function(e,t,n){var r=Z(e,t);return this._svgIconConfigs.set(r,new Pu(n)),this},e.prototype.addSvgIconSet=function(e){return this.addSvgIconSetInNamespace("",e)},e.prototype.addSvgIconSetInNamespace=function(e,t){var n=new Pu(t),r=this._iconSetConfigs.get(e);return r?r.push(n):this._iconSetConfigs.set(e,[n]),this},e.prototype.registerFontClassAlias=function(e,t){return void 0===t&&(t=e),this._fontCssClassesByAlias.set(e,t),this},e.prototype.classNameForFontAlias=function(e){return this._fontCssClassesByAlias.get(e)||e},e.prototype.setDefaultFontSetClass=function(e){return this._defaultFontSetClass=e,this},e.prototype.getDefaultFontSetClass=function(){return this._defaultFontSetClass},e.prototype.getSvgIconFromUrl=function(e){var t=this,n=this._sanitizer.sanitize(al.SecurityContext.RESOURCE_URL,e);if(!n)throw G(e);var r=this._cachedIconsByUrl.get(n);return r?vl($(r)):this._loadSvgIconFromConfig(new Pu(e)).pipe(x(function(e){return t._cachedIconsByUrl.set(n,e)}),Object(wa.a)(function(e){return $(e)}))},e.prototype.getNamedSvgIcon=function(e,t){void 0===t&&(t="");var n=Z(t,e),r=this._svgIconConfigs.get(n);if(r)return this._getSvgFromConfig(r);var i=this._iconSetConfigs.get(t);return i?this._getSvgFromIconSetConfigs(e,i):Mu(U(n))},e.prototype._getSvgFromConfig=function(e){return e.svgElement?vl($(e.svgElement)):this._loadSvgIconFromConfig(e).pipe(x(function(t){return e.svgElement=t}),Object(wa.a)(function(e){return $(e)}))},e.prototype._getSvgFromIconSetConfigs=function(e,t){var n=this,r=this._extractIconWithNameFromAnySet(e,t);if(r)return vl(r);var i=t.filter(function(e){return!e.svgElement}).map(function(e){return n._loadSvgIconSetFromConfig(e).pipe(j(function(t){var r=n._sanitizer.sanitize(al.SecurityContext.RESOURCE_URL,e.url);return console.log("Loading icon set URL: "+r+" failed: "+t),vl(null)}),x(function(t){t&&(e.svgElement=t)}))});return Object(Ru.a)(i).pipe(Object(wa.a)(function(){var r=n._extractIconWithNameFromAnySet(e,t);if(!r)throw U(e);return r}))},e.prototype._extractIconWithNameFromAnySet=function(e,t){for(var n=t.length-1;n>=0;n--){var r=t[n];if(r.svgElement){var i=this._extractSvgIconFromSet(r.svgElement,e);if(i)return i}}return null},e.prototype._loadSvgIconFromConfig=function(e){var t=this;return this._fetchUrl(e.url).pipe(Object(wa.a)(function(e){return t._createSvgElementForSingleIcon(e)}))},e.prototype._loadSvgIconSetFromConfig=function(e){var t=this;return this._fetchUrl(e.url).pipe(Object(wa.a)(function(e){return t._svgElementFromString(e)}))},e.prototype._createSvgElementForSingleIcon=function(e){var t=this._svgElementFromString(e);return this._setSvgAttributes(t),t},e.prototype._extractSvgIconFromSet=function(e,t){var n=e.querySelector("#"+t);if(!n)return null;var r=n.cloneNode(!0);if(r.id="","svg"===r.nodeName.toLowerCase())return this._setSvgAttributes(r);if("symbol"===r.nodeName.toLowerCase())return this._setSvgAttributes(this._toSvgElement(r));var i=this._svgElementFromString("<svg></svg>");return i.appendChild(r),this._setSvgAttributes(i)},e.prototype._svgElementFromString=function(e){var t=document.createElement("DIV");t.innerHTML=e;var n=t.querySelector("svg");if(!n)throw Error("<svg> tag not found");return n},e.prototype._toSvgElement=function(e){for(var t=this._svgElementFromString("<svg></svg>"),n=0;n<e.childNodes.length;n++)e.childNodes[n].nodeType===Node.ELEMENT_NODE&&t.appendChild(e.childNodes[n].cloneNode(!0));return t},e.prototype._setSvgAttributes=function(e){return e.getAttribute("xmlns")||e.setAttribute("xmlns","http://www.w3.org/2000/svg"),e.setAttribute("fit",""),e.setAttribute("height","100%"),e.setAttribute("width","100%"),e.setAttribute("preserveAspectRatio","xMidYMid meet"),e.setAttribute("focusable","false"),e},e.prototype._fetchUrl=function(e){var t=this;if(!this._httpClient)throw Error("Could not find HttpClient provider for use with Angular Material icons. Please include the HttpClientModule from @angular/common/http in your app imports.");var n=this._sanitizer.sanitize(al.SecurityContext.RESOURCE_URL,e);if(!n)throw G(e);var r=this._inProgressUrlFetches.get(n);if(r)return r;var i=this._httpClient.get(n,{responseType:"text"}).pipe(function(e){return function(t){return t.lift(new Js(e))}}(function(){return t._inProgressUrlFetches.delete(n)}),Object(tu.a)());return this._inProgressUrlFetches.set(n,i),i},e}(),Au=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i._iconRegistry=n,r||t.nativeElement.setAttribute("aria-hidden","true"),i}return Object(bl.__extends)(t,e),t.prototype._splitIconName=function(e){if(!e)return["",""];var t=e.split(":");switch(t.length){case 1:return["",t[0]];case 2:return t;default:throw Error('Invalid icon name: "'+e+'"')}},t.prototype.ngOnChanges=function(e){var t=this;if(e.svgIcon)if(this.svgIcon){var n=this._splitIconName(this.svgIcon);this._iconRegistry.getNamedSvgIcon(n[1],n[0]).pipe(u(1)).subscribe(function(e){return t._setSvgElement(e)},function(e){return console.log("Error retrieving icon: "+e.message)})}else this._clearSvgElement();this._usingFontIcon()&&this._updateFontIconClasses()},t.prototype.ngOnInit=function(){this._usingFontIcon()&&this._updateFontIconClasses()},t.prototype._usingFontIcon=function(){return!this.svgIcon},t.prototype._setSvgElement=function(e){this._clearSvgElement(),this._elementRef.nativeElement.appendChild(e)},t.prototype._clearSvgElement=function(){for(var e=this._elementRef.nativeElement,t=e.childNodes.length,n=0;n<t;n++)e.removeChild(e.childNodes[n])},t.prototype._updateFontIconClasses=function(){if(this._usingFontIcon()){var e=this._elementRef.nativeElement,t=this.fontSet?this._iconRegistry.classNameForFontAlias(this.fontSet):this._iconRegistry.getDefaultFontSetClass();t!=this._previousFontSetClass&&(this._previousFontSetClass&&e.classList.remove(this._previousFontSetClass),t&&e.classList.add(t),this._previousFontSetClass=t),this.fontIcon!=this._previousFontIconClass&&(this._previousFontIconClass&&e.classList.remove(this._previousFontIconClass),this.fontIcon&&e.classList.add(this.fontIcon),this._previousFontIconClass=this.fontIcon)}},t}(I(function(e){this._elementRef=e})),Lu=function(){},Fu=n("0nO6"),ju=function(){},Vu=0,zu=function(){function e(e,t,n){this._elementRef=e,this._changeDetectorRef=t,this.color="primary",this._showAlwaysAnimate=!1,this._subscriptAnimationState="",this._hintLabel="",this._hintLabelId="mat-hint-"+Vu++,this._labelOptions=n||{},this.floatLabel=this._labelOptions.float||"auto"}return Object.defineProperty(e.prototype,"dividerColor",{get:function(){return this.color},set:function(e){this.color=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hideRequiredMarker",{get:function(){return this._hideRequiredMarker},set:function(e){this._hideRequiredMarker=c(e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_shouldAlwaysFloat",{get:function(){return"always"===this._floatLabel&&!this._showAlwaysAnimate},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_canLabelFloat",{get:function(){return"never"!==this._floatLabel},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hintLabel",{get:function(){return this._hintLabel},set:function(e){this._hintLabel=e,this._processHints()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"floatPlaceholder",{get:function(){return this._floatLabel},set:function(e){this.floatLabel=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"floatLabel",{get:function(){return this._floatLabel},set:function(e){e!==this._floatLabel&&(this._floatLabel=e||this._labelOptions.float||"auto",this._changeDetectorRef.markForCheck())},enumerable:!0,configurable:!0}),e.prototype.ngAfterContentInit=function(){var e=this;this._validateControlChild(),this._control.controlType&&this._elementRef.nativeElement.classList.add("mat-form-field-type-"+this._control.controlType),this._control.stateChanges.pipe(P(null)).subscribe(function(){e._validatePlaceholders(),e._syncDescribedByIds(),e._changeDetectorRef.markForCheck()});var t=this._control.ngControl;t&&t.valueChanges&&t.valueChanges.subscribe(function(){e._changeDetectorRef.markForCheck()}),this._hintChildren.changes.pipe(P(null)).subscribe(function(){e._processHints(),e._changeDetectorRef.markForCheck()}),this._errorChildren.changes.pipe(P(null)).subscribe(function(){e._syncDescribedByIds(),e._changeDetectorRef.markForCheck()})},e.prototype.ngAfterContentChecked=function(){this._validateControlChild()},e.prototype.ngAfterViewInit=function(){this._subscriptAnimationState="enter",this._changeDetectorRef.detectChanges()},e.prototype._shouldForward=function(e){var t=this._control?this._control.ngControl:null;return t&&t[e]},e.prototype._hasPlaceholder=function(){return!(!this._control.placeholder&&!this._placeholderChild)},e.prototype._hasLabel=function(){return!!this._labelChild},e.prototype._shouldLabelFloat=function(){return this._canLabelFloat&&(this._control.shouldLabelFloat||this._control.shouldPlaceholderFloat||this._shouldAlwaysFloat)},e.prototype._hideControlPlaceholder=function(){return!this._hasLabel()||!this._shouldLabelFloat()},e.prototype._hasFloatingLabel=function(){return this._hasLabel()||this._hasPlaceholder()},e.prototype._getDisplayedMessages=function(){return this._errorChildren&&this._errorChildren.length>0&&this._control.errorState?"error":"hint"},e.prototype._animateAndLockLabel=function(){var e=this;this._hasFloatingLabel()&&this._canLabelFloat&&(this._showAlwaysAnimate=!0,this._floatLabel="always",Sl(this._label.nativeElement,"transitionend").pipe(u(1)).subscribe(function(){e._showAlwaysAnimate=!1}),this._changeDetectorRef.markForCheck())},e.prototype._validatePlaceholders=function(){if(this._control.placeholder&&this._placeholderChild)throw Error("Placeholder attribute and child element were both specified.")},e.prototype._processHints=function(){this._validateHints(),this._syncDescribedByIds()},e.prototype._validateHints=function(){var e=this;if(this._hintChildren){var t,n;this._hintChildren.forEach(function(r){if("start"==r.align){if(t||e.hintLabel)throw Q("start");t=r}else if("end"==r.align){if(n)throw Q("end");n=r}})}},e.prototype._syncDescribedByIds=function(){if(this._control){var e=[];if("hint"===this._getDisplayedMessages()){var t=this._hintChildren?this._hintChildren.find(function(e){return"start"===e.align}):null,n=this._hintChildren?this._hintChildren.find(function(e){return"end"===e.align}):null;t?e.push(t.id):this._hintLabel&&e.push(this._hintLabelId),n&&e.push(n.id)}else this._errorChildren&&(e=this._errorChildren.map(function(e){return e.id}));this._control.setDescribedByIds(e)}},e.prototype._validateControlChild=function(){if(!this._control)throw Error("mat-form-field must contain a MatFormFieldControl.")},e}(),Bu=function(){},Hu=n("5O0w"),Wu=["button","checkbox","color","file","hidden","image","radio","range","reset","submit"],qu=0,Uu=function(e){function t(t,n,r,o,l,a,s){var u=e.call(this,a,o,l,r)||this;return u._elementRef=t,u._platform=n,u.ngControl=r,u._type="text",u._disabled=!1,u._required=!1,u._uid="mat-input-"+qu++,u._readonly=!1,u.focused=!1,u._isServer=!1,u.stateChanges=new ml.Subject,u.controlType="mat-input",u.placeholder="",u._neverEmptyInputTypes=["date","datetime","datetime-local","month","time","week"].filter(function(e){return i().has(e)}),u._inputValueAccessor=s||u._elementRef.nativeElement,u._previousNativeValue=u.value,u.id=u.id,n.IOS&&t.nativeElement.addEventListener("keyup",function(e){var t=e.target;t.value||t.selectionStart||t.selectionEnd||(t.setSelectionRange(1,1),t.setSelectionRange(0,0))}),u._isServer=!u._platform.isBrowser,u}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"disabled",{get:function(){return this.ngControl?this.ngControl.disabled:this._disabled},set:function(e){this._disabled=c(e),this.focused&&(this.focused=!1,this.stateChanges.next())},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"id",{get:function(){return this._id},set:function(e){this._id=e||this._uid},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"required",{get:function(){return this._required},set:function(e){this._required=c(e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"type",{get:function(){return this._type},set:function(e){this._type=e||"text",this._validateType(),!this._isTextarea()&&i().has(this._type)&&(this._elementRef.nativeElement.type=this._type)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"value",{get:function(){return this._inputValueAccessor.value},set:function(e){e!==this.value&&(this._inputValueAccessor.value=e,this.stateChanges.next())},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"readonly",{get:function(){return this._readonly},set:function(e){this._readonly=c(e)},enumerable:!0,configurable:!0}),t.prototype.ngOnChanges=function(){this.stateChanges.next()},t.prototype.ngOnDestroy=function(){this.stateChanges.complete()},t.prototype.ngDoCheck=function(){this.ngControl?this.updateErrorState():this._dirtyCheckNativeValue()},t.prototype.focus=function(){this._elementRef.nativeElement.focus()},t.prototype._focusChanged=function(e){e===this.focused||this.readonly||(this.focused=e,this.stateChanges.next())},t.prototype._onInput=function(){},t.prototype._dirtyCheckNativeValue=function(){var e=this.value;this._previousNativeValue!==e&&(this._previousNativeValue=e,this.stateChanges.next())},t.prototype._validateType=function(){if(Wu.indexOf(this._type)>-1)throw function(e){return Error('Input type "'+e+"\" isn't supported by matInput.")}(this._type)},t.prototype._isNeverEmpty=function(){return this._neverEmptyInputTypes.indexOf(this._type)>-1},t.prototype._isBadInput=function(){var e=this._elementRef.nativeElement.validity;return e&&e.badInput},t.prototype._isTextarea=function(){var e=this._elementRef.nativeElement,t=this._platform.isBrowser?e.nodeName:e.name;return!!t&&"textarea"===t.toLowerCase()},Object.defineProperty(t.prototype,"empty",{get:function(){return!this._isNeverEmpty()&&!this._elementRef.nativeElement.value&&!this._isBadInput()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"shouldLabelFloat",{get:function(){return this.focused||!this.empty},enumerable:!0,configurable:!0}),t.prototype.setDescribedByIds=function(e){this._ariaDescribedby=e.join(" ")},t.prototype.onContainerClick=function(){this.focus()},t}(function(e){return function(e){function t(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=e.apply(this,t)||this;return r.errorState=!1,r.stateChanges=new ml.Subject,r}return Object(bl.__extends)(t,e),t.prototype.updateErrorState=function(){var e=this.errorState,t=(this.errorStateMatcher||this._defaultErrorStateMatcher).isErrorState(this.ngControl?this.ngControl.control:null,this._parentFormGroup||this._parentForm);t!==e&&(this.errorState=t,this.stateChanges.next())},t}(function(e,t,n,r){this._defaultErrorStateMatcher=e,this._parentForm=t,this._parentFormGroup=n,this.ngControl=r})}()),Gu=function(){},Ku=function(){return function(){this.changes=new ml.Subject,this.calendarLabel="Calendar",this.openCalendarLabel="Open calendar",this.prevMonthLabel="Previous month",this.nextMonthLabel="Next month",this.prevYearLabel="Previous year",this.nextYearLabel="Next year",this.switchToMonthViewLabel="Change to month view",this.switchToYearViewLabel="Change to year view"}}(),$u=function(e,t,n,r){this.value=e,this.displayValue=t,this.ariaLabel=n,this.enabled=r},Zu=function(){function e(){this.numCols=7,this.allowDisabledSelection=!1,this.activeCell=0,this.cellAspectRatio=1,this.selectedValueChange=new al.EventEmitter}return e.prototype._cellClicked=function(e){(this.allowDisabledSelection||e.enabled)&&this.selectedValueChange.emit(e.value)},Object.defineProperty(e.prototype,"_firstRowOffset",{get:function(){return this.rows&&this.rows.length&&this.rows[0].length?this.numCols-this.rows[0].length:0},enumerable:!0,configurable:!0}),e.prototype._isActiveCell=function(e,t){var n=e*this.numCols+t;return e&&(n-=this._firstRowOffset),n==this.activeCell},e}(),Qu=function(){function e(e,t,n){if(this._dateAdapter=e,this._dateFormats=t,this._changeDetectorRef=n,this.selectedChange=new al.EventEmitter,this._userSelection=new al.EventEmitter,!this._dateAdapter)throw Y("DateAdapter");if(!this._dateFormats)throw Y("MAT_DATE_FORMATS");var r=this._dateAdapter.getFirstDayOfWeek(),i=this._dateAdapter.getDayOfWeekNames("narrow"),o=this._dateAdapter.getDayOfWeekNames("long").map(function(e,t){return{long:e,narrow:i[t]}});this._weekdays=o.slice(r).concat(o.slice(0,r)),this._activeDate=this._dateAdapter.today()}return Object.defineProperty(e.prototype,"activeDate",{get:function(){return this._activeDate},set:function(e){var t=this._activeDate;this._activeDate=this._getValidDateOrNull(this._dateAdapter.deserialize(e))||this._dateAdapter.today(),this._hasSameMonthAndYear(t,this._activeDate)||this._init()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"selected",{get:function(){return this._selected},set:function(e){this._selected=this._getValidDateOrNull(this._dateAdapter.deserialize(e)),this._selectedDate=this._getDateInCurrentMonth(this._selected)},enumerable:!0,configurable:!0}),e.prototype.ngAfterContentInit=function(){this._init()},e.prototype._dateSelected=function(e){if(this._selectedDate!=e){var t=this._dateAdapter.getYear(this.activeDate),n=this._dateAdapter.getMonth(this.activeDate),r=this._dateAdapter.createDate(t,n,e);this.selectedChange.emit(r)}this._userSelection.emit()},e.prototype._init=function(){this._selectedDate=this._getDateInCurrentMonth(this.selected),this._todayDate=this._getDateInCurrentMonth(this._dateAdapter.today()),this._monthLabel=this._dateAdapter.getMonthNames("short")[this._dateAdapter.getMonth(this.activeDate)].toLocaleUpperCase();var e=this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),this._dateAdapter.getMonth(this.activeDate),1);this._firstWeekOffset=(7+this._dateAdapter.getDayOfWeek(e)-this._dateAdapter.getFirstDayOfWeek())%7,this._createWeekCells(),this._changeDetectorRef.markForCheck()},e.prototype._createWeekCells=function(){var e=this._dateAdapter.getNumDaysInMonth(this.activeDate),t=this._dateAdapter.getDateNames();this._weeks=[[]];for(var n=0,r=this._firstWeekOffset;n<e;n++,r++){7==r&&(this._weeks.push([]),r=0);var i=this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),this._dateAdapter.getMonth(this.activeDate),n+1),o=!this.dateFilter||this.dateFilter(i),l=this._dateAdapter.format(i,this._dateFormats.display.dateA11yLabel);this._weeks[this._weeks.length-1].push(new $u(n+1,t[n],l,o))}},e.prototype._getDateInCurrentMonth=function(e){return e&&this._hasSameMonthAndYear(e,this.activeDate)?this._dateAdapter.getDate(e):null},e.prototype._hasSameMonthAndYear=function(e,t){return!(!e||!t||this._dateAdapter.getMonth(e)!=this._dateAdapter.getMonth(t)||this._dateAdapter.getYear(e)!=this._dateAdapter.getYear(t))},e.prototype._getValidDateOrNull=function(e){return this._dateAdapter.isDateInstance(e)&&this._dateAdapter.isValid(e)?e:null},e}(),Yu=function(){function e(e,t,n){if(this._dateAdapter=e,this._dateFormats=t,this._changeDetectorRef=n,this.selectedChange=new al.EventEmitter,!this._dateAdapter)throw Y("DateAdapter");if(!this._dateFormats)throw Y("MAT_DATE_FORMATS");this._activeDate=this._dateAdapter.today()}return Object.defineProperty(e.prototype,"activeDate",{get:function(){return this._activeDate},set:function(e){var t=this._activeDate;this._activeDate=this._getValidDateOrNull(this._dateAdapter.deserialize(e))||this._dateAdapter.today(),this._dateAdapter.getYear(t)!=this._dateAdapter.getYear(this._activeDate)&&this._init()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"selected",{get:function(){return this._selected},set:function(e){this._selected=this._getValidDateOrNull(this._dateAdapter.deserialize(e)),this._selectedMonth=this._getMonthInCurrentYear(this._selected)},enumerable:!0,configurable:!0}),e.prototype.ngAfterContentInit=function(){this._init()},e.prototype._monthSelected=function(e){var t=this._dateAdapter.getNumDaysInMonth(this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),e,1));this.selectedChange.emit(this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),e,Math.min(this._dateAdapter.getDate(this.activeDate),t)))},e.prototype._init=function(){var e=this;this._selectedMonth=this._getMonthInCurrentYear(this.selected),this._todayMonth=this._getMonthInCurrentYear(this._dateAdapter.today()),this._yearLabel=this._dateAdapter.getYearName(this.activeDate);var t=this._dateAdapter.getMonthNames("short");this._months=[[0,1,2,3],[4,5,6,7],[8,9,10,11]].map(function(n){return n.map(function(n){return e._createCellForMonth(n,t[n])})}),this._changeDetectorRef.markForCheck()},e.prototype._getMonthInCurrentYear=function(e){return e&&this._dateAdapter.getYear(e)==this._dateAdapter.getYear(this.activeDate)?this._dateAdapter.getMonth(e):null},e.prototype._createCellForMonth=function(e,t){var n=this._dateAdapter.format(this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),e,1),this._dateFormats.display.monthYearA11yLabel);return new $u(e,t.toLocaleUpperCase(),n,this._isMonthEnabled(e))},e.prototype._isMonthEnabled=function(e){if(!this.dateFilter)return!0;for(var t=this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),e,1);this._dateAdapter.getMonth(t)==e;t=this._dateAdapter.addCalendarDays(t,1))if(this.dateFilter(t))return!0;return!1},e.prototype._getValidDateOrNull=function(e){return this._dateAdapter.isDateInstance(e)&&this._dateAdapter.isValid(e)?e:null},e}(),Xu=function(){function e(e,t,n,r,i,o){var l=this;if(this._elementRef=e,this._intl=t,this._ngZone=n,this._dateAdapter=r,this._dateFormats=i,this.startView="month",this.selectedChange=new al.EventEmitter,this._userSelection=new al.EventEmitter,this._dateFilterForViews=function(e){return!!e&&(!l.dateFilter||l.dateFilter(e))&&(!l.minDate||l._dateAdapter.compareDate(e,l.minDate)>=0)&&(!l.maxDate||l._dateAdapter.compareDate(e,l.maxDate)<=0)},!this._dateAdapter)throw Y("DateAdapter");if(!this._dateFormats)throw Y("MAT_DATE_FORMATS");this._intlChanges=t.changes.subscribe(function(){return o.markForCheck()})}return Object.defineProperty(e.prototype,"startAt",{get:function(){return this._startAt},set:function(e){this._startAt=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"selected",{get:function(){return this._selected},set:function(e){this._selected=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"minDate",{get:function(){return this._minDate},set:function(e){this._minDate=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"maxDate",{get:function(){return this._maxDate},set:function(e){this._maxDate=this._getValidDateOrNull(this._dateAdapter.deserialize(e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_activeDate",{get:function(){return this._clampedActiveDate},set:function(e){this._clampedActiveDate=this._dateAdapter.clampDate(e,this.minDate,this.maxDate)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_periodButtonText",{get:function(){return this._monthView?this._dateAdapter.format(this._activeDate,this._dateFormats.display.monthYearLabel).toLocaleUpperCase():this._dateAdapter.getYearName(this._activeDate)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_periodButtonLabel",{get:function(){return this._monthView?this._intl.switchToYearViewLabel:this._intl.switchToMonthViewLabel},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_prevButtonLabel",{get:function(){return this._monthView?this._intl.prevMonthLabel:this._intl.prevYearLabel},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_nextButtonLabel",{get:function(){return this._monthView?this._intl.nextMonthLabel:this._intl.nextYearLabel},enumerable:!0,configurable:!0}),e.prototype.ngAfterContentInit=function(){this._activeDate=this.startAt||this._dateAdapter.today(),this._focusActiveCell(),this._monthView="year"!=this.startView},e.prototype.ngOnDestroy=function(){this._intlChanges.unsubscribe()},e.prototype.ngOnChanges=function(e){var t=e.minDate||e.maxDate||e.dateFilter;if(t&&!t.firstChange){var n=this.monthView||this.yearView;n&&n._init()}},e.prototype._dateSelected=function(e){this._dateAdapter.sameDate(e,this.selected)||this.selectedChange.emit(e)},e.prototype._userSelected=function(){this._userSelection.emit()},e.prototype._monthSelected=function(e){this._activeDate=e,this._monthView=!0},e.prototype._currentPeriodClicked=function(){this._monthView=!this._monthView},e.prototype._previousClicked=function(){this._activeDate=this._monthView?this._dateAdapter.addCalendarMonths(this._activeDate,-1):this._dateAdapter.addCalendarYears(this._activeDate,-1)},e.prototype._nextClicked=function(){this._activeDate=this._monthView?this._dateAdapter.addCalendarMonths(this._activeDate,1):this._dateAdapter.addCalendarYears(this._activeDate,1)},e.prototype._previousEnabled=function(){return!this.minDate||!this.minDate||!this._isSameView(this._activeDate,this.minDate)},e.prototype._nextEnabled=function(){return!this.maxDate||!this._isSameView(this._activeDate,this.maxDate)},e.prototype._handleCalendarBodyKeydown=function(e){this._monthView?this._handleCalendarBodyKeydownInMonthView(e):this._handleCalendarBodyKeydownInYearView(e)},e.prototype._focusActiveCell=function(){var e=this;this._ngZone.runOutsideAngular(function(){e._ngZone.onStable.asObservable().pipe(u(1)).subscribe(function(){e._elementRef.nativeElement.querySelector(".mat-calendar-body-active").focus()})})},e.prototype._isSameView=function(e,t){return this._monthView?this._dateAdapter.getYear(e)==this._dateAdapter.getYear(t)&&this._dateAdapter.getMonth(e)==this._dateAdapter.getMonth(t):this._dateAdapter.getYear(e)==this._dateAdapter.getYear(t)},e.prototype._handleCalendarBodyKeydownInMonthView=function(e){switch(e.keyCode){case 37:this._activeDate=this._dateAdapter.addCalendarDays(this._activeDate,-1);break;case 39:this._activeDate=this._dateAdapter.addCalendarDays(this._activeDate,1);break;case 38:this._activeDate=this._dateAdapter.addCalendarDays(this._activeDate,-7);break;case 40:this._activeDate=this._dateAdapter.addCalendarDays(this._activeDate,7);break;case 36:this._activeDate=this._dateAdapter.addCalendarDays(this._activeDate,1-this._dateAdapter.getDate(this._activeDate));break;case 35:this._activeDate=this._dateAdapter.addCalendarDays(this._activeDate,this._dateAdapter.getNumDaysInMonth(this._activeDate)-this._dateAdapter.getDate(this._activeDate));break;case 33:this._activeDate=e.altKey?this._dateAdapter.addCalendarYears(this._activeDate,-1):this._dateAdapter.addCalendarMonths(this._activeDate,-1);break;case 34:this._activeDate=e.altKey?this._dateAdapter.addCalendarYears(this._activeDate,1):this._dateAdapter.addCalendarMonths(this._activeDate,1);break;case 13:return void(this._dateFilterForViews(this._activeDate)&&(this._dateSelected(this._activeDate),this._userSelected(),e.preventDefault()));default:return}this._focusActiveCell(),e.preventDefault()},e.prototype._handleCalendarBodyKeydownInYearView=function(e){switch(e.keyCode){case 37:this._activeDate=this._dateAdapter.addCalendarMonths(this._activeDate,-1);break;case 39:this._activeDate=this._dateAdapter.addCalendarMonths(this._activeDate,1);break;case 38:this._activeDate=this._prevMonthInSameCol(this._activeDate);break;case 40:this._activeDate=this._nextMonthInSameCol(this._activeDate);break;case 36:this._activeDate=this._dateAdapter.addCalendarMonths(this._activeDate,-this._dateAdapter.getMonth(this._activeDate));break;case 35:this._activeDate=this._dateAdapter.addCalendarMonths(this._activeDate,11-this._dateAdapter.getMonth(this._activeDate));break;case 33:this._activeDate=this._dateAdapter.addCalendarYears(this._activeDate,e.altKey?-10:-1);break;case 34:this._activeDate=this._dateAdapter.addCalendarYears(this._activeDate,e.altKey?10:1);break;case 13:this._monthSelected(this._activeDate);break;default:return}this._focusActiveCell(),e.preventDefault()},e.prototype._prevMonthInSameCol=function(e){return this._dateAdapter.addCalendarMonths(e,-4)},e.prototype._nextMonthInSameCol=function(e){return this._dateAdapter.addCalendarMonths(e,4)},e.prototype._getValidDateOrNull=function(e){return this._dateAdapter.isDateInstance(e)&&this._dateAdapter.isValid(e)?e:null},e}(),Ju=new al.InjectionToken("mat-datepicker-scroll-strategy"),ec=function(){function e(){}return e.prototype.ngAfterContentInit=function(){this._calendar._focusActiveCell()},e.prototype._handleKeydown=function(e){27===e.keyCode&&(this.datepicker.close(),e.preventDefault(),e.stopPropagation())},e}(),tc=function(){},nc=al["\u0275crt"]({encapsulation:2,styles:[".mat-button,.mat-fab,.mat-icon-button,.mat-mini-fab,.mat-raised-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:88px;line-height:36px;padding:0 16px;border-radius:2px}[disabled].mat-button,[disabled].mat-fab,[disabled].mat-icon-button,[disabled].mat-mini-fab,[disabled].mat-raised-button{cursor:default}.cdk-keyboard-focused.mat-button .mat-button-focus-overlay,.cdk-keyboard-focused.mat-fab .mat-button-focus-overlay,.cdk-keyboard-focused.mat-icon-button .mat-button-focus-overlay,.cdk-keyboard-focused.mat-mini-fab .mat-button-focus-overlay,.cdk-keyboard-focused.mat-raised-button .mat-button-focus-overlay,.cdk-program-focused.mat-button .mat-button-focus-overlay,.cdk-program-focused.mat-fab .mat-button-focus-overlay,.cdk-program-focused.mat-icon-button .mat-button-focus-overlay,.cdk-program-focused.mat-mini-fab .mat-button-focus-overlay,.cdk-program-focused.mat-raised-button .mat-button-focus-overlay{opacity:1}.mat-button::-moz-focus-inner,.mat-fab::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-mini-fab::-moz-focus-inner,.mat-raised-button::-moz-focus-inner{border:0}.mat-fab,.mat-mini-fab,.mat-raised-button{transform:translate3d(0,0,0);transition:background .4s cubic-bezier(.25,.8,.25,1),box-shadow 280ms cubic-bezier(.4,0,.2,1)}.mat-fab:not([class*=mat-elevation-z]),.mat-mini-fab:not([class*=mat-elevation-z]),.mat-raised-button:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]),.mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]),.mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}[disabled].mat-fab,[disabled].mat-mini-fab,[disabled].mat-raised-button{box-shadow:none}.mat-button .mat-button-focus-overlay,.mat-icon-button .mat-button-focus-overlay{transition:none;opacity:0}.mat-button:hover .mat-button-focus-overlay{opacity:1}.mat-fab{min-width:0;border-radius:50%;width:56px;height:56px;padding:0;flex-shrink:0}.mat-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-fab .mat-button-wrapper{padding:16px 0;display:inline-block;line-height:24px}.mat-mini-fab{min-width:0;border-radius:50%;width:40px;height:40px;padding:0;flex-shrink:0}.mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-mini-fab .mat-button-wrapper{padding:8px 0;display:inline-block;line-height:24px}.mat-icon-button{padding:0;min-width:0;width:40px;height:40px;flex-shrink:0;line-height:40px;border-radius:50%}.mat-icon-button .mat-icon,.mat-icon-button i{line-height:24px}.mat-button,.mat-fab,.mat-icon-button,.mat-mini-fab,.mat-raised-button{color:currentColor}.mat-button .mat-button-wrapper>*,.mat-fab .mat-button-wrapper>*,.mat-icon-button .mat-button-wrapper>*,.mat-mini-fab .mat-button-wrapper>*,.mat-raised-button .mat-button-wrapper>*{vertical-align:middle}.mat-button-focus-overlay,.mat-button-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-button-focus-overlay{background-color:rgba(0,0,0,.12);border-radius:inherit;opacity:0;transition:opacity .2s cubic-bezier(.35,0,.25,1),background-color .2s cubic-bezier(.35,0,.25,1)}@media screen and (-ms-high-contrast:active){.mat-button-focus-overlay{background-color:rgba(255,255,255,.5)}}.mat-button-ripple-round{border-radius:50%;z-index:1}@media screen and (-ms-high-contrast:active){.mat-button,.mat-fab,.mat-icon-button,.mat-mini-fab,.mat-raised-button{outline:solid 1px}}"],data:{}}),rc=al["\u0275crt"]({encapsulation:2,styles:[".mat-button,.mat-fab,.mat-icon-button,.mat-mini-fab,.mat-raised-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:88px;line-height:36px;padding:0 16px;border-radius:2px}[disabled].mat-button,[disabled].mat-fab,[disabled].mat-icon-button,[disabled].mat-mini-fab,[disabled].mat-raised-button{cursor:default}.cdk-keyboard-focused.mat-button .mat-button-focus-overlay,.cdk-keyboard-focused.mat-fab .mat-button-focus-overlay,.cdk-keyboard-focused.mat-icon-button .mat-button-focus-overlay,.cdk-keyboard-focused.mat-mini-fab .mat-button-focus-overlay,.cdk-keyboard-focused.mat-raised-button .mat-button-focus-overlay,.cdk-program-focused.mat-button .mat-button-focus-overlay,.cdk-program-focused.mat-fab .mat-button-focus-overlay,.cdk-program-focused.mat-icon-button .mat-button-focus-overlay,.cdk-program-focused.mat-mini-fab .mat-button-focus-overlay,.cdk-program-focused.mat-raised-button .mat-button-focus-overlay{opacity:1}.mat-button::-moz-focus-inner,.mat-fab::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-mini-fab::-moz-focus-inner,.mat-raised-button::-moz-focus-inner{border:0}.mat-fab,.mat-mini-fab,.mat-raised-button{transform:translate3d(0,0,0);transition:background .4s cubic-bezier(.25,.8,.25,1),box-shadow 280ms cubic-bezier(.4,0,.2,1)}.mat-fab:not([class*=mat-elevation-z]),.mat-mini-fab:not([class*=mat-elevation-z]),.mat-raised-button:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]),.mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]),.mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}[disabled].mat-fab,[disabled].mat-mini-fab,[disabled].mat-raised-button{box-shadow:none}.mat-button .mat-button-focus-overlay,.mat-icon-button .mat-button-focus-overlay{transition:none;opacity:0}.mat-button:hover .mat-button-focus-overlay{opacity:1}.mat-fab{min-width:0;border-radius:50%;width:56px;height:56px;padding:0;flex-shrink:0}.mat-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-fab .mat-button-wrapper{padding:16px 0;display:inline-block;line-height:24px}.mat-mini-fab{min-width:0;border-radius:50%;width:40px;height:40px;padding:0;flex-shrink:0}.mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-mini-fab .mat-button-wrapper{padding:8px 0;display:inline-block;line-height:24px}.mat-icon-button{padding:0;min-width:0;width:40px;height:40px;flex-shrink:0;line-height:40px;border-radius:50%}.mat-icon-button .mat-icon,.mat-icon-button i{line-height:24px}.mat-button,.mat-fab,.mat-icon-button,.mat-mini-fab,.mat-raised-button{color:currentColor}.mat-button .mat-button-wrapper>*,.mat-fab .mat-button-wrapper>*,.mat-icon-button .mat-button-wrapper>*,.mat-mini-fab .mat-button-wrapper>*,.mat-raised-button .mat-button-wrapper>*{vertical-align:middle}.mat-button-focus-overlay,.mat-button-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-button-focus-overlay{background-color:rgba(0,0,0,.12);border-radius:inherit;opacity:0;transition:opacity .2s cubic-bezier(.35,0,.25,1),background-color .2s cubic-bezier(.35,0,.25,1)}@media screen and (-ms-high-contrast:active){.mat-button-focus-overlay{background-color:rgba(255,255,255,.5)}}.mat-button-ripple-round{border-radius:50%;z-index:1}@media screen and (-ms-high-contrast:active){.mat-button,.mat-fab,.mat-icon-button,.mat-mini-fab,.mat-raised-button{outline:solid 1px}}"],data:{}}),ic=al["\u0275crt"]({encapsulation:2,styles:[".mat-icon{background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px}"],data:{}}),oc=al["\u0275crt"]({encapsulation:2,styles:[".mat-calendar{display:block}.mat-calendar-header{padding:8px 8px 0 8px}.mat-calendar-content{padding:0 8px 8px 8px;outline:0}.mat-calendar-controls{display:flex;margin:5% calc(33% / 7 - 16px)}.mat-calendar-spacer{flex:1 1 auto}.mat-calendar-period-button{min-width:0}.mat-calendar-arrow{display:inline-block;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top-width:5px;border-top-style:solid;margin:0 0 0 5px;vertical-align:middle}.mat-calendar-arrow.mat-calendar-invert{transform:rotate(180deg)}[dir=rtl] .mat-calendar-arrow{margin:0 5px 0 0}.mat-calendar-next-button,.mat-calendar-previous-button{position:relative}.mat-calendar-next-button::after,.mat-calendar-previous-button::after{top:0;left:0;right:0;bottom:0;position:absolute;content:'';margin:15.5px;border:0 solid currentColor;border-top-width:2px}[dir=rtl] .mat-calendar-next-button,[dir=rtl] .mat-calendar-previous-button{transform:rotate(180deg)}.mat-calendar-previous-button::after{border-left-width:2px;transform:translateX(2px) rotate(-45deg)}.mat-calendar-next-button::after{border-right-width:2px;transform:translateX(-2px) rotate(45deg)}.mat-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.mat-calendar-table-header th{text-align:center;padding:0 0 8px 0}.mat-calendar-table-header-divider{position:relative;height:1px}.mat-calendar-table-header-divider::after{content:'';position:absolute;top:0;left:-8px;right:-8px;height:1px}"],data:{}}),lc=al["\u0275crt"]({encapsulation:2,styles:[".mat-calendar-body{min-width:224px}.mat-calendar-body-label{height:0;line-height:0;text-align:left;padding-left:4.71429%;padding-right:4.71429%}.mat-calendar-body-cell{position:relative;height:0;line-height:0;text-align:center;outline:0;cursor:pointer}.mat-calendar-body-disabled{cursor:default}.mat-calendar-body-cell-content{position:absolute;top:5%;left:5%;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:90%;height:90%;line-height:1;border-width:1px;border-style:solid;border-radius:999px}[dir=rtl] .mat-calendar-body-label{text-align:right}"],data:{}}),ac=al["\u0275crt"]({encapsulation:2,styles:[".mat-datepicker-content{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);display:block}.mat-datepicker-content .mat-calendar{width:296px;height:354px}.mat-datepicker-content-touch{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12);display:block;max-height:80vh;overflow:auto;margin:-24px}.mat-datepicker-content-touch .mat-calendar{min-width:250px;min-height:312px;max-width:750px;max-height:788px}@media all and (orientation:landscape){.mat-datepicker-content-touch .mat-calendar{width:64vh;height:80vh}}@media all and (orientation:portrait){.mat-datepicker-content-touch .mat-calendar{width:80vw;height:100vw}}"],data:{}}),sc=al["\u0275ccf"]("mat-datepicker-content",ec,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-datepicker-content",[["class","mat-datepicker-content"]],[[2,"mat-datepicker-content-touch",null]],[[null,"keydown"]],function(e,t,n){var r=!0;return"keydown"===t&&(r=!1!==al["\u0275nov"](e,1)._handleKeydown(n)&&r),r},ce,ac)),al["\u0275did"](1,1097728,null,0,ec,[],null,null)],null,function(e,t){e(t,0,0,al["\u0275nov"](t,1).datepicker.touchUi)})},{},{},[]),uc=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),cc=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),dc=20,pc=new al.InjectionToken("mat-tooltip-scroll-strategy"),fc=function(){function e(e){this._changeDetectorRef=e,this._visibility="initial",this._closeOnInteraction=!1,this._transformOrigin="bottom",this._onHide=new ml.Subject}return e.prototype.show=function(e,t){var n=this;this._hideTimeoutId&&clearTimeout(this._hideTimeoutId),this._closeOnInteraction=!0,this._position=e,this._showTimeoutId=setTimeout(function(){n._visibility="visible",n._markForCheck()},t)},e.prototype.hide=function(e){var t=this;this._showTimeoutId&&clearTimeout(this._showTimeoutId),this._hideTimeoutId=setTimeout(function(){t._visibility="hidden",t._markForCheck()},e)},e.prototype.afterHidden=function(){return this._onHide.asObservable()},e.prototype.isVisible=function(){return"visible"===this._visibility},e.prototype._setTransformOrigin=function(e){var t="X"==("above"===this._position||"below"===this._position?"Y":"X")?e.overlayX:e.overlayY;if("top"===t||"bottom"===t)this._transformOrigin=t;else if("start"===t)this._transformOrigin="left";else{if("end"!==t)throw function(e){return Error('Tooltip position "'+e+'" is invalid.')}(this._position);this._transformOrigin="right"}},e.prototype._animationStart=function(){this._closeOnInteraction=!1},e.prototype._animationDone=function(e){var t=this,n=e.toState;"hidden"!==n||this.isVisible()||this._onHide.next(),"visible"!==n&&"hidden"!==n||Promise.resolve().then(function(){return t._closeOnInteraction=!0})},e.prototype._handleBodyInteraction=function(){this._closeOnInteraction&&this.hide(0)},e.prototype._markForCheck=function(){this._changeDetectorRef.markForCheck()},e}(),hc=function(){},mc=al["\u0275crt"]({encapsulation:2,styles:[".mat-tooltip-panel{pointer-events:none!important}.mat-tooltip{color:#fff;border-radius:2px;margin:14px;max-width:250px;padding-left:8px;padding-right:8px}@media screen and (-ms-high-contrast:active){.mat-tooltip{outline:solid 1px}}"],data:{animation:[{type:7,name:"state",definitions:[{type:0,name:"initial, void, hidden",styles:{type:6,styles:{transform:"scale(0)"},offset:null},options:void 0},{type:0,name:"visible",styles:{type:6,styles:{transform:"scale(1)"},offset:null},options:void 0},{type:1,expr:"* => visible",animation:{type:4,styles:null,timings:"150ms cubic-bezier(0.0, 0.0, 0.2, 1)"},options:null},{type:1,expr:"* => hidden",animation:{type:4,styles:null,timings:"150ms cubic-bezier(0.4, 0.0, 1, 1)"},options:null}],options:{}}]}}),gc=al["\u0275ccf"]("mat-tooltip-component",fc,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"mat-tooltip-component",[["aria-hidden","true"]],[[4,"zoom",null]],[["body","click"]],function(e,t,n){var r=!0;return"body:click"===t&&(r=!1!==al["\u0275nov"](e,1)._handleBodyInteraction()&&r),r},me,mc)),al["\u0275did"](1,49152,null,0,fc,[al.ChangeDetectorRef],null,null)],null,function(e,t){e(t,0,0,"visible"===al["\u0275nov"](t,1)._visibility?1:null)})},{},{},[]),yc={},vc=function(){function e(e){this.project=e}return e.prototype.call=function(e,t){return t.subscribe(new bc(e,this.project))},e}(),bc=function(e){function t(t,n){e.call(this,t),this.project=n,this.active=0,this.values=[],this.observables=[]}return Object(bl.__extends)(t,e),t.prototype._next=function(e){this.values.push(yc),this.observables.push(e)},t.prototype._complete=function(){var e=this.observables,t=e.length;if(0===t)this.destination.complete();else{this.active=t,this.toRespond=t;for(var n=0;n<t;n++){var r=e[n];this.add(Object(Dl.a)(this,r,r,n))}}},t.prototype.notifyComplete=function(e){0==(this.active-=1)&&this.destination.complete()},t.prototype.notifyNext=function(e,t,n,r,i){var o=this.values,l=this.toRespond?o[n]===yc?--this.toRespond:this.toRespond:0;o[n]=t,0===l&&(this.project?this._tryProject(o):this.destination.next(o.slice()))},t.prototype._tryProject=function(e){var t;try{t=this.project.apply(this,e)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(kl.a),_c=function(e){function t(t,n,r){e.call(this),this.addHandler=t,this.removeHandler=n,this.selector=r}return Object(bl.__extends)(t,e),t.create=function(e,n,r){return new t(e,n,r)},t.prototype._subscribe=function(e){var t=this,n=this.removeHandler,r=this.selector?function(){for(var n=[],r=0;r<arguments.length;r++)n[r-0]=arguments[r];t._callSelector(e,n)}:function(t){e.next(t)},i=this._callAddHandler(r,e);Object(wl.a)(n)&&e.add(new Cl.a(function(){n(r,i)}))},t.prototype._callSelector=function(e,t){try{var n=this.selector.apply(this,t);e.next(n)}catch(t){e.error(t)}},t.prototype._callAddHandler=function(e,t){try{return this.addHandler(e)||null}catch(e){t.error(e)}},t}(gl.a).create,wc=new Map,xc=function(){function e(e){this.platform=e,this._matchMedia=this.platform.isBrowser?window.matchMedia.bind(window):ge}return e.prototype.matchMedia=function(e){return this.platform.WEBKIT&&function(e){if(!wc.has(e))try{var t=document.createElement("style");if(t.setAttribute("type","text/css"),!t.sheet){var n="@media "+e+" {.fx-query-test{ }}";t.appendChild(document.createTextNode(n))}document.getElementsByTagName("head")[0].appendChild(t),wc.set(e,t)}catch(e){console.error(e)}}(e),this._matchMedia(e)},e}(),Cc=function(){function e(e,t){this.mediaMatcher=e,this.zone=t,this._queries=new Map,this._destroySubject=new ml.Subject}return e.prototype.ngOnDestroy=function(){this._destroySubject.next(),this._destroySubject.complete()},e.prototype.isMatched=function(e){var t=this;return p(e).some(function(e){return t._registerQuery(e).mql.matches})},e.prototype.observe=function(e){var t=this;return function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];var n=null,r=null;return Object(Pl.a)(e[e.length-1])&&(r=e.pop()),"function"==typeof e[e.length-1]&&(n=e.pop()),1===e.length&&Object(Ml.a)(e[0])&&(e=e[0]),new yl.a(e,r).lift(new vc(n))}(p(e).map(function(e){return t._registerQuery(e).observable}),function(e,t){return{matches:!!(e&&e.matches||t&&t.matches)}})},e.prototype._registerQuery=function(e){var t=this;if(this._queries.has(e))return this._queries.get(e);var n=this.mediaMatcher.matchMedia(e),r={observable:_c(function(e){n.addListener(function(n){return t.zone.run(function(){return e(n)})})},function(e){n.removeListener(function(n){return t.zone.run(function(){return e(n)})})}).pipe(Object(Hu.a)(this._destroySubject),P(n),Object(wa.a)(function(e){return{matches:e.matches}})),mql:n};return this._queries.set(e,r),r},e}(),Ec=function(){},Sc=function(){function e(e,t){var n=this;this._overlayRef=t,this._afterClosed=new ml.Subject,this._afterOpened=new ml.Subject,this._onAction=new ml.Subject,this.containerInstance=e,this.onAction().subscribe(function(){return n.dismiss()}),e._onExit.subscribe(function(){return n._finishDismiss()})}return e.prototype.dismiss=function(){this._afterClosed.closed||this.containerInstance.exit(),clearTimeout(this._durationTimeoutId)},e.prototype.closeWithAction=function(){this._onAction.closed||(this._onAction.next(),this._onAction.complete())},e.prototype._dismissAfter=function(e){var t=this;this._durationTimeoutId=setTimeout(function(){return t.dismiss()},e)},e.prototype._open=function(){this._afterOpened.closed||(this._afterOpened.next(),this._afterOpened.complete())},e.prototype._finishDismiss=function(){this._overlayRef.dispose(),this._onAction.closed||this._onAction.complete(),this._afterClosed.next(),this._afterClosed.complete()},e.prototype.afterDismissed=function(){return this._afterClosed.asObservable()},e.prototype.afterOpened=function(){return this.containerInstance._onEnter},e.prototype.onAction=function(){return this._onAction.asObservable()},e}(),Oc=new al.InjectionToken("MatSnackBarData"),Tc=function(){this.politeness="assertive",this.announcementMessage="",this.duration=0,this.direction="ltr",this.data=null,this.horizontalPosition="center",this.verticalPosition="bottom"},kc=function(){function e(e,t){this.snackBarRef=e,this.data=t}return e.prototype.action=function(){this.snackBarRef.closeWithAction()},Object.defineProperty(e.prototype,"hasAction",{get:function(){return!!this.data.action},enumerable:!0,configurable:!0}),e}(),Dc=function(e){function t(t,n,r){var i=e.call(this)||this;return i._ngZone=t,i._elementRef=n,i._changeDetectorRef=r,i._destroyed=!1,i._onExit=new ml.Subject,i._onEnter=new ml.Subject,i._animationState="void",i}return Object(bl.__extends)(t,e),t.prototype.attachComponentPortal=function(e){if(this._portalOutlet.hasAttached())throw Error("Attempting to attach snack bar content after content is already attached");var t=this._elementRef.nativeElement;return(this.snackBarConfig.panelClass||this.snackBarConfig.extraClasses)&&(this._setCssClasses(this.snackBarConfig.panelClass),this._setCssClasses(this.snackBarConfig.extraClasses)),"center"===this.snackBarConfig.horizontalPosition&&t.classList.add("mat-snack-bar-center"),"top"===this.snackBarConfig.verticalPosition&&t.classList.add("mat-snack-bar-top"),this._portalOutlet.attachComponentPortal(e)},t.prototype.attachTemplatePortal=function(){throw Error("Not yet implemented")},t.prototype.onAnimationEnd=function(e){var t=e.toState;if(("void"===t&&"void"!==e.fromState||t.startsWith("hidden"))&&this._completeExit(),t.startsWith("visible")){var n=this._onEnter;this._ngZone.run(function(){n.next(),n.complete()})}},t.prototype.enter=function(){this._destroyed||(this._animationState="visible-"+this.snackBarConfig.verticalPosition,this._changeDetectorRef.detectChanges())},t.prototype.exit=function(){return this._animationState="hidden-"+this.snackBarConfig.verticalPosition,this._onExit},t.prototype.ngOnDestroy=function(){this._destroyed=!0,this._completeExit()},t.prototype._completeExit=function(){var e=this;this._ngZone.onMicrotaskEmpty.asObservable().pipe(u(1)).subscribe(function(){e._onExit.next(),e._onExit.complete()})},t.prototype._setCssClasses=function(e){if(e){var t=this._elementRef.nativeElement;Array.isArray(e)?e.forEach(function(e){return t.classList.add(e)}):t.classList.add(e)}},t}(Gl),Ic=function(){function e(e,t,n,r,i){this._overlay=e,this._live=t,this._injector=n,this._breakpointObserver=r,this._parentSnackBar=i,this._snackBarRefAtThisLevel=null}return Object.defineProperty(e.prototype,"_openedSnackBarRef",{get:function(){var e=this._parentSnackBar;return e?e._openedSnackBarRef:this._snackBarRefAtThisLevel},set:function(e){this._parentSnackBar?this._parentSnackBar._openedSnackBarRef=e:this._snackBarRefAtThisLevel=e},enumerable:!0,configurable:!0}),e.prototype.openFromComponent=function(e,t){var n=this,r=ye(t),i=this._attach(e,r);return i.afterDismissed().subscribe(function(){n._openedSnackBarRef==i&&(n._openedSnackBarRef=null)}),this._openedSnackBarRef?(this._openedSnackBarRef.afterDismissed().subscribe(function(){i.containerInstance.enter()}),this._openedSnackBarRef.dismiss()):i.containerInstance.enter(),r.duration&&r.duration>0&&i.afterOpened().subscribe(function(){return i._dismissAfter(r.duration)}),r.announcementMessage&&this._live.announce(r.announcementMessage,r.politeness),this._openedSnackBarRef=i,this._openedSnackBarRef},e.prototype.open=function(e,t,n){void 0===t&&(t="");var r=ye(n);return r.data={message:e,action:t},r.announcementMessage=e,this.openFromComponent(kc,r)},e.prototype.dismiss=function(){this._openedSnackBarRef&&this._openedSnackBarRef.dismiss()},e.prototype._attachSnackBarContainer=function(e,t){var n=new ql(Dc,t.viewContainerRef),r=e.attach(n);return r.instance.snackBarConfig=t,r.instance},e.prototype._attach=function(e,t){var n=this._createOverlay(t),r=this._attachSnackBarContainer(n,t),i=new Sc(r,n),o=this._createInjector(t,i),l=new ql(e,void 0,o),a=r.attachComponentPortal(l);return i.instance=a.instance,this._breakpointObserver.observe("(max-width: 599px) and (orientation: portrait), (max-width: 959px) and (orientation: landscape)").pipe(Object(Hu.a)(n.detachments().pipe(u(1)))).subscribe(function(e){e.matches?n.overlayElement.classList.add("mat-snack-bar-handset"):n.overlayElement.classList.remove("mat-snack-bar-handset")}),i},e.prototype._createOverlay=function(e){var t=new ra;t.direction=e.direction;var n=this._overlay.position().global(),r="rtl"===e.direction,i="left"===e.horizontalPosition||"start"===e.horizontalPosition&&!r||"end"===e.horizontalPosition&&r,o=!i&&"center"!==e.horizontalPosition;return i?n.left("0"):o?n.right("0"):n.centerHorizontally(),"top"===e.verticalPosition?n.top("0"):n.bottom("0"),t.positionStrategy=n,this._overlay.create(t)},e.prototype._createInjector=function(e,t){var n=e&&e.viewContainerRef&&e.viewContainerRef.injector,r=new WeakMap;return r.set(Sc,t),r.set(Oc,e.data),new Ql(n||this._injector,r)},e}(),Rc=function(){},Mc=al["\u0275crt"]({encapsulation:2,styles:[".mat-snack-bar-container{border-radius:2px;box-sizing:border-box;display:block;margin:24px;max-width:568px;min-width:288px;padding:14px 24px;transform:translateY(100%) translateY(24px)}.mat-snack-bar-container.mat-snack-bar-center{margin:0;transform:translateY(100%)}.mat-snack-bar-container.mat-snack-bar-top{transform:translateY(-100%) translateY(-24px)}.mat-snack-bar-container.mat-snack-bar-top.mat-snack-bar-center{transform:translateY(-100%)}@media screen and (-ms-high-contrast:active){.mat-snack-bar-container{border:solid 1px}}.mat-snack-bar-handset{width:100%}.mat-snack-bar-handset .mat-snack-bar-container{margin:0;max-width:inherit;width:100%}"],data:{animation:[{type:7,name:"state",definitions:[{type:0,name:"visible-top, visible-bottom",styles:{type:6,styles:{transform:"translateY(0%)"},offset:null},options:void 0},{type:1,expr:"visible-top => hidden-top, visible-bottom => hidden-bottom",animation:{type:4,styles:null,timings:"195ms cubic-bezier(0.4,0.0,1,1)"},options:null},{type:1,expr:"void => visible-top, void => visible-bottom",animation:{type:4,styles:null,timings:"225ms cubic-bezier(0.0,0.0,0.2,1)"},options:null}],options:{}}]}}),Pc=al["\u0275ccf"]("snack-bar-container",Dc,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"snack-bar-container",[["class","mat-snack-bar-container"],["role","alert"]],[[40,"@state",0]],[["component","@state.done"]],function(e,t,n){var r=!0;return"component:@state.done"===t&&(r=!1!==al["\u0275nov"](e,1).onAnimationEnd(n)&&r),r},be,Mc)),al["\u0275did"](1,180224,null,0,Dc,[al.NgZone,al.ElementRef,al.ChangeDetectorRef],null,null)],null,function(e,t){e(t,0,0,al["\u0275nov"](t,1)._animationState)})},{},{},[]),Nc=al["\u0275crt"]({encapsulation:2,styles:[".mat-simple-snackbar{display:flex;justify-content:space-between;line-height:20px;opacity:1}.mat-simple-snackbar-action{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;background:0 0;flex-shrink:0;margin-left:48px}[dir=rtl] .mat-simple-snackbar-action{margin-right:48px;margin-left:0}"],data:{animation:[{type:7,name:"contentFade",definitions:[{type:1,expr:":enter",animation:[{type:6,styles:{opacity:"0"},offset:null},{type:4,styles:null,timings:"375ms cubic-bezier(0.4,0.0,0.2,1)"}],options:null}],options:{}}]}}),Ac=al["\u0275ccf"]("simple-snack-bar",kc,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"simple-snack-bar",[["class","mat-simple-snackbar"]],[[40,"@contentFade",0]],null,null,we,Nc)),al["\u0275did"](1,49152,null,0,kc,[Sc,Oc],null,null)],null,function(e,t){e(t,0,0,void 0)})},{},{},[]),Lc=function(){},Fc=function(){function e(e,t,n){void 0===e&&(e=!1),void 0===n&&(n=!0);var r=this;this._isMulti=e,this._emitChanges=n,this._selection=new Set,this._deselectedToEmit=[],this._selectedToEmit=[],this.onChange=this._emitChanges?new ml.Subject:null,t&&(e?t.forEach(function(e){return r._markSelected(e)}):this._markSelected(t[0]),this._selectedToEmit.length=0)}return Object.defineProperty(e.prototype,"selected",{get:function(){return this._selected||(this._selected=Array.from(this._selection.values())),this._selected},enumerable:!0,configurable:!0}),e.prototype.select=function(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this._verifyValueAssignment(t),t.forEach(function(t){return e._markSelected(t)}),this._emitChangeEvent()},e.prototype.deselect=function(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this._verifyValueAssignment(t),t.forEach(function(t){return e._unmarkSelected(t)}),this._emitChangeEvent()},e.prototype.toggle=function(e){this.isSelected(e)?this.deselect(e):this.select(e)},e.prototype.clear=function(){this._unmarkAll(),this._emitChangeEvent()},e.prototype.isSelected=function(e){return this._selection.has(e)},e.prototype.isEmpty=function(){return 0===this._selection.size},e.prototype.hasValue=function(){return!this.isEmpty()},e.prototype.sort=function(e){this._isMulti&&this._selected&&this._selected.sort(e)},e.prototype._emitChangeEvent=function(){if(this._selected=null,this._selectedToEmit.length||this._deselectedToEmit.length){var e=new jc(this._selectedToEmit,this._deselectedToEmit);this.onChange&&this.onChange.next(e),this._deselectedToEmit=[],this._selectedToEmit=[]}},e.prototype._markSelected=function(e){this.isSelected(e)||(this._isMulti||this._unmarkAll(),this._selection.add(e),this._emitChanges&&this._selectedToEmit.push(e))},e.prototype._unmarkSelected=function(e){this.isSelected(e)&&(this._selection.delete(e),this._emitChanges&&this._deselectedToEmit.push(e))},e.prototype._unmarkAll=function(){var e=this;this.isEmpty()||this._selection.forEach(function(t){return e._unmarkSelected(t)})},e.prototype._verifyValueAssignment=function(e){if(e.length>1&&!this._isMulti)throw Error("Cannot pass multiple values into SelectionModel with single-value mode.")},e}(),jc=function(e,t){this.added=e,this.removed=t},Vc=function(){function e(){this._listeners=[]}return e.prototype.notify=function(e,t){for(var n=0,r=this._listeners;n<r.length;n++)(0,r[n])(e,t)},e.prototype.listen=function(e){var t=this;return this._listeners.push(e),function(){t._listeners=t._listeners.filter(function(t){return e!==t})}},e}(),zc=n("eoFs"),Bc=function(){function e(e,t){this.template=e,this._differs=t}return e.prototype.ngOnChanges=function(e){var t=e.columns.currentValue||[];this._columnsDiffer||(this._columnsDiffer=this._differs.find(t).create(),this._columnsDiffer.diff(t))},e.prototype.getColumnsDiff=function(){return this._columnsDiffer.diff(this.columns)},e}(),Hc=function(e){function t(t,n){return e.call(this,t,n)||this}return Object(bl.__extends)(t,e),t}(Bc),Wc=function(e){function t(t,n){return e.call(this,t,n)||this}return Object(bl.__extends)(t,e),t}(Bc),qc=function(){function e(t){this._viewContainer=t,e.mostRecentCellOutlet=this}return e.mostRecentCellOutlet=null,e}(),Uc=function(e){this.template=e},Gc=function(e){this.template=e},Kc=function(){function e(){}return Object.defineProperty(e.prototype,"name",{get:function(){return this._name},set:function(e){this._name=e,this.cssClassFriendlyName=e.replace(/[^a-z0-9_-]/gi,"-")},enumerable:!0,configurable:!0}),e}(),$c=function(e){this.viewContainer=e},Zc=function(e){this.viewContainer=e},Qc=function(){function e(e,t,n,r){this._differs=e,this._changeDetectorRef=t,this._onDestroy=new ml.Subject,this._data=[],this._columnDefsByName=new Map,this.viewChange=new zc.a({start:0,end:Number.MAX_VALUE}),r||n.nativeElement.setAttribute("role","grid")}return Object.defineProperty(e.prototype,"trackBy",{get:function(){return this._trackByFn},set:function(e){Object(al.isDevMode)()&&null!=e&&"function"!=typeof e&&console&&console.warn&&console.warn("trackBy must be a function, but received "+JSON.stringify(e)+"."),this._trackByFn=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"dataSource",{get:function(){return this._dataSource},set:function(e){this._dataSource!==e&&this._switchDataSource(e)},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){this._dataDiffer=this._differs.find([]).create(this._trackByFn)},e.prototype.ngAfterContentInit=function(){var e=this;if(!this._headerDef&&!this._rowDefs.length)throw Error("Missing definitions for header and row, cannot determine which columns should be rendered.");this._cacheColumnDefsByName(),this._columnDefs.changes.subscribe(function(){return e._cacheColumnDefsByName()}),this._renderHeaderRow()},e.prototype.ngAfterContentChecked=function(){this._renderUpdatedColumns();var e=this._rowDefs.filter(function(e){return!e.when});if(e.length>1)throw Error("There can only be one default row without a when predicate function.");this._defaultRowDef=e[0],this.dataSource&&!this._renderChangeSubscription&&this._observeRenderChanges()},e.prototype.ngOnDestroy=function(){this._rowPlaceholder.viewContainer.clear(),this._headerRowPlaceholder.viewContainer.clear(),this._onDestroy.next(),this._onDestroy.complete(),this.dataSource&&this.dataSource.disconnect(this)},e.prototype._cacheColumnDefsByName=function(){var e=this;this._columnDefsByName.clear(),this._columnDefs.forEach(function(t){if(e._columnDefsByName.has(t.name))throw function(e){return Error('Duplicate column definition name provided: "'+e+'".')}(t.name);e._columnDefsByName.set(t.name,t)})},e.prototype._renderUpdatedColumns=function(){var e=this;this._rowDefs.forEach(function(t){t.getColumnsDiff()&&(e._dataDiffer.diff([]),e._rowPlaceholder.viewContainer.clear(),e._renderRowChanges())}),this._headerDef.getColumnsDiff()&&(this._headerRowPlaceholder.viewContainer.clear(),this._renderHeaderRow())},e.prototype._switchDataSource=function(e){this._data=[],this.dataSource&&this.dataSource.disconnect(this),this._renderChangeSubscription&&(this._renderChangeSubscription.unsubscribe(),this._renderChangeSubscription=null),e||this._rowPlaceholder.viewContainer.clear(),this._dataSource=e},e.prototype._observeRenderChanges=function(){var e=this;this._renderChangeSubscription=this.dataSource.connect(this).pipe(Object(Hu.a)(this._onDestroy)).subscribe(function(t){e._data=t,e._renderRowChanges()})},e.prototype._renderHeaderRow=function(){var e=this._getHeaderCellTemplatesForRow(this._headerDef);e.length&&(this._headerRowPlaceholder.viewContainer.createEmbeddedView(this._headerDef.template,{cells:e}),e.forEach(function(e){qc.mostRecentCellOutlet&&qc.mostRecentCellOutlet._viewContainer.createEmbeddedView(e.template,{})}),this._changeDetectorRef.markForCheck())},e.prototype._renderRowChanges=function(){var e=this,t=this._dataDiffer.diff(this._data);if(t){var n=this._rowPlaceholder.viewContainer;t.forEachOperation(function(t,r,i){if(null==t.previousIndex)e._insertRow(t.item,i);else if(null==i)n.remove(r);else{var o=n.get(r);n.move(o,i)}}),this._updateRowIndexContext(),t.forEachIdentityChange(function(e){n.get(e.currentIndex).context.$implicit=e.item})}},e.prototype._getRowDef=function(e,t){if(1==this._rowDefs.length)return this._rowDefs.first;var n=this._rowDefs.find(function(n){return n.when&&n.when(t,e)})||this._defaultRowDef;if(!n)throw Error("Could not find a matching row definition for the provided row data.");return n},e.prototype._insertRow=function(e,t){var n=this._getRowDef(e,t),r={$implicit:e};this._rowPlaceholder.viewContainer.createEmbeddedView(n.template,r,t),this._getCellTemplatesForRow(n).forEach(function(e){qc.mostRecentCellOutlet&&qc.mostRecentCellOutlet._viewContainer.createEmbeddedView(e.template,r)}),this._changeDetectorRef.markForCheck()},e.prototype._updateRowIndexContext=function(){for(var e=this._rowPlaceholder.viewContainer,t=0,n=e.length;t<n;t++){var r=e.get(t);r.context.index=t,r.context.count=n,r.context.first=0===t,r.context.last=t===n-1,r.context.even=t%2==0,r.context.odd=!r.context.even}},e.prototype._getHeaderCellTemplatesForRow=function(e){var t=this;return e.columns?e.columns.map(function(e){var n=t._columnDefsByName.get(e);if(!n)throw Ce(e);return n.headerCell}):[]},e.prototype._getCellTemplatesForRow=function(e){var t=this;return e.columns?e.columns.map(function(e){var n=t._columnDefsByName.get(e);if(!n)throw Ce(e);return n.cell}):[]},e}(),Yc=function(){},Xc=(n("3m71"),function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t}(Qc)),Jc=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t}(Uc),ed=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t}(Gc),td=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t}(Kc),nd=function(e){function t(t,n){var r=e.call(this,t,n)||this;return n.nativeElement.classList.add("mat-column-"+t.cssClassFriendlyName),r}return Object(bl.__extends)(t,e),t}(function(e,t){t.nativeElement.classList.add("cdk-column-"+e.cssClassFriendlyName)}),rd=function(e){function t(t,n){var r=e.call(this,t,n)||this;return n.nativeElement.classList.add("mat-column-"+t.cssClassFriendlyName),r}return Object(bl.__extends)(t,e),t}(function(e,t){t.nativeElement.classList.add("cdk-column-"+e.cssClassFriendlyName)}),id=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t}(Hc),od=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t}(Wc),ld=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t}(function(){}),ad=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t}(function(){}),sd=function(){},ud=al["\u0275crt"]({encapsulation:2,styles:[".mat-table{display:block}.mat-header-row,.mat-row{display:flex;border-bottom-width:1px;border-bottom-style:solid;align-items:center;min-height:48px;padding:0 24px}.mat-cell,.mat-header-cell{flex:1;overflow:hidden;word-wrap:break-word}"],data:{}}),cd=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),dd=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),pd=function(){},fd=function(){this.align="start"},hd=function(){},md=function(){},gd=al["\u0275crt"]({encapsulation:2,styles:[".mat-card{transition:box-shadow 280ms cubic-bezier(.4,0,.2,1);display:block;position:relative;padding:24px;border-radius:2px}.mat-card:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}@media screen and (-ms-high-contrast:active){.mat-card{outline:solid 1px}}.mat-card-flat{box-shadow:none}.mat-card-actions,.mat-card-content,.mat-card-subtitle,.mat-card-title{display:block;margin-bottom:16px}.mat-card-actions{margin-left:-16px;margin-right:-16px;padding:8px 0}.mat-card-actions-align-end{display:flex;justify-content:flex-end}.mat-card-image{width:calc(100% + 48px);margin:0 -24px 16px -24px}.mat-card-xl-image{width:240px;height:240px;margin:-8px}.mat-card-footer{display:block;margin:0 -24px -24px -24px}.mat-card-actions .mat-button,.mat-card-actions .mat-raised-button{margin:0 4px}.mat-card-header{display:flex;flex-direction:row}.mat-card-header-text{margin:0 8px}.mat-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0}.mat-card-lg-image,.mat-card-md-image,.mat-card-sm-image{margin:-8px 0}.mat-card-title-group{display:flex;justify-content:space-between;margin:0 -8px}.mat-card-sm-image{width:80px;height:80px}.mat-card-md-image{width:112px;height:112px}.mat-card-lg-image{width:152px;height:152px}@media (max-width:600px){.mat-card{padding:24px 16px}.mat-card-actions{margin-left:-8px;margin-right:-8px}.mat-card-image{width:calc(100% + 32px);margin:16px -16px}.mat-card-title-group{margin:0}.mat-card-xl-image{margin-left:0;margin-right:0}.mat-card-header{margin:-8px 0 0 0}.mat-card-footer{margin-left:-16px;margin-right:-16px}}.mat-card-content>:first-child,.mat-card>:first-child{margin-top:0}.mat-card-content>:last-child:not(.mat-card-footer),.mat-card>:last-child:not(.mat-card-footer){margin-bottom:0}.mat-card-image:first-child{margin-top:-24px}.mat-card>.mat-card-actions:last-child{margin-bottom:-16px;padding-bottom:0}.mat-card-actions .mat-button:first-child,.mat-card-actions .mat-raised-button:first-child{margin-left:0;margin-right:0}.mat-card-subtitle:not(:first-child),.mat-card-title:not(:first-child){margin-top:-4px}.mat-card-header .mat-card-subtitle:not(:first-child){margin-top:-8px}.mat-card>.mat-card-xl-image:first-child{margin-top:-8px}.mat-card>.mat-card-xl-image:last-child{margin-bottom:-8px}"],data:{}}),yd=function(e){function t(t,n){var r=e.call(this,t)||this;return r._platform=n,r}return Object(bl.__extends)(t,e),t.prototype.ngAfterViewInit=function(){var e=this;Object(al.isDevMode)()&&this._platform.isBrowser&&(this._checkToolbarMixedModes(),this._toolbarRows.changes.subscribe(function(){return e._checkToolbarMixedModes()}))},t.prototype._checkToolbarMixedModes=function(){this._toolbarRows.length&&[].slice.call(this._elementRef.nativeElement.childNodes).filter(function(e){return!(e.classList&&e.classList.contains("mat-toolbar-row"))}).filter(function(e){return e.nodeType!==Node.COMMENT_NODE}).some(function(e){return e.textContent.trim()})&&function(){throw Error("MatToolbar: Attempting to combine different toolbar modes. Either specify multiple `<mat-toolbar-row>` elements explicitly or just place content inside of a `<mat-toolbar>` for a single row.")}()},t}(I(function(e){this._elementRef=e})),vd=function(){},bd=al["\u0275crt"]({encapsulation:2,styles:[".mat-toolbar-row,.mat-toolbar-single-row{display:flex;box-sizing:border-box;padding:0 16px;width:100%;flex-direction:row;align-items:center;white-space:nowrap}.mat-toolbar-multiple-rows{display:flex;box-sizing:border-box;flex-direction:column;width:100%}.mat-toolbar-multiple-rows{min-height:64px}.mat-toolbar-row,.mat-toolbar-single-row{height:64px}@media (max-width:600px){.mat-toolbar-multiple-rows{min-height:56px}.mat-toolbar-row,.mat-toolbar-single-row{height:56px}}"],data:{}}),_d=n("oiK7"),wd=function(){function e(){this.change=new al.EventEmitter,this.focus=new al.EventEmitter,this.blur=new al.EventEmitter,this.instance=null,this._value="",this.codemirrorMetadataConfig={mode:"asterix",lineWrapping:!0,showCursorWhenSelecting:!0,autofocus:!0},_d.defineMode("asterix",function(){var e=["drop","dataverse","dataset","if","exists","create","use","type","as","closed","primary","key","hints","cardinality","index","on","btree","rtree","keyword","for","in","Metadata","Dataset","return","Index","load","using","localfs","path","format","from","in","with","group","by","select","let","where","order","asc","desc","limit","keeping","offset","distinct","or","and","boolean","tinyint","smallint","integer","bigint","float","double","string","binary","hex","base64","point","line","rectangle","circle","polygon","date","time","datetime","duration","interval","uuid","null","missing","DROP","DATAVERSE","IF","EXISTS","CREATE","USE","TYPE","AS","DATASET","PRIMARY","KEY","INDEX","SELECT","VALUE","INSERT","INTO","FROM","WHERE","AND","SOME","IN","SATISFIES","IS","UNKNOWN","NOT","EVERY","GROUP","BY","ORDER","DESC","LIMIT","OR","SET","DELETE","LOAD","USING"],t=/[$][a-zA-Z]+(\d*)/,n=/[.](\S)*/,r=/["].*["]/,i=/['].*[']/;return{startState:function(){return{inString:!1}},token:function(o,l){if(void 0==l.newLine&&(l.newLine=!0),o.match(t))return"variable";if(o.match(n))return"dot-variable";if(o.match(r))return"string";if(o.match(i))return"string";for(var a in e)if(l.newLine&&o.match(e[a]))return"keyword";return l.newLine=" "===o.peek()||null===o.peek(),o.next(),null}}})}return Object.defineProperty(e.prototype,"value",{get:function(){return this._value},set:function(e){e!==this._value&&(this._value=e,this.onChange(e))},enumerable:!0,configurable:!0}),e.prototype.ngOnDestroy=function(){},e.prototype.ngAfterViewInit=function(){this.config=this.config||{},this.codemirrorInit(this.config)},e.prototype.codemirrorInit=function(e){var t=this;this.instance=_d.fromTextArea(this.hostMetadata.nativeElement,this.codemirrorMetadataConfig),this.instance.setSize("100%","100px"),this.instance.on("change",function(){t.updateValue(t.instance.getValue())}),this.instance.on("focus",function(){t.focus.emit()}),this.instance.on("blur",function(){t.blur.emit()})},e.prototype.updateValue=function(e){this.value=e,this.onTouched(),this.change.emit(e)},e.prototype.writeValue=function(e){this._value=e||"",this.instance&&this.instance.setValue(this._value)},e.prototype.onChange=function(e){},e.prototype.onTouched=function(){},e.prototype.registerOnChange=function(e){this.onChange=e},e.prototype.registerOnTouched=function(e){this.onTouched=e},e}(),xd=al["\u0275crt"]({encapsulation:0,styles:[[".textarea-metadata[_ngcontent-%COMP%]{background-color:red!important;border:1px solid #000!important;padding:0;margin:0}codemirror-metadata[_ngcontent-%COMP%]{border:1px solid #eee;height:auto;background-color:blue!important;padding:0;margin:0}"]],data:{}}),Cd="[Query] Execute SQL++ Query",Ed="[Query] Execute SQL++ Query Success",Sd="[Query] Execute SQL++ Query Fail",Od="[Query] Execute Metadata SQL++ Query",Td="[Query] Execute Metadata SQL++ Query Success",kd="[Query] Execute Metadata SQL++ Query Fail",Dd=function(){return function(e){this.payload=e,this.type=Cd}}(),Id=function(){return function(e){this.payload=e,this.type=Ed}}(),Rd=function(){return function(e){this.payload=e,this.type=Sd}}(),Md=function(){return function(e){this.payload=e,this.type=Od}}(),Pd=function(){return function(e){this.payload=e,this.type=Td}}(),Nd=function(){return function(e){this.payload=e,this.type=kd}}(),Ad="[Dataverse Collection] Select Dataverses",Ld="[Dataverse Collection] Select Dataverses Success",Fd="[Dataverse Collection] Create Dataverse",jd="[Dataverse Collection] Create Dataverse Success",Vd="[Dataverse Collection] Create Dataverse Fail",zd="[Dataverse Collection] Drop Dataverses",Bd="[Dataverse Collection] Drop Dataverses Success",Hd="[Dataverse Collection] Drop Dataverses Fail",Wd=function(){return function(e){this.payload=e,this.type=Ad}}(),qd=function(){return function(e){this.payload=e,this.type=Ld}}(),Ud=function(e){this.payload=e,this.type="[Dataverse Collection] Select Dataverses Fail"},Gd=function(){return function(e){this.payload=e,this.type=Fd}}(),Kd=function(){return function(e){this.payload=e,this.type=jd}}(),$d=function(){return function(e){this.payload=e,this.type=Vd}}(),Zd=function(){return function(e){this.payload=e,this.type=zd}}(),Qd=function(){return function(e){this.payload=e,this.type=Bd}}(),Yd=function(){return function(e){this.payload=e,this.type=Hd}}(),Xd="[Dataset Collection] Select Dataset",Jd="[Dataset Collection] Select Dataset Success",ep="[Dataset Collection] Create Dataset",tp="[Dataset Collection] Create Dataset Success",np="[Dataset Collection] Create Dataset Fail",rp="[Dataset Collection] Drop Dataset",ip="[Dataset Collection] Drop Dataset Success",op="[Dataset Collection] Drop Dataset Fail",lp="[Dataset Collection] Guide Select Dataset",ap=function(){return function(e){this.payload=e,this.type=lp}}(),sp=function(){return function(e){this.payload=e,this.type=Xd}}(),up=function(){return function(e){this.payload=e,this.type=Jd}}(),cp=function(e){this.payload=e,this.type="[Dataset Collection] Select Dataset Fail"},dp=function(){return function(e){this.payload=e,this.type=ep}}(),pp=function(){return function(e){this.payload=e,this.type=tp}}(),fp=function(){return function(e){this.payload=e,this.type=np}}(),hp=function(){return function(e){this.payload=e,this.type=rp}}(),mp=function(){return function(e){this.payload=e,this.type=ip}}(),gp=function(){return function(e){this.payload=e,this.type=op}}(),yp="[Datatype Collection] Select Datatypes",vp="[Datatype Collection] Select Datatypes Success",bp="[Datatype Collection] Create Datatypes",_p="[Datatype Collection] Create Datatypes Success",wp="[Datatype Collection] Create Datatypes Fail",xp="[Datatype Collection] Drop Datatypes",Cp="[Datatype Collection] Drop Datatypes Success",Ep="[Datatype Collection] Drop Datatypes Fail",Sp=function(){return function(e){this.payload=e,this.type=yp}}(),Op=function(){return function(e){this.payload=e,this.type=vp}}(),Tp=function(e){this.payload=e,this.type="[Datatype Collection] Select Datatypes Fail"},kp=function(){return function(e){this.payload=e,this.type=bp}}(),Dp=function(){return function(e){this.payload=e,this.type=_p}}(),Ip=function(){return function(e){this.payload=e,this.type=wp}}(),Rp=function(){return function(e){this.payload=e,this.type=xp}}(),Mp=function(){return function(e){this.payload=e,this.type=Cp}}(),Pp=function(){return function(e){this.payload=e,this.type=Ep}}(),Np="[Index Collection] Select Indexes",Ap="[Index Collection] Select Indexes Success",Lp="[Index Collection] Create Index",Fp="[Index Collection] Create Index Success",jp="[Index Collection] Drop Indexes",Vp="[Index Collection] Drop Indexes Success",zp="[Index Collection] Drop Indexes Fail",Bp=function(){return function(e){this.payload=e,this.type=Np}}(),Hp=function(){return function(e){this.payload=e,this.type=Ap}}(),Wp=function(e){this.payload=e,this.type="[Index Collection] Select Indexes Fail"},qp=function(){return function(e){this.payload=e,this.type=Lp}}(),Up=function(){return function(e){this.payload=e,this.type=Fp}}(),Gp=function(e){this.payload=e,this.type="[Index Collection] Create Index Fail"},Kp=function(){return function(e){this.payload=e,this.type=jp}}(),$p=function(){return function(e){this.payload=e,this.type=Vp}}(),Zp=function(){return function(e){this.payload=e,this.type=zp}}(),Qp=function(){function e(e,t){var n=this;this.store=e,this.changeDetector=t,this.dataverses=[],this.datatypes=[],this.datasets=[],this.indexes=[],this.queryMetadataString="",this.errorMessage="",this.codemirrorMetadataConfig={mode:"asterix",lineWrapping:!0,showCursorWhenSelecting:!0,autofocus:!0},this.store.select("sqlMetadataQuery").subscribe(function(e){if(!1===e.success)e.sqlQueryMetadataError.errors&&(n.errorMessage="ERROR: "+e.sqlQueryMetadataError.errors[0].msg,n.changeDetector.detectChanges());else{n.errorMessage="SUCCEED";var t=e.sqlQueryMetadataString;(t=t.toUpperCase()).includes("CREATE DATAVERSE")||t.includes("DROP DATAVERSE")?n.store.dispatch(new Wd("-")):t.includes("CREATE DATASET")||t.includes("DROP DATASET")?n.store.dispatch(new sp("-")):t.includes("CREATE TYPE")||t.includes("DROP TYPE")?n.store.dispatch(new Sp("-")):(t.includes("CREATE INDEX")||t.includes("DROP INDEX"))&&n.store.dispatch(new Bp("-")),n.changeDetector.detectChanges()}})}return e.prototype.getQueryResults=function(e){this.store.dispatch(new Md(e))},e.prototype.executeQuery=function(){this.getQueryResults(this.queryMetadataString.replace(/\n/g," "))},e.prototype.onClick=function(){this.errorMessage=""},e.prototype.cleanUp=function(){this.errorMessage=""},e}(),Yp=n("ADVA"),Xp=al["\u0275crt"]({encapsulation:0,styles:[[".input-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;padding:0;margin:0 auto;margin-top:8px;height:250px;width:95%;overflow:hidden}.toolbar-icon[_ngcontent-%COMP%]{padding:0 14px 0 0;margin:0}.spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.input-selector[_ngcontent-%COMP%]{max-height:42px;min-height:42px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:.8rem;font-weight:500;background-color:#fff;border:1px solid rgba(54,147,209,.87)}.content-area[_ngcontent-%COMP%]{position:relative;color:rgba(0,0,0,.87);height:120px;padding:0;margin:16px;overflow:none}.codemirror-container[_ngcontent-%COMP%]{width:100%;height:100%;padding:0;margin:0;font-size:14px;line-height:1.8}.actions[_ngcontent-%COMP%]{border-top:1px solid rgba(0,0,0,.1);color:rgba(54,147,209,.87);padding:8px;margin:0}.error-message[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.1);color:rgba(209,54,54,.87);padding-top:10px;padding-left:20px;text-overflow:ellipsis}"]],data:{}});gl.a.prototype.startWith=function(){for(var e=[],t=0;t<arguments.length;t++)e[t-0]=arguments[t];return P.apply(void 0,e)(this)},gl.a.merge=Ll.a,gl.a.prototype.map=iu.a,gl.a.prototype.debounceTime=function(e,t){return void 0===t&&(t=Tl),_(e,t)(this)};var Jp=n("6y8h");gl.a.prototype.distinctUntilChanged=Jp.a,gl.a.fromEvent=Sl;var ef=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),tf=function(){function e(e,t){var n=this;this.store=e,this.dialog=t,this.displayedColumns=["DataverseName","Dataformat","Timestamp","PendingOp"],this.selection=new Fc(!0,[]),this.errorMessage="",this.dvName="",this.selectedRowIndex=-1,this.loaded$=this.store.select("dataverse"),this.store.select(function(e){return e.dataverse.createDataverseName}).subscribe(function(e){n.dvName=e}),this.store.select(function(e){return e.dataverse.dropDataverseName}).subscribe(function(e){n.dvName=e}),this.store.select(function(e){return e.dataverse.createDataverseSuccess}).subscribe(function(e){!0===e&&(n.getDataverse(),n.errorMessage="SUCCEED: CREATED DATAVERSE "+n.dvName+" ")}),this.store.select(function(e){return e.dataverse.createDataverseError}).subscribe(function(e){e.errors&&(n.errorMessage="ERROR: "+e.errors[0].msg)}),this.store.select(function(e){return e.dataverse.dropDataverseSuccess}).subscribe(function(e){!0===e&&(n.getDataverse(),n.errorMessage="SUCCEED: DROP DATAVERSE "+n.dvName)}),this.store.select(function(e){return e.dataverse.dropDataverseError}).subscribe(function(e){e.errors&&(n.errorMessage="ERROR: "+e.errors[0].msg)})}return e.prototype.getDataverse=function(){this.store.dispatch(new Wd("-"))},e.prototype.ngOnInit=function(){this.dataSource=new of(this.store)},e.prototype.ngAfterViewChecked=function(){},e.prototype.ngAfterViewInit=function(){},e.prototype.openCreateDataverseDialog=function(){this.dialog.open(nf,{width:"420px",data:{name:this.dataverseName}}).afterClosed().subscribe(function(e){})},e.prototype.openDropDataverseDialog=function(){var e=this;this.dialog.open(rf,{width:"420px",data:{name:this.dataverseName}}).afterClosed().subscribe(function(t){e.dataverseName=t})},e.prototype.onClick=function(){this.errorMessage=""},e.prototype.highlight=function(e){this.output=JSON.stringify(e,null,2)},e.prototype.cleanUp=function(){this.errorMessage="",this.inputQuery.cleanUp()},e}(),nf=function(){function e(e,t,n){this.store=e,this.dialogCreateDvRef=t,this.data=n}return e.prototype.onClick=function(){this.store.dispatch(new Gd(this.data.dataverseName)),this.dialogCreateDvRef.close(this.data.dataverseName)},e.prototype.onNoClick=function(){this.dialogCreateDvRef.close()},e}(),rf=function(){function e(e,t,n){this.store=e,this.dialogDropDvRef=t,this.data=n}return e.prototype.onClick=function(){this.store.dispatch(new Zd(this.data.dataverseName)),this.dialogDropDvRef.close(this.data.dataverseName)},e.prototype.onNoClick=function(){this.dialogDropDvRef.close()},e}(),of=function(e){function t(t){var n=e.call(this)||this;return n.store=t,n._filterChange=new zc.a(""),n.dataverse$=n.store.select(function(e){return e.dataverse.dataverses.results}),n}return ef(t,e),Object.defineProperty(t.prototype,"filter",{get:function(){return this._filterChange.value},set:function(e){this._filterChange.next(e)},enumerable:!0,configurable:!0}),t.prototype.connect=function(){return this.dataverse$},t.prototype.disconnect=function(){},t}(Lc),lf=al["\u0275crt"]({encapsulation:2,styles:[".mat-form-field{display:inline-block;position:relative;text-align:left}[dir=rtl] .mat-form-field{text-align:right}.mat-form-field-wrapper{position:relative}.mat-form-field-flex{display:inline-flex;align-items:baseline;width:100%}.mat-form-field-prefix,.mat-form-field-suffix{white-space:nowrap;flex:none}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{width:1em}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{font:inherit;vertical-align:baseline}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{font-size:inherit}.mat-form-field-infix{display:block;position:relative;flex:auto;min-width:0;width:180px}.mat-form-field-label-wrapper{position:absolute;left:0;box-sizing:content-box;width:100%;height:100%;overflow:hidden;pointer-events:none}.mat-form-field-label{position:absolute;left:0;font:inherit;pointer-events:none;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;transform:perspective(100px);-ms-transform:none;transform-origin:0 0;transition:transform .4s cubic-bezier(.25,.8,.25,1),color .4s cubic-bezier(.25,.8,.25,1),width .4s cubic-bezier(.25,.8,.25,1);display:none}[dir=rtl] .mat-form-field-label{transform-origin:100% 0;left:auto;right:0}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-empty.mat-form-field-label{display:block}.mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{display:none}.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{display:block;transition:none}.mat-input-server:focus+.mat-form-field-placeholder-wrapper .mat-form-field-placeholder,.mat-input-server[placeholder]:not(:placeholder-shown)+.mat-form-field-placeholder-wrapper .mat-form-field-placeholder{display:none}.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-placeholder-wrapper .mat-form-field-placeholder,.mat-form-field-can-float .mat-input-server[placeholder]:not(:placeholder-shown)+.mat-form-field-placeholder-wrapper .mat-form-field-placeholder{display:block}.mat-form-field-label:not(.mat-form-field-empty){transition:none}.mat-form-field-underline{position:absolute;height:1px;width:100%}.mat-form-field-disabled .mat-form-field-underline{background-position:0;background-color:transparent}.mat-form-field-underline .mat-form-field-ripple{position:absolute;top:0;left:0;width:100%;height:2px;transform-origin:50%;transform:scaleX(.5);visibility:hidden;opacity:0;transition:background-color .3s cubic-bezier(.55,0,.55,.2)}.mat-form-field-invalid:not(.mat-focused) .mat-form-field-underline .mat-form-field-ripple{height:1px}.mat-focused .mat-form-field-underline .mat-form-field-ripple,.mat-form-field-invalid .mat-form-field-underline .mat-form-field-ripple{visibility:visible;opacity:1;transform:scaleX(1);transition:transform .3s cubic-bezier(.25,.8,.25,1),opacity .1s cubic-bezier(.25,.8,.25,1),background-color .3s cubic-bezier(.25,.8,.25,1)}.mat-form-field-subscript-wrapper{position:absolute;width:100%;overflow:hidden}.mat-form-field-label-wrapper .mat-icon,.mat-form-field-subscript-wrapper .mat-icon{width:1em;height:1em;font-size:inherit;vertical-align:baseline}.mat-form-field-hint-wrapper{display:flex}.mat-form-field-hint-spacer{flex:1 0 1em}.mat-error{display:block}",".mat-input-element{font:inherit;background:0 0;color:currentColor;border:none;outline:0;padding:0;margin:0;width:100%;max-width:100%;vertical-align:bottom}.mat-input-element:-moz-ui-invalid{box-shadow:none}.mat-input-element::-ms-clear,.mat-input-element::-ms-reveal{display:none}.mat-input-element[type=date]::after,.mat-input-element[type=datetime-local]::after,.mat-input-element[type=datetime]::after,.mat-input-element[type=month]::after,.mat-input-element[type=time]::after,.mat-input-element[type=week]::after{content:' ';white-space:pre;width:1px}.mat-input-element::placeholder{transition:color .4s .133s cubic-bezier(.25,.8,.25,1)}.mat-input-element::-moz-placeholder{transition:color .4s .133s cubic-bezier(.25,.8,.25,1)}.mat-input-element::-webkit-input-placeholder{transition:color .4s .133s cubic-bezier(.25,.8,.25,1)}.mat-input-element:-ms-input-placeholder{transition:color .4s .133s cubic-bezier(.25,.8,.25,1)}.mat-form-field-hide-placeholder .mat-input-element::placeholder{color:transparent!important;transition:none}.mat-form-field-hide-placeholder .mat-input-element::-moz-placeholder{color:transparent!important;transition:none}.mat-form-field-hide-placeholder .mat-input-element::-webkit-input-placeholder{color:transparent!important;transition:none}.mat-form-field-hide-placeholder .mat-input-element:-ms-input-placeholder{color:transparent!important;transition:none}textarea.mat-input-element{resize:vertical;overflow:auto}textarea.mat-autosize{resize:none}"],data:{animation:[{type:7,name:"transitionMessages",definitions:[{type:0,name:"enter",styles:{type:6,styles:{opacity:1,transform:"translateY(0%)"},offset:null},options:void 0},{type:1,expr:"void => enter",animation:[{type:6,styles:{opacity:0,transform:"translateY(-100%)"},offset:null},{type:4,styles:null,timings:"300ms cubic-bezier(0.55, 0, 0.55, 0.2)"}],options:null}],options:{}}]}}),af=al["\u0275crt"]({encapsulation:0,styles:[[".container[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row;flex-flow:row;padding:0;margin:0}.master[_ngcontent-%COMP%]{width:60%}.detail[_ngcontent-%COMP%]{width:40%}.dataverses-card[_ngcontent-%COMP%]{margin:0 auto;margin-top:16px;min-height:450px;max-height:450px;width:95%}.dataverses-card[_ngcontent-%COMP%], .dataverses-details-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;padding:0;overflow:hidden}.dataverses-details-card[_ngcontent-%COMP%]{margin:0 auto;margin:16px;min-height:716px;max-height:716px}.icon[_ngcontent-%COMP%]{padding:0 14px 0 0;margin:0}.dataverses-selector[_ngcontent-%COMP%]{min-height:42px;max-height:42px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:.8rem;font-weight:500;background-color:#fff;border:1px solid rgba(54,147,209,.87)}.dataverses-content[_ngcontent-%COMP%]{position:relative;top:0;left:0;margin:0;padding:0;overflow:auto}.dataverses-table[_ngcontent-%COMP%]{margin:8px!important;height:330px;overflow:auto}.spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.example-header[_ngcontent-%COMP%]{min-height:64px;padding-left:24px}.mat-table[_ngcontent-%COMP%]{overflow:auto}.customWidthClass[_ngcontent-%COMP%]{-webkit-box-flex:0;-ms-flex:0 0 75px;flex:0 0 75px}.mat-cell.mat-column-DataverseName[_ngcontent-%COMP%], .mat-column-DataverseName[_ngcontent-%COMP%], .mat-header-cell.mat-column-DataverseName[_ngcontent-%COMP%]{text-align:left}.header-name-cell[_ngcontent-%COMP%]{-ms-flex:0 0 150px;flex:0 0 150px}.header-dataformat-cell[_ngcontent-%COMP%], .header-name-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;text-transform:uppercase}.header-dataformat-cell[_ngcontent-%COMP%]{-ms-flex:0 0 400px;flex:0 0 400px}.header-timestamp-cell[_ngcontent-%COMP%]{-ms-flex:0 0 250px;flex:0 0 250px;text-transform:uppercase}.dataverse-name-cell[_ngcontent-%COMP%], .header-timestamp-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0}.dataverse-name-cell[_ngcontent-%COMP%]{-ms-flex:0 0 150px;flex:0 0 150px}.dataverse-dataformat-cell[_ngcontent-%COMP%]{-ms-flex:0 0 400px;flex:0 0 400px}.dataverse-dataformat-cell[_ngcontent-%COMP%], .dataverse-timestamp-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0}.dataverse-timestamp-cell[_ngcontent-%COMP%]{-ms-flex:0 0 250px;flex:0 0 250px}.example-header[_ngcontent-%COMP%]{min-height:56px;max-height:56px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 24px 0;font-size:20px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;border-bottom:1px solid transparent}.mat-form-field[_ngcontent-%COMP%]{font-size:14px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-top:8px}.example-no-results[_ngcontent-%COMP%]{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:24px;font-size:12px;font-style:italic}.actions[_ngcontent-%COMP%], .example-no-results[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex}.actions[_ngcontent-%COMP%]{border-top:1px solid rgba(0,0,0,.1);color:rgba(54,147,209,.87);padding:8px;margin:0}.error-message[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.1);color:rgba(209,54,54,.87);padding-top:10px;padding-left:20px;text-overflow:ellipsis}.highlight[_ngcontent-%COMP%]{background:#42a948}.output[_ngcontent-%COMP%]{padding-left:16px}"]],data:{}}),sf=al["\u0275crt"]({encapsulation:0,styles:[[".dataverse-dialog[_ngcontent-%COMP%]{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}"]],data:{}}),uf=al["\u0275ccf"]("dataverse-create-dialog",nf,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"dataverse-create-dialog",[],null,null,null,Je,sf)),al["\u0275did"](1,49152,null,0,nf,[Yp.m,Ns,As],null,null)],null,null)},{},{},[]),cf=al["\u0275crt"]({encapsulation:0,styles:[[".dataverse-dialog[_ngcontent-%COMP%]{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}"]],data:{}}),df=al["\u0275ccf"]("dataverse-drop-dialog",rf,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"dataverse-drop-dialog",[],null,null,null,et,cf)),al["\u0275did"](1,49152,null,0,rf,[Yp.m,Ns,As],null,null)],null,null)},{},{},[]),pf=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),ff=function(){function e(e,t){var n=this;this.store=e,this.dialog=t,this.displayedColumns="['CompactionPolicy', 'DatasetId', 'DatasetName', 'DatasetType', 'DatatypeDataverseName', 'DatatypeName', 'DataverseName', 'GroupName', 'PendingOp', 'Timestamp']",this.errorMessage="",this.dsName="",this.loaded$=this.store.select("dataset"),this.store.select(function(e){return e.dataset.createDatasetName}).subscribe(function(e){n.dsName=e}),this.store.select(function(e){return e.dataset.dropDatasetName}).subscribe(function(e){n.dsName=e}),this.store.select(function(e){return e.dataset.createDatasetSuccess}).subscribe(function(e){!0===e&&(n.getDatasets(),n.errorMessage="SUCCEED: CREATE DATASET "+n.dsName)}),this.store.select(function(e){return e.dataset.createDatasetError}).subscribe(function(e){e.errors&&(n.errorMessage="ERROR: "+e.errors[0].msg)}),this.store.select(function(e){return e.dataset.dropDatasetSuccess}).subscribe(function(e){!0===e&&(n.getDatasets(),n.errorMessage="SUCCEED: DROP DATASET "+n.dsName)}),this.store.select(function(e){return e.dataset.dropDatasetError}).subscribe(function(e){e.errors&&(n.errorMessage="ERROR: "+e.errors[0].msg)})}return e.prototype.getDatasets=function(){this.store.dispatch(new sp("-"))},e.prototype.ngOnInit=function(){this.dataSource=new gf(this.store)},e.prototype.openCreateDatasetDialog=function(){var e=this;this.dialog.open(hf,{width:"420px",data:{name:this.datasetName}}).afterClosed().subscribe(function(t){e.datasetName=t})},e.prototype.openDropDatasetDialog=function(){var e=this;this.dialog.open(mf,{width:"420px",data:{name:this.datasetName}}).afterClosed().subscribe(function(t){e.datasetName=t})},e.prototype.onClick=function(){this.errorMessage=""},e.prototype.highlight=function(e){this.output=JSON.stringify(e,null,2)},e.prototype.cleanUp=function(){this.errorMessage="",this.inputQuery.cleanUp()},e}(),hf=function(){function e(e,t,n){this.store=e,this.dialogCreateDsRef=t,this.data=n}return e.prototype.onClick=function(){this.store.dispatch(new dp(this.data.datasetName)),this.dialogCreateDsRef.close()},e.prototype.onNoClick=function(){this.dialogCreateDsRef.close()},e}(),mf=function(){function e(e,t,n){this.store=e,this.dialogDropDsRef=t,this.data=n}return e.prototype.onClick=function(){this.store.dispatch(new hp(this.data.datasetName)),this.dialogDropDsRef.close()},e.prototype.onNoClick=function(){this.dialogDropDsRef.close()},e}(),gf=function(e){function t(t){var n=e.call(this)||this;return n.store=t,n.datasets$=n.store.select(function(e){return e.dataset.datasets.results}),n}return pf(t,e),t.prototype.connect=function(){return this.datasets$},t.prototype.disconnect=function(){},t}(Lc),yf=al["\u0275crt"]({encapsulation:0,styles:[[".container[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row;flex-flow:row;padding:0;margin:0}.master[_ngcontent-%COMP%]{width:60%;overflow:hidden}.detail[_ngcontent-%COMP%]{width:40%;overflow:hidden}.datasets-card[_ngcontent-%COMP%]{margin:0 auto;margin-top:16px;min-height:450px;max-height:450px;width:95%}.datasets-card[_ngcontent-%COMP%], .datasets-details-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;padding:0;overflow:hidden}.datasets-details-card[_ngcontent-%COMP%]{margin:0 auto;margin:16px;min-height:716px;max-height:716px}.icon[_ngcontent-%COMP%]{padding:0 14px 0 0;margin:0}.datasets-selector[_ngcontent-%COMP%]{min-height:42px;max-height:42px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:.8rem;font-weight:500;background-color:#fff;border:1px solid rgba(54,147,209,.87)}.datasets-content[_ngcontent-%COMP%]{position:relative;top:0;left:0;margin:0;padding:0;overflow:auto}.datasets-table[_ngcontent-%COMP%]{margin:8px!important;height:330px;overflow:auto}.spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.example-header[_ngcontent-%COMP%]{min-height:64px;padding-left:24px}.mat-table[_ngcontent-%COMP%]{overflow:auto}.customWidthClass[_ngcontent-%COMP%]{-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.mat-cell.mat-column-DataverseName[_ngcontent-%COMP%], .mat-column-DataverseName[_ngcontent-%COMP%], .mat-header-cell.mat-column-DataverseName[_ngcontent-%COMP%]{text-align:left}.header-compactionpolicy-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-compactionpolicy-cell[_ngcontent-%COMP%], .header-compactionpolicy-cell[_ngcontent-%COMP%], .header-datasetid-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-datasetid-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-datasetid-cell[_ngcontent-%COMP%], .header-datasetname-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-datasetname-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-datasetname-cell[_ngcontent-%COMP%]{letter-spacing:1px}.dataset-datasetname-cell[_ngcontent-%COMP%], .header-datasettype-cell[_ngcontent-%COMP%]{border:none;font-size:12px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-datasettype-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-datasettype-cell[_ngcontent-%COMP%]{border:none;font-size:12px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-datatypedataversename-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-datatypedataversename-cell[_ngcontent-%COMP%], .header-datatypedataversename-cell[_ngcontent-%COMP%], .header-datatypename-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-datatypename-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-datatypename-cell[_ngcontent-%COMP%], .header-dataversename-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-dataversename-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-dataversename-cell[_ngcontent-%COMP%], .header-groupname-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-groupname-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-groupname-cell[_ngcontent-%COMP%], .header-timestamp-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-timestamp-cell[_ngcontent-%COMP%]{text-transform:uppercase}.dataset-timestamp-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.example-header[_ngcontent-%COMP%]{min-height:56px;max-height:56px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 24px 0;font-size:20px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;border-bottom:1px solid transparent}.mat-form-field[_ngcontent-%COMP%]{font-size:14px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-top:8px}.example-no-results[_ngcontent-%COMP%]{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:24px;font-size:12px;font-style:italic}.actions[_ngcontent-%COMP%], .example-no-results[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex}.actions[_ngcontent-%COMP%]{border-top:1px solid rgba(0,0,0,.1);color:rgba(54,147,209,.87);padding:8px;margin:0}.error-message[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.1);color:rgba(209,54,54,.87);padding-top:10px;padding-left:20px;text-overflow:ellipsis}.output[_ngcontent-%COMP%]{padding-left:16px}"]],data:{}}),vf=al["\u0275crt"]({encapsulation:0,styles:[[".dataset-dialog[_ngcontent-%COMP%]{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}"]],data:{}}),bf=al["\u0275ccf"]("dataset-create-dialog",hf,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"dataset-create-dialog",[],null,null,null,St,vf)),al["\u0275did"](1,49152,null,0,hf,[Yp.m,Ns,As],null,null)],null,null)},{},{},[]),_f=al["\u0275crt"]({encapsulation:0,styles:[[".dataset-dialog[_ngcontent-%COMP%]{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}"]],data:{}}),wf=al["\u0275ccf"]("dataset-drop-dialog",mf,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"dataset-drop-dialog",[],null,null,null,Ot,_f)),al["\u0275did"](1,49152,null,0,mf,[Yp.m,Ns,As],null,null)],null,null)},{},{},[]),xf=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),Cf=function(){function e(e,t){var n=this;this.store=e,this.dialog=t,this.displayedColumns="['datatypeName', 'dataverseName', 'timeStamp']",this.selection=new Fc(!0,[]),this.errorMessage="",this.dtName="",this.loaded$=this.store.select("datatype"),this.store.select(function(e){return e.datatype.createDatatypeName}).subscribe(function(e){n.dtName=e}),this.store.select(function(e){return e.datatype.dropDatatypeName}).subscribe(function(e){n.dtName=e}),this.store.select(function(e){return e.datatype.createDatatypeSuccess}).subscribe(function(e){!0===e&&(n.getDatatypes(),n.errorMessage="SUCCEED: CREATE DATATYPE "+n.dtName)}),this.store.select(function(e){return e.datatype.createDatatypeError}).subscribe(function(e){e.errors&&(n.errorMessage="ERROR: "+e.errors[0].msg)}),this.store.select(function(e){return e.datatype.dropDatatypeSuccess}).subscribe(function(e){!0===e&&(n.getDatatypes(),n.errorMessage="SUCCEED: DROP DATATYPE "+n.dtName)}),this.store.select(function(e){return e.datatype.dropDatatypeError}).subscribe(function(e){e.errors&&(n.errorMessage="ERROR: "+e.errors[0].msg)})}return e.prototype.getDatatypes=function(){this.store.dispatch(new Sp("-"))},e.prototype.ngOnInit=function(){this.dataSource=new Of(this.store)},e.prototype.openCreateDatatypeDialog=function(){var e=this;this.dialog.open(Ef,{width:"420px",data:{name:this.datatypeName}}).afterClosed().subscribe(function(t){e.datatypeName=t})},e.prototype.openDropDatatypeDialog=function(){var e=this;this.dialog.open(Sf,{width:"420px",data:{name:this.datatypeName}}).afterClosed().subscribe(function(t){e.datatypeName=t})},e.prototype.onClick=function(){this.errorMessage=""},e.prototype.highlight=function(e){this.output=JSON.stringify(e,null,2)},e.prototype.cleanUp=function(){this.errorMessage="",this.inputQuery.cleanUp()},e}(),Ef=function(){function e(e,t,n){this.store=e,this.dialogCreateDtRef=t,this.data=n}return e.prototype.onClick=function(){this.store.dispatch(new kp(this.data.datasetName)),this.dialogCreateDtRef.close()},e.prototype.onNoClick=function(){this.dialogCreateDtRef.close()},e}(),Sf=function(){function e(e,t,n){this.store=e,this.dialogDropDtRef=t,this.data=n}return e.prototype.onClick=function(){this.store.dispatch(new Rp(this.data.datatypeName)),this.dialogDropDtRef.close()},e.prototype.onNoClick=function(){this.dialogDropDtRef.close()},e}(),Of=function(e){function t(t){var n=e.call(this)||this;return n.store=t,n.datatypes$=n.store.select(function(e){return e.datatype.datatypes.results}),n}return xf(t,e),t.prototype.connect=function(){return this.datatypes$},t.prototype.disconnect=function(){},t}(Lc),Tf=al["\u0275crt"]({encapsulation:0,styles:[[".container[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row;flex-flow:row;padding:0;margin:0}.master[_ngcontent-%COMP%]{width:60%;overflow:hidden}.detail[_ngcontent-%COMP%]{width:40%;overflow:hidden}.datatypes-card[_ngcontent-%COMP%]{margin:0 auto;margin-top:16px;min-height:450px;max-height:450px;width:95%}.datatypes-card[_ngcontent-%COMP%], .datatypes-details-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;padding:0;overflow:hidden}.datatypes-details-card[_ngcontent-%COMP%]{margin:0 auto;margin:16px;min-height:716px;max-height:716px}.icon[_ngcontent-%COMP%]{padding:0 14px 0 0;margin:0}.datatypes-selector[_ngcontent-%COMP%]{min-height:42px;max-height:42px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:.8rem;font-weight:500;background-color:#fff;border:1px solid rgba(54,147,209,.87)}.datatypes-content[_ngcontent-%COMP%]{position:relative;top:0;left:0;margin:0;padding:0;overflow:auto}.datatypes-table[_ngcontent-%COMP%]{margin:8px!important;height:330px;overflow:auto}.spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.datatypes-toolbar[_ngcontent-%COMP%]{display:block;min-height:56px;height:56px;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:1px;font-weight:400;background:rgba(0,0,1,.8)}.example-header[_ngcontent-%COMP%]{min-height:64px;padding-left:24px}.mat-table[_ngcontent-%COMP%]{overflow:auto}.customWidthClass[_ngcontent-%COMP%]{-webkit-box-flex:0;-ms-flex:0 0 75px;flex:0 0 75px}.mat-cell.mat-column-DataverseName[_ngcontent-%COMP%], .mat-column-DataverseName[_ngcontent-%COMP%], .mat-header-cell.mat-column-DataverseName[_ngcontent-%COMP%]{text-align:left}.header-datatypename-cell[_ngcontent-%COMP%]{text-transform:uppercase}.datatypes-datatypename-cell[_ngcontent-%COMP%], .header-datatypename-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 400px;flex:0 0 400px}.header-dataversename-cell[_ngcontent-%COMP%]{text-align:center;color:rgba(0,0,0,.87);text-transform:uppercase}.datatypes-dataversename-cell[_ngcontent-%COMP%], .header-dataversename-cell[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.header-timestamp-cell[_ngcontent-%COMP%]{text-transform:uppercase}.datatypes-timestamp-cell[_ngcontent-%COMP%], .header-timestamp-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:center;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.example-header[_ngcontent-%COMP%]{min-height:56px;max-height:56px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 24px 0;font-size:20px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;border-bottom:1px solid transparent}.mat-form-field[_ngcontent-%COMP%]{font-size:14px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-top:8px}.example-no-results[_ngcontent-%COMP%]{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:24px;font-size:12px;font-style:italic}.actions[_ngcontent-%COMP%], .example-no-results[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex}.actions[_ngcontent-%COMP%]{border-top:1px solid rgba(0,0,0,.1);color:rgba(54,147,209,.87);padding:8px;margin:0}.error-message[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.1);color:rgba(209,54,54,.87);padding-top:10px;padding-left:20px;text-overflow:ellipsis}.output[_ngcontent-%COMP%]{padding-left:16px}"]],data:{}}),kf=al["\u0275crt"]({encapsulation:0,styles:[[".datatype-dialog[_ngcontent-%COMP%]{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}"]],data:{}}),Df=al["\u0275ccf"]("datatype-create-dialog",Ef,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"datatype-create-dialog",[],null,null,null,Ft,kf)),al["\u0275did"](1,49152,null,0,Ef,[Yp.m,Ns,As],null,null)],null,null)},{},{},[]),If=al["\u0275crt"]({encapsulation:0,styles:[[".datatype-dialog[_ngcontent-%COMP%]{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}"]],data:{}}),Rf=al["\u0275ccf"]("datatypes-drop-dialog",Sf,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"datatypes-drop-dialog",[],null,null,null,jt,If)),al["\u0275did"](1,49152,null,0,Sf,[Yp.m,Ns,As],null,null)],null,null)},{},{},[]),Mf=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),Pf=function(){function e(e,t){var n=this;this.store=e,this.dialog=t,this.displayedColumns="['dataverseName', 'datasetName', 'indexName', 'indexStructure', 'isPrimary', 'timestamp', 'pendingOp']",this.errorMessage="",this.idxName="",this.loaded$=this.store.select("index"),this.store.select(function(e){return e.index.createIndexName}).subscribe(function(e){n.idxName=e}),this.store.select(function(e){return e.index.dropIndexName}).subscribe(function(e){n.idxName=e}),this.store.select(function(e){return e.index.createIndexSuccess}).subscribe(function(e){!0===e&&(n.getIndexes(),n.errorMessage="SUCCEED: CREATE INDEX "+n.idxName)}),this.store.select(function(e){return e.index.createIndexError}).subscribe(function(e){e.errors&&(n.errorMessage="ERROR: "+e.errors[0].msg)}),this.store.select(function(e){return e.index.dropIndexSuccess}).subscribe(function(e){!0===e&&(n.getIndexes(),n.errorMessage="SUCCEED: DROP INDEX "+n.idxName)}),this.store.select(function(e){return e.index.dropIndexError}).subscribe(function(e){e.errors&&(n.errorMessage="ERROR: "+e.errors[0].msg)})}return e.prototype.getIndexes=function(){this.store.dispatch(new Bp("-"))},e.prototype.ngOnInit=function(){this.dataSource=new Lf(this.store)},e.prototype.openCreateIndexDialog=function(){var e=this;this.dialog.open(Nf,{width:"420px",data:{name:this.indexName}}).afterClosed().subscribe(function(t){e.indexName=t})},e.prototype.openDropIndexDialog=function(){var e=this;this.dialog.open(Af,{width:"420px",data:{name:this.indexName}}).afterClosed().subscribe(function(t){e.indexName=t})},e.prototype.onClick=function(){this.errorMessage=""},e.prototype.highlight=function(e){this.output=JSON.stringify(e,null,2)},e.prototype.cleanUp=function(){this.errorMessage="",this.inputQuery.cleanUp()},e}(),Nf=function(){function e(e,t,n){this.store=e,this.dialogCreateIdxRef=t,this.data=n}return e.prototype.onClick=function(){this.store.dispatch(new qp(this.data.indexName)),this.dialogCreateIdxRef.close()},e.prototype.onNoClick=function(){this.dialogCreateIdxRef.close()},e}(),Af=function(){function e(e,t,n){this.store=e,this.dialogDropIdxRef=t,this.data=n}return e.prototype.onClick=function(){console.log(this.data.indexName),this.store.dispatch(new Kp(this.data.indexName)),this.dialogDropIdxRef.close()},e.prototype.onNoClick=function(){this.dialogDropIdxRef.close()},e}(),Lf=function(e){function t(t){var n=e.call(this)||this;return n.store=t,n.indexes$=n.store.select(function(e){return e.index.indexes.results}),n}return Mf(t,e),t.prototype.connect=function(){return this.indexes$},t.prototype.disconnect=function(){},t}(Lc),Ff=al["\u0275crt"]({encapsulation:0,styles:[[".container[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row;flex-flow:row;padding:0;margin:0}.master[_ngcontent-%COMP%]{width:60%}.detail[_ngcontent-%COMP%]{width:40%}.indexes-card[_ngcontent-%COMP%]{margin:0 auto;margin-top:16px;min-height:450px;max-height:450px;width:95%}.indexes-card[_ngcontent-%COMP%], .indexes-details-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;padding:0;overflow:hidden}.indexes-details-card[_ngcontent-%COMP%]{margin:0 auto;margin:16px;min-height:716px;max-height:716px}.icon[_ngcontent-%COMP%]{padding:0 14px 0 0;margin:0}.indexes-selector[_ngcontent-%COMP%]{min-height:42px;max-height:42px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:.8rem;font-weight:500;background-color:#fff;border:1px solid rgba(54,147,209,.87)}.indexes-content[_ngcontent-%COMP%]{position:relative;top:0;left:0;margin:0;padding:0;overflow:auto}.indexes-table[_ngcontent-%COMP%]{margin:8px!important;height:330px;overflow:auto}.spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.example-header[_ngcontent-%COMP%]{min-height:64px;padding-left:24px}.mat-table[_ngcontent-%COMP%]{overflow:auto}.customWidthClass[_ngcontent-%COMP%]{-webkit-box-flex:0;-ms-flex:0 0 75px;flex:0 0 75px}.mat-cell.mat-column-DataverseName[_ngcontent-%COMP%], .mat-column-DataverseName[_ngcontent-%COMP%], .mat-header-cell.mat-column-DataverseName[_ngcontent-%COMP%]{text-align:left}.header-dataversename-cell[_ngcontent-%COMP%]{text-transform:uppercase}.header-datasetname-cell[_ngcontent-%COMP%], .header-dataversename-cell[_ngcontent-%COMP%], .indexes-dataversename-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 150px;flex:0 0 150px}.header-datasetname-cell[_ngcontent-%COMP%]{text-transform:uppercase}.header-indexname-cell[_ngcontent-%COMP%], .indexes-datasetname-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 150px;flex:0 0 150px}.header-indexname-cell[_ngcontent-%COMP%]{text-transform:uppercase}.indexes-indexname-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 150px;flex:0 0 150px}.header-indexestructure-cell[_ngcontent-%COMP%]{text-transform:uppercase}.header-indexestructure-cell[_ngcontent-%COMP%], .header-isprimary-cell[_ngcontent-%COMP%], .indexes-indexstructure-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:center;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 150px;flex:0 0 150px}.header-isprimary-cell[_ngcontent-%COMP%]{text-transform:uppercase}.indexes-isprimary-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:center;color:rgba(0,0,0,.87);-webkit-box-flex:0}.header-timestamp-cell[_ngcontent-%COMP%], .indexes-isprimary-cell[_ngcontent-%COMP%], .indexes-timestamp-cell[_ngcontent-%COMP%]{-ms-flex:0 0 150px;flex:0 0 150px}.header-groupname-cell[_ngcontent-%COMP%]{text-transform:uppercase}.header-groupname-cell[_ngcontent-%COMP%], .indexes-groupname-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 150px;flex:0 0 150px}.header-timestamp-cell[_ngcontent-%COMP%]{text-transform:uppercase}.header-timestamp-cell[_ngcontent-%COMP%], .indexes-timestamp-cell[_ngcontent-%COMP%]{border:none;font-size:12px;letter-spacing:1px;line-height:24px;font-weight:400;margin:0;padding:0 16px;text-align:left;color:rgba(0,0,0,.87);-webkit-box-flex:0;-ms-flex:0 0 250px;flex:0 0 250px}.example-header[_ngcontent-%COMP%]{min-height:56px;max-height:56px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 24px 0;font-size:20px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;border-bottom:1px solid transparent}.mat-form-field[_ngcontent-%COMP%]{font-size:14px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-top:8px}.example-no-results[_ngcontent-%COMP%]{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:24px;font-size:12px;font-style:italic}.actions[_ngcontent-%COMP%], .example-no-results[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex}.actions[_ngcontent-%COMP%]{border-top:1px solid rgba(0,0,0,.1);color:rgba(54,147,209,.87);padding:8px;margin:0}.error-message[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.1);color:rgba(209,54,54,.87);padding-top:10px;padding-left:20px;text-overflow:ellipsis}.output[_ngcontent-%COMP%]{padding-left:16px}"]],data:{}}),jf=al["\u0275crt"]({encapsulation:0,styles:[[".index-dialog[_ngcontent-%COMP%]{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}"]],data:{}}),Vf=al["\u0275ccf"]("index-create-dialog",Nf,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"index-create-dialog",[],null,null,null,rn,jf)),al["\u0275did"](1,49152,null,0,Nf,[Yp.m,Ns,As],null,null)],null,null)},{},{},[]),zf=al["\u0275crt"]({encapsulation:0,styles:[[".index-dialog[_ngcontent-%COMP%]{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}"]],data:{}}),Bf=al["\u0275ccf"]("index-drop-dialog",Af,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"index-drop-dialog",[],null,null,null,on,zf)),al["\u0275did"](1,49152,null,0,Af,[Yp.m,Ns,As],null,null)],null,null)},{},{},[]),Hf=function(){},Wf=al["\u0275crt"]({encapsulation:0,styles:[[".awc-navbar[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.1);overflow:hidden}.awc-navbar[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{text-decoration:none}.awc-navbar-header[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 16px}.awc-navbar-header[_ngcontent-%COMP%] > .mat-button[_ngcontent-%COMP%]:last-child{margin-left:auto}.flex-spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.awc-asterixDB-logo[_ngcontent-%COMP%]{height:26px;margin:0 4px 3px 0;vertical-align:middle}.awc-github-logo[_ngcontent-%COMP%]{height:21px;margin:0 7px 2px 0;vertical-align:middle}.awc-navbar-link[_ngcontent-%COMP%]{text-decoration:inherit;-webkit-box-flex:1;-ms-flex:1;flex:1}"]],data:{}}),qf=function(){function e(){}return e.prototype.create=function(e){return"undefined"==typeof MutationObserver?null:new MutationObserver(e)},e}(),Uf=function(){function e(e,t,n){this._mutationObserverFactory=e,this._elementRef=t,this._ngZone=n,this.event=new al.EventEmitter,this._debouncer=new ml.Subject}return e.prototype.ngAfterContentInit=function(){var e=this;this.debounce>0?this._ngZone.runOutsideAngular(function(){e._debouncer.pipe(_(e.debounce)).subscribe(function(t){return e.event.emit(t)})}):this._debouncer.subscribe(function(t){return e.event.emit(t)}),this._observer=this._ngZone.runOutsideAngular(function(){return e._mutationObserverFactory.create(function(t){e._debouncer.next(t)})}),this._observer&&this._observer.observe(this._elementRef.nativeElement,{characterData:!0,childList:!0,subtree:!0})},e.prototype.ngOnDestroy=function(){this._observer&&this._observer.disconnect(),this._debouncer.complete()},e}(),Gf=function(){},Kf=function(){function e(e,t){this._elementRef=e,this._ngZone=t}return e.prototype.alignToElement=function(e){var t=this;this.show(),"undefined"!=typeof requestAnimationFrame?this._ngZone.runOutsideAngular(function(){requestAnimationFrame(function(){return t._setStyles(e)})}):this._setStyles(e)},e.prototype.show=function(){this._elementRef.nativeElement.style.visibility="visible"},e.prototype.hide=function(){this._elementRef.nativeElement.style.visibility="hidden"},e.prototype._setStyles=function(e){var t=this._elementRef.nativeElement;t.style.left=e?(e.offsetLeft||0)+"px":"0",t.style.width=e?(e.offsetWidth||0)+"px":"0"},e}(),$f=function(e){function t(t){var n=e.call(this)||this;return n._viewContainerRef=t,n.textLabel="",n._contentPortal=null,n._labelChange=new ml.Subject,n._disableChange=new ml.Subject,n.position=null,n.origin=null,n.isActive=!1,n}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"content",{get:function(){return this._contentPortal},enumerable:!0,configurable:!0}),t.prototype.ngOnChanges=function(e){e.hasOwnProperty("textLabel")&&this._labelChange.next(),e.hasOwnProperty("disabled")&&this._disableChange.next()},t.prototype.ngOnDestroy=function(){this._disableChange.complete(),this._labelChange.complete()},t.prototype.ngOnInit=function(){this._contentPortal=new Ul(this._content,this._viewContainerRef)},t}(D(function(){})),Zf=function(e){function t(t,n,r){var i=e.call(this,t,n)||this;return i._host=r,i}return Object(bl.__extends)(t,e),t.prototype.ngOnInit=function(){var e=this;this._host._isCenterPosition(this._host._position)&&this.attach(this._host._content),this._centeringSub=this._host._beforeCentering.subscribe(function(t){t&&(e.hasAttached()||e.attach(e._host._content))}),this._leavingSub=this._host._afterLeavingCenter.subscribe(function(){e.detach()})},t.prototype.ngOnDestroy=function(){this._centeringSub&&!this._centeringSub.closed&&this._centeringSub.unsubscribe(),this._leavingSub&&!this._leavingSub.closed&&this._leavingSub.unsubscribe()},t}($l),Qf=function(){function e(e,t){this._elementRef=e,this._dir=t,this._onCentering=new al.EventEmitter,this._beforeCentering=new al.EventEmitter,this._afterLeavingCenter=new al.EventEmitter,this._onCentered=new al.EventEmitter(!0)}return Object.defineProperty(e.prototype,"position",{set:function(e){this._position=e<0?"ltr"==this._getLayoutDirection()?"left":"right":e>0?"ltr"==this._getLayoutDirection()?"right":"left":"center"},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"origin",{set:function(e){if(null!=e){var t=this._getLayoutDirection();this._origin="ltr"==t&&e<=0||"rtl"==t&&e>0?"left":"right"}},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){"center"==this._position&&this._origin&&(this._position="left"==this._origin?"left-origin-center":"right-origin-center")},e.prototype._onTranslateTabStarted=function(e){var t=this._isCenterPosition(e.toState);this._beforeCentering.emit(t),t&&this._onCentering.emit(this._elementRef.nativeElement.clientHeight)},e.prototype._onTranslateTabComplete=function(e){this._isCenterPosition(e.toState)&&this._isCenterPosition(this._position)&&this._onCentered.emit(),this._isCenterPosition(e.fromState)&&!this._isCenterPosition(this._position)&&this._afterLeavingCenter.emit()},e.prototype._getLayoutDirection=function(){return this._dir&&"rtl"===this._dir.value?"rtl":"ltr"},e.prototype._isCenterPosition=function(e){return"center"==e||"left-origin-center"==e||"right-origin-center"==e},e}(),Yf=0,Xf=function(e){function t(t,n){var r=e.call(this,t)||this;return r._changeDetectorRef=n,r._indexToSelect=0,r._tabBodyWrapperHeight=0,r._tabsSubscription=Cl.a.EMPTY,r._tabLabelSubscription=Cl.a.EMPTY,r._dynamicHeight=!1,r._selectedIndex=null,r.headerPosition="above",r.selectedIndexChange=new al.EventEmitter,r.focusChange=new al.EventEmitter,r.selectedTabChange=new al.EventEmitter(!0),r.selectChange=r.selectedTabChange,r._groupId=Yf++,r}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"dynamicHeight",{get:function(){return this._dynamicHeight},set:function(e){this._dynamicHeight=c(e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"_dynamicHeightDeprecated",{get:function(){return this._dynamicHeight},set:function(e){this._dynamicHeight=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"selectedIndex",{get:function(){return this._selectedIndex},set:function(e){this._indexToSelect=d(e,null)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"backgroundColor",{get:function(){return this._backgroundColor},set:function(e){var t=this._elementRef.nativeElement;t.classList.remove("mat-background-"+this.backgroundColor),e&&t.classList.add("mat-background-"+e),this._backgroundColor=e},enumerable:!0,configurable:!0}),t.prototype.ngAfterContentChecked=function(){var e=this,t=this._indexToSelect=Math.min(this._tabs.length-1,Math.max(this._indexToSelect||0,0));if(this._selectedIndex!=t&&null!=this._selectedIndex){var n=this._createChangeEvent(t);this.selectedTabChange.emit(n),Promise.resolve().then(function(){return e.selectedIndexChange.emit(t)})}this._tabs.forEach(function(n,r){n.position=r-t,n.isActive=r===t,null==e._selectedIndex||0!=n.position||n.origin||(n.origin=t-e._selectedIndex)}),this._selectedIndex!==t&&(this._selectedIndex=t,this._changeDetectorRef.markForCheck())},t.prototype.ngAfterContentInit=function(){var e=this;this._subscribeToTabLabels(),this._tabsSubscription=this._tabs.changes.subscribe(function(){e._subscribeToTabLabels(),e._changeDetectorRef.markForCheck()})},t.prototype.ngOnDestroy=function(){this._tabsSubscription.unsubscribe(),this._tabLabelSubscription.unsubscribe()},t.prototype._focusChanged=function(e){this.focusChange.emit(this._createChangeEvent(e))},t.prototype._createChangeEvent=function(e){var t=new function(){};return t.index=e,this._tabs&&this._tabs.length&&(t.tab=this._tabs.toArray()[e]),t},t.prototype._subscribeToTabLabels=function(){var e=this;this._tabLabelSubscription&&this._tabLabelSubscription.unsubscribe(),this._tabLabelSubscription=Ll.a.apply(void 0,this._tabs.map(function(e){return e._disableChange}).concat(this._tabs.map(function(e){return e._labelChange}))).subscribe(function(){e._changeDetectorRef.markForCheck()})},t.prototype._getTabLabelId=function(e){return"mat-tab-label-"+this._groupId+"-"+e},t.prototype._getTabContentId=function(e){return"mat-tab-content-"+this._groupId+"-"+e},t.prototype._setTabBodyWrapperHeight=function(e){if(this._dynamicHeight&&this._tabBodyWrapperHeight){var t=this._tabBodyWrapper.nativeElement;t.style.height=this._tabBodyWrapperHeight+"px",this._tabBodyWrapper.nativeElement.offsetHeight&&(t.style.height=e+"px")}},t.prototype._removeTabBodyWrapperHeight=function(){this._tabBodyWrapperHeight=this._tabBodyWrapper.nativeElement.clientHeight,this._tabBodyWrapper.nativeElement.style.height=""},t.prototype._handleClick=function(e,t,n){e.disabled||(this.selectedIndex=t.focusIndex=n)},t.prototype._getTabIndex=function(e,t){return e.disabled?null:this.selectedIndex===t?0:-1},t}(I(R(function(e){this._elementRef=e}),"primary")),Jf=function(e){function t(t){var n=e.call(this)||this;return n.elementRef=t,n}return Object(bl.__extends)(t,e),t.prototype.focus=function(){this.elementRef.nativeElement.focus()},t.prototype.getOffsetLeft=function(){return this.elementRef.nativeElement.offsetLeft},t.prototype.getOffsetWidth=function(){return this.elementRef.nativeElement.offsetWidth},t}(D(function(){})),eh=function(e){function t(t,n,r,i){var o=e.call(this)||this;return o._elementRef=t,o._changeDetectorRef=n,o._viewportRuler=r,o._dir=i,o._focusIndex=0,o._scrollDistance=0,o._selectedIndexChanged=!1,o._realignInkBar=Cl.a.EMPTY,o._showPaginationControls=!1,o._disableScrollAfter=!0,o._disableScrollBefore=!0,o._selectedIndex=0,o.selectFocusedIndex=new al.EventEmitter,o.indexFocused=new al.EventEmitter,o}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"selectedIndex",{get:function(){return this._selectedIndex},set:function(e){e=d(e),this._selectedIndexChanged=this._selectedIndex!=e,this._selectedIndex=e,this._focusIndex=e},enumerable:!0,configurable:!0}),t.prototype.ngAfterContentChecked=function(){this._tabLabelCount!=this._labelWrappers.length&&(this._updatePagination(),this._tabLabelCount=this._labelWrappers.length,this._changeDetectorRef.markForCheck()),this._selectedIndexChanged&&(this._scrollToLabel(this._selectedIndex),this._checkScrollingControls(),this._alignInkBarToSelectedTab(),this._selectedIndexChanged=!1,this._changeDetectorRef.markForCheck()),this._scrollDistanceChanged&&(this._updateTabScrollPosition(),this._scrollDistanceChanged=!1,this._changeDetectorRef.markForCheck())},t.prototype._handleKeydown=function(e){switch(e.keyCode){case 39:this._focusNextTab();break;case 37:this._focusPreviousTab();break;case 13:case 32:this.selectFocusedIndex.emit(this.focusIndex),e.preventDefault()}},t.prototype.ngAfterContentInit=function(){var e=this,t=this._dir?this._dir.change:vl(null),n=this._viewportRuler.change(150),r=function(){e._updatePagination(),e._alignInkBarToSelectedTab()};"undefined"!=typeof requestAnimationFrame?requestAnimationFrame(r):r(),this._realignInkBar=Object(Ll.a)(t,n).subscribe(r)},t.prototype.ngOnDestroy=function(){this._realignInkBar.unsubscribe()},t.prototype._onContentChanges=function(){this._updatePagination(),this._alignInkBarToSelectedTab(),this._changeDetectorRef.markForCheck()},t.prototype._updatePagination=function(){this._checkPaginationEnabled(),this._checkScrollingControls(),this._updateTabScrollPosition()},Object.defineProperty(t.prototype,"focusIndex",{get:function(){return this._focusIndex},set:function(e){this._isValidIndex(e)&&this._focusIndex!=e&&(this._focusIndex=e,this.indexFocused.emit(e),this._setTabFocus(e))},enumerable:!0,configurable:!0}),t.prototype._isValidIndex=function(e){if(!this._labelWrappers)return!0;var t=this._labelWrappers?this._labelWrappers.toArray()[e]:null;return!!t&&!t.disabled},t.prototype._setTabFocus=function(e){if(this._showPaginationControls&&this._scrollToLabel(e),this._labelWrappers&&this._labelWrappers.length){this._labelWrappers.toArray()[e].focus();var t=this._tabListContainer.nativeElement,n=this._getLayoutDirection();t.scrollLeft="ltr"==n?0:t.scrollWidth-t.offsetWidth}},t.prototype._moveFocus=function(e){if(this._labelWrappers)for(var t=this._labelWrappers.toArray(),n=this.focusIndex+e;n<t.length&&n>=0;n+=e)if(this._isValidIndex(n))return void(this.focusIndex=n)},t.prototype._focusNextTab=function(){this._moveFocus("ltr"==this._getLayoutDirection()?1:-1)},t.prototype._focusPreviousTab=function(){this._moveFocus("ltr"==this._getLayoutDirection()?-1:1)},t.prototype._getLayoutDirection=function(){return this._dir&&"rtl"===this._dir.value?"rtl":"ltr"},t.prototype._updateTabScrollPosition=function(){var e=this.scrollDistance,t="ltr"===this._getLayoutDirection()?-e:e;this._tabList.nativeElement.style.transform="translate3d("+t+"px, 0, 0)"},Object.defineProperty(t.prototype,"scrollDistance",{get:function(){return this._scrollDistance},set:function(e){this._scrollDistance=Math.max(0,Math.min(this._getMaxScrollDistance(),e)),this._scrollDistanceChanged=!0,this._checkScrollingControls()},enumerable:!0,configurable:!0}),t.prototype._scrollHeader=function(e){this.scrollDistance+=("before"==e?-1:1)*this._tabListContainer.nativeElement.offsetWidth/3},t.prototype._scrollToLabel=function(e){var t=this._labelWrappers?this._labelWrappers.toArray()[e]:null;if(t){var n,r,i=this._tabListContainer.nativeElement.offsetWidth;"ltr"==this._getLayoutDirection()?r=(n=t.getOffsetLeft())+t.getOffsetWidth():n=(r=this._tabList.nativeElement.offsetWidth-t.getOffsetLeft())-t.getOffsetWidth();var o=this.scrollDistance,l=this.scrollDistance+i;n<o?this.scrollDistance-=o-n+60:r>l&&(this.scrollDistance+=r-l+60)}},t.prototype._checkPaginationEnabled=function(){var e=this._tabList.nativeElement.scrollWidth>this._elementRef.nativeElement.offsetWidth;e||(this.scrollDistance=0),e!==this._showPaginationControls&&this._changeDetectorRef.markForCheck(),this._showPaginationControls=e},t.prototype._checkScrollingControls=function(){this._disableScrollBefore=0==this.scrollDistance,this._disableScrollAfter=this.scrollDistance==this._getMaxScrollDistance(),this._changeDetectorRef.markForCheck()},t.prototype._getMaxScrollDistance=function(){return this._tabList.nativeElement.scrollWidth-this._tabListContainer.nativeElement.offsetWidth||0},t.prototype._alignInkBarToSelectedTab=function(){var e=this._labelWrappers&&this._labelWrappers.length?this._labelWrappers.toArray()[this.selectedIndex].elementRef.nativeElement:null;this._inkBar.alignToElement(e)},t}(R(function(){})),th=function(){},nh=al["\u0275crt"]({encapsulation:2,styles:[".mat-tab-group{display:flex;flex-direction:column}.mat-tab-group.mat-tab-group-inverted-header{flex-direction:column-reverse}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:0;opacity:1}.mat-tab-label.mat-tab-disabled{cursor:default}@media (max-width:600px){.mat-tab-label{padding:0 12px}}@media (max-width:960px){.mat-tab-label{padding:0 12px}}.mat-tab-group[mat-stretch-tabs] .mat-tab-label{flex-basis:0;flex-grow:1}.mat-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height .5s cubic-bezier(.35,0,.25,1)}.mat-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden}.mat-tab-body.mat-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-tab-group.mat-tab-group-dynamic-height .mat-tab-body.mat-tab-body-active{overflow-y:hidden}"],data:{}}),rh=al["\u0275crt"]({encapsulation:2,styles:[".mat-tab-body-content{-webkit-backface-visibility:hidden;backface-visibility:hidden;height:100%;overflow:auto}.mat-tab-group-dynamic-height .mat-tab-body-content{overflow:hidden}"],data:{animation:[{type:7,name:"translateTab",definitions:[{type:0,name:"center, void, left-origin-center, right-origin-center",styles:{type:6,styles:{transform:"none"},offset:null},options:void 0},{type:0,name:"left",styles:{type:6,styles:{transform:"translate3d(-100%, 0, 0)"},offset:null},options:void 0},{type:0,name:"right",styles:{type:6,styles:{transform:"translate3d(100%, 0, 0)"},offset:null},options:void 0},{type:1,expr:"* => left, * => right, left => center, right => center",animation:{type:4,styles:null,timings:"500ms cubic-bezier(0.35, 0, 0.25, 1)"},options:null},{type:1,expr:"void => left-origin-center",animation:[{type:6,styles:{transform:"translate3d(-100%, 0, 0)"},offset:null},{type:4,styles:null,timings:"500ms cubic-bezier(0.35, 0, 0.25, 1)"}],options:null},{type:1,expr:"void => right-origin-center",animation:[{type:6,styles:{transform:"translate3d(100%, 0, 0)"},offset:null},{type:4,styles:null,timings:"500ms cubic-bezier(0.35, 0, 0.25, 1)"}],options:null}],options:{}}]}}),ih=al["\u0275crt"]({encapsulation:2,styles:[".mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:0;opacity:1}.mat-tab-label.mat-tab-disabled{cursor:default}@media (max-width:600px){.mat-tab-label{min-width:72px}}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:.5s cubic-bezier(.35,0,.25,1)}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}.mat-tab-header-pagination{position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-pagination-after,.mat-tab-header-rtl .mat-tab-header-pagination-before{padding-right:4px}.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;content:'';height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}.mat-tab-list{flex-grow:1;position:relative;transition:transform .5s cubic-bezier(.35,0,.25,1)}.mat-tab-labels{display:flex}"],data:{}}),oh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),lh=n("QhpF"),ah=n("/zAi"),sh=n("H0Ur"),uh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),ch=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),dh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),ph=function(){function e(e,t){this.store=e,this.changeDetector=t,this.nodesAll=[],this.nodesDatasets=[],this.nodesDatatypes=[],this.nodesIndexes=[]}return e.prototype.ngOnInit=function(){var e=this;this.store.select(function(e){return e.metadata.tree}).subscribe(function(t){e.nodesAll=[],e.nodesDatasets=[],e.nodesDatatypes=[],e.nodesIndexes=[];var n=[],r=[],i=[],o={label:"",children:[]};o.label="DATAVERSES",o.children=[];for(var l=0;l<t.length;l++){var a={label:"",children:[]};if(a.label=t[l].DataverseName,o.children.push(a),t[l].Datasets.length){var s={label:"",children:[]};s.label="DATASETS",a.children.push(s);for(var u=0;u<t[l].Datasets.length;u++){var c={label:"",children:[]};if(c.label=t[l].Datasets[u].DatasetName,t[l].Datasets[u].Datatype){var d={label:"",children:[]};if(d.label="Datatype: "+t[l].Datasets[u].Datatype.DatatypeName,t[l].Datasets[u].Datatype.Derived&&t[l].Datasets[u].Datatype.Derived.Record){var p={label:"",leaf:!0,expanded:!0,children:[]};p.label="FIELDS";for(var f=0;f<t[l].Datasets[u].Datatype.Derived.Record.Fields.length;f++){var h={label:"",children:[]};h.label=t[l].Datasets[u].Datatype.Derived.Record.Fields[f].FieldName+": "+t[l].Datasets[u].Datatype.Derived.Record.Fields[f].FieldType,p.children.push(h)}d.children.push(p)}c.children.push(d),d.label=t[l].Datasets[u].Datatype.DatatypeName,r.push(d)}if(t[l].Datasets[u].Indexes.length){var m={label:"",children:[]};for(m.label="INDEXES",f=0;f<t[l].Datasets[u].Indexes.length;f++){var g={label:"",children:[]};g.label=t[l].Datasets[u].Indexes[f].IndexName;var y={label:"",children:[]};if(y.label="isPrimary: "+t[l].Datasets[u].Indexes[f].IsPrimary,g.children.push(y),t[l].Datasets[u].Indexes[f].SearchKey){var v={label:"",children:[]};v.label="SEARCH KEY";for(var b=0;b<t[l].Datasets[u].Indexes[f].SearchKey.length;b++){var _={label:"",children:[]};_.label=t[l].Datasets[u].Indexes[f].SearchKey[b],v.children.push(_)}g.children.push(v),n.push(g)}m.children.push(g)}c.children.push(m),s.children.push(c),i.push(c)}}}}e.nodesAll.push(o);var w={label:"",children:[]};w.label="DATASETS",w.children=i,e.nodesDatasets.push(w);var x={label:"",children:[]};x.label="DATATYPES",x.children=r,e.nodesDatatypes.push(x);var C={label:"",children:[]};C.label="INDEXES",C.children=n,e.nodesIndexes.push(C),e.changeDetector.detectChanges()})},e.prototype.nodeSelectAll=function(e){if(e.node.parent&&"DATASETS"===e.node.parent.label){var t=e.node.label.replace(/-;-/g);this.store.dispatch(new ap(t))}},e.prototype.nodeSelectDataset=function(e){if(e.node.parent&&"DATASETS"===e.node.parent.label){var t=e.node.label.replace(/-;-/g);this.store.dispatch(new ap(t))}},e}(),fh=al["\u0275crt"]({encapsulation:0,styles:[[".metadata-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;padding:0;margin:0 auto;margin-top:10px;margin-bottom:10px;min-height:150px;box-shadow:none!important;width:92%;overflow:hidden}.example-icon[_ngcontent-%COMP%]{padding:0 14px 0 0;margin:0}.spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.metadata-selector[_ngcontent-%COMP%]{min-height:42px;max-height:42px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:.8rem;font-weight:500;background-color:#fff;border:1px solid rgba(54,147,209,.87)}.metadata-content-area[_ngcontent-%COMP%]{padding:10px;margin:0}.metadata-tree[_ngcontent-%COMP%]{min-height:30px;font-size:.8rem;font-weight:500}.metadata-dataindexes[_ngcontent-%COMP%], .metadata-datasets[_ngcontent-%COMP%], .metadata-datatypes[_ngcontent-%COMP%]{margin-top:10px;margin-bottom:10px}.metadata-tree.ui-tree[_ngcontent-%COMP%]{font-size:.8rem;font-weight:500;border:none!important;background-color:red}.refresh-button[_ngcontent-%COMP%]{float:left;margin-top:5px}.actions[_ngcontent-%COMP%]{border-top:1px solid rgba(0,0,0,.1);color:rgba(54,147,209,.87);padding:5px;margin:0}"]],data:{}}),hh=function(){function e(){this.change=new al.EventEmitter,this.focus=new al.EventEmitter,this.blur=new al.EventEmitter,this.instance=null,this._value="",_d.defineMode("asterix",function(){var e=["drop","dataverse","dataset","if","exists","create","use","type","as","closed","primary","key","hints","cardinality","index","on","btree","rtree","keyword","for","in","Metadata","Dataset","return","Index","load","using","localfs","path","format","from","in","with","group","by","select","let","where","order","asc","desc","limit","keeping","offset","distinct","or","and","boolean","tinyint","smallint","integer","bigint","float","double","string","binary","hex","base64","point","line","rectangle","circle","polygon","date","time","datetime","duration","interval","uuid","null","missing","DROP","DATAVERSE","IF","EXISTS","CREATE","USE","TYPE","AS","DATASET","PRIMARY","KEY","INDEX","SELECT","VALUE","INSERT","INTO","FROM","WHERE","AND","SOME","IN","SATISFIES","IS","UNKNOWN","NOT","EVERY","GROUP","BY","ORDER","DESC","LIMIT","OR","SET","DELETE","LOAD","USING"],t=/[$][a-zA-Z]+(\d*)/,n=/[.](\S)*/,r=/["].*["]/,i=/['].*[']/;return{startState:function(){return{inString:!1}},token:function(o,l){if(void 0==l.newLine&&(l.newLine=!0),o.match(t))return"variable";if(o.match(n))return"dot-variable";if(o.match(r))return"string";if(o.match(i))return"string";for(var a in e)if(l.newLine&&o.match(e[a]))return"keyword";return l.newLine=" "===o.peek()||null===o.peek(),o.next(),null}}})}return Object.defineProperty(e.prototype,"value",{get:function(){return this._value},set:function(e){e!==this._value&&(this._value=e,this.onChange(e))},enumerable:!0,configurable:!0}),e.prototype.ngOnDestroy=function(){},e.prototype.ngAfterViewInit=function(){this.config=this.config||{},this.codemirrorInit(this.config)},e.prototype.codemirrorInit=function(e){var t=this;this.instance=_d.fromTextArea(this.host.nativeElement,e),this.instance.setValue(this._value),this.instance.setSize(null,90),this.instance.on("change",function(){t.updateValue(t.instance.getValue())}),this.instance.on("focus",function(){t.focus.emit()}),this.instance.on("blur",function(){t.blur.emit()})},e.prototype.updateValue=function(e){this.value=e,this.onTouched(),this.change.emit(e)},e.prototype.writeValue=function(e){this._value=e||"",this.instance&&this.instance.setValue(this._value)},e.prototype.onChange=function(e){},e.prototype.onTouched=function(){},e.prototype.registerOnChange=function(e){this.onChange=e},e.prototype.registerOnTouched=function(e){this.onTouched=e},e}(),mh=al["\u0275crt"]({encapsulation:0,styles:[["code[_ngcontent-%COMP%]{width:100%;height:100%;padding:10%;margin:0;overflow-wrap:break-word;word-break:break-all;background-color:pink}"]],data:{}}),gh=function(){function e(e){var t=this;this.store=e,this.dataverses=[],this.datatypes=[],this.datasets=[],this.indexes=[],this.datasetName="",this.dataverseName="",this.queryString="",this.codemirrorConfig={mode:"asterix",lineWrapping:!0,showCursorWhenSelecting:!0,autofocus:!0},this.guideSelectedDataset$=this.store.select(function(e){return e.dataset.guideSelectsDataset}),this.guideSelectedDataset$.subscribe(function(e){if(e){t.datasetName=e;for(var n=0;n<t.datasets.length;n++)t.datasets[n].DatasetName===t.datasetName&&(t.dataverseName=t.datasets[n].DataverseName);t.queryString="USE "+t.dataverseName+"; SELECT * FROM "+t.datasetName}}),this.dataverses$=this.store.select(function(e){return e.dataverse.dataverses.results}),this.dataverses$.subscribe(function(e){t.dataverses=e}),this.datasets$=this.store.select(function(e){return e.dataset.datasets.results}),this.datasets$.subscribe(function(e){t.datasets=e})}return e.prototype.getQueryResults=function(e){this.store.dispatch(new Dd(e))},e.prototype.onClick=function(){this.getQueryResults(this.queryString.replace(/\n/g," "))},e}(),yh=al["\u0275crt"]({encapsulation:0,styles:[[".input-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;padding:0;margin:10px;height:200px;width:100%;min-height:150px}.toolbar-icon[_ngcontent-%COMP%]{padding:0 14px 0 0;margin:0}.spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.input-selector[_ngcontent-%COMP%]{max-height:42px;min-height:42px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:.8rem;font-weight:500;background-color:#fff;border:1px solid rgba(54,147,209,.87)}.content-area[_ngcontent-%COMP%]{color:rgba(0,0,0,.87);padding:0;margin:0;overflow:none}.codemirror-container[_ngcontent-%COMP%]{width:95%;height:98%;padding:0;margin:0 auto;font-size:14px;line-height:1.8;background-color:red}.actions[_ngcontent-%COMP%]{border-top:1px solid rgba(0,0,0,.1);color:rgba(54,147,209,.87);padding-left:5px;margin:0}"]],data:{}}),vh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),bh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),_h=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),wh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),xh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Ch=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Eh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Sh=n("pQo2"),Oh=n("wRXj"),Th=n("Rs3a"),kh=n("4cOY"),Dh=n("P0cP"),Ih=al["\u0275crt"]({encapsulation:2,styles:[],data:{animation:[{type:7,name:"panelState",definitions:[{type:0,name:"hidden",styles:{type:6,styles:{opacity:0},offset:null},options:void 0},{type:0,name:"visible",styles:{type:6,styles:{opacity:1},offset:null},options:void 0},{type:1,expr:"visible => hidden",animation:{type:4,styles:null,timings:"400ms ease-in"},options:null},{type:1,expr:"hidden => visible",animation:{type:4,styles:null,timings:"400ms ease-out"},options:null}],options:{}}]}}),Rh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Mh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Ph=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Nh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Ah=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Lh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Fh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),jh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),Vh=al["\u0275crt"]({encapsulation:2,styles:[],data:{}}),zh=D(function(){}),Bh=0,Hh=function(){},Wh=function(e){function t(t){var n=e.call(this)||this;return n._changeDetector=t,n._value=null,n._name="mat-button-toggle-group-"+Bh++,n._vertical=!1,n._selected=null,n._controlValueAccessorChangeFn=function(){},n._onTouched=function(){},n.valueChange=new al.EventEmitter,n.change=new al.EventEmitter,n}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"name",{get:function(){return this._name},set:function(e){this._name=e,this._updateButtonToggleNames()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"vertical",{get:function(){return this._vertical},set:function(e){this._vertical=c(e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"value",{get:function(){return this._value},set:function(e){this._value!=e&&(this._value=e,this.valueChange.emit(e),this._updateSelectedButtonToggleFromValue())},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"selected",{get:function(){return this._selected},set:function(e){this._selected=e,this.value=e?e.value:null,e&&!e.checked&&(e.checked=!0)},enumerable:!0,configurable:!0}),t.prototype._updateButtonToggleNames=function(){var e=this;this._buttonToggles&&this._buttonToggles.forEach(function(t){t.name=e._name})},t.prototype._updateSelectedButtonToggleFromValue=function(){var e=this;if(null!=this._buttonToggles&&(null==this._selected||this._selected.value!=this._value)){var t=this._buttonToggles.filter(function(t){return t.value==e._value})[0];t?this.selected=t:null==this.value&&(this.selected=null,this._buttonToggles.forEach(function(e){e.checked=!1}))}},t.prototype._emitChangeEvent=function(){var e=new Hh;e.source=this._selected,e.value=this._value,this._controlValueAccessorChangeFn(e.value),this.change.emit(e)},t.prototype.writeValue=function(e){this.value=e,this._changeDetector.markForCheck()},t.prototype.registerOnChange=function(e){this._controlValueAccessorChangeFn=e},t.prototype.registerOnTouched=function(e){this._onTouched=e},t.prototype.setDisabledState=function(e){this.disabled=e,this._markButtonTogglesForCheck()},t.prototype._markButtonTogglesForCheck=function(){this._buttonToggles&&this._buttonToggles.forEach(function(e){return e._markForCheck()})},t}(zh),qh=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._vertical=!1,t}return Object(bl.__extends)(t,e),Object.defineProperty(t.prototype,"vertical",{get:function(){return this._vertical},set:function(e){this._vertical=c(e)},enumerable:!0,configurable:!0}),t}(zh),Uh=function(){function e(e,t,n,r,i,o){var l=this;this._changeDetectorRef=n,this._buttonToggleDispatcher=r,this._elementRef=i,this._focusMonitor=o,this.ariaLabel="",this.ariaLabelledby=null,this._checked=!1,this._disabled=!1,this._value=null,this._isSingleSelector=!1,this._removeUniqueSelectionListener=function(){},this.change=new al.EventEmitter,this.buttonToggleGroup=e,this.buttonToggleGroupMultiple=t,this.buttonToggleGroup?(this._removeUniqueSelectionListener=r.listen(function(e,t){e!=l.id&&t==l.name&&(l.checked=!1,l._changeDetectorRef.markForCheck())}),this._type="radio",this.name=this.buttonToggleGroup.name,this._isSingleSelector=!0):(this._type="checkbox",this._isSingleSelector=!1)}return Object.defineProperty(e.prototype,"inputId",{get:function(){return this.id+"-input"},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"checked",{get:function(){return this._checked},set:function(e){this._isSingleSelector&&e&&(this._buttonToggleDispatcher.notify(this.id,this.name),this._changeDetectorRef.markForCheck()),this._checked=e,e&&this._isSingleSelector&&this.buttonToggleGroup.value!=this.value&&(this.buttonToggleGroup.selected=this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this._value},set:function(e){this._value!=e&&(null!=this.buttonToggleGroup&&this.checked&&(this.buttonToggleGroup.value=e),this._value=e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"disabled",{get:function(){return this._disabled||null!=this.buttonToggleGroup&&this.buttonToggleGroup.disabled||null!=this.buttonToggleGroupMultiple&&this.buttonToggleGroupMultiple.disabled},set:function(e){this._disabled=c(e)},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){null==this.id&&(this.id="mat-button-toggle-"+Bh++),this.buttonToggleGroup&&this._value==this.buttonToggleGroup.value&&(this._checked=!0),this._focusMonitor.monitor(this._elementRef.nativeElement,!0)},e.prototype.focus=function(){this._inputElement.nativeElement.focus()},e.prototype._toggle=function(){this.checked=!this.checked},e.prototype._onInputChange=function(e){if(e.stopPropagation(),this._isSingleSelector){var t=this.buttonToggleGroup.selected!=this;this.checked=!0,this.buttonToggleGroup.selected=this,this.buttonToggleGroup._onTouched(),t&&this.buttonToggleGroup._emitChangeEvent()}else this._toggle();this._emitChangeEvent()},e.prototype._onInputClick=function(e){e.stopPropagation()},e.prototype._emitChangeEvent=function(){var e=new Hh;e.source=this,e.value=this._value,this.change.emit(e)},e.prototype.ngOnDestroy=function(){this._removeUniqueSelectionListener()},e.prototype._markForCheck=function(){this._changeDetectorRef.markForCheck()},e}(),Gh=function(){},Kh=al["\u0275crt"]({encapsulation:2,styles:[".mat-button-toggle-group,.mat-button-toggle-standalone{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);position:relative;display:inline-flex;flex-direction:row;border-radius:2px;cursor:pointer;white-space:nowrap;overflow:hidden}.mat-button-toggle-vertical{flex-direction:column}.mat-button-toggle-vertical .mat-button-toggle-label-content{display:block}.mat-button-toggle-disabled .mat-button-toggle-label-content{cursor:default}.mat-button-toggle{white-space:nowrap;position:relative}.mat-button-toggle.cdk-keyboard-focused .mat-button-toggle-focus-overlay,.mat-button-toggle.cdk-program-focused .mat-button-toggle-focus-overlay{opacity:1}.mat-button-toggle-label-content{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block;line-height:36px;padding:0 16px;cursor:pointer}.mat-button-toggle-label-content>*{vertical-align:middle}.mat-button-toggle-focus-overlay{border-radius:inherit;pointer-events:none;opacity:0;top:0;left:0;right:0;bottom:0;position:absolute}"],data:{}}),$h=n("bbdN"),Zh=function(){function e(e,t){var n=this;this.store=e,this.changeDetector=t,this.treeData=[],this.flattenData=[],this.dataColumns=[],this.jsonOutput="",this.selectedOutputView="NONE",this.outputQueryString="",this.toogleExpand="EXPAND TREE",this.codemirrorConfig={mode:"asterix",lineWrapping:!0,showCursorWhenSelecting:!0},this.loaded$=this.store.select(function(e){return e.sqlQuery.loaded}),this.store.select("sqlQuery").subscribe(function(e){if(e.loaded){n.selectedOutputView="TABLE",n.loading=!0,n.data=e.sqlQueryResult.results,n.treeData=[];var t=e.sqlQueryString;if(n.outputQueryString=t.length>150?": "+t.slice(0,150)+" (..)":": "+t,e.sqlQueryResult.results&&e.sqlQueryResult.results.length>0&&n.data[0]){for(var r=0;r<n.data.length;r++)n.treeData.push(n.generateTreeMenu(n.data[r],{label:"["+r+"]",children:[]}));n.loading=!1}if(n.jsonOutput=JSON.stringify(e.sqlQueryResult.results,null,2),n.data&&n.data.length>0){n.collapseAll(),n.dataColumns=[];var i=Object.keys(n.data[0]),o=i[0];if(n.data[0][o]instanceof Object){var l=Object.keys(n.data[0][o]);for(r=0;r<l.length;r++)n.dataColumns.push("object"==typeof n.data[0][o][l[r]]?{field:"nestedString"+r,header:l[r]}:{field:l[r],header:l[r]})}else for(r=0;r<i.length;r++)n.dataColumns.push({field:i[r],header:i[r]});if(n.data[0][o]instanceof Object)for(r=0;r<n.data.length;r++){l=Object.keys(n.data[r][o]);for(var a=0;a<l.length;a++)if("object"==typeof n.data[r][o][l[a]]){var s=JSON.stringify(n.data[r][o][l[a]],null,"\n");n.data[r][o]["nestedString"+a]=s}n.data[r]=n.data[r][o]}}}})}return e.prototype.generateTreeMenu=function(e,t){var n=this;void 0===t&&(t={label:"",children:[]});var r=[];return Object.keys(e).map(function(i){if("object"==typeof e[i]){var o={label:"",children:[]};(o={label:"",children:[]}).label=i;var l=n.generateTreeMenu(e[i],o);t.children?t.children.push(l):t=l}else{var a={label:"",children:[]};a.label=i+" : "+e[i],r.push(a)}}),r.length>0&&(t.children=r.concat(t.children)),t},e.prototype.ngOnInit=function(){var e=this;this.loaded$=this.store.select("sqlQuery"),this.store.select("sqlQuery").subscribe(function(t){e.queryMessage=t.sqlQueryError.errors?t.sqlQueryError.errors[0].msg:""})},e.prototype.onSelect=function(e){this.selectedOutputView=e},e.prototype.exportToCSV=function(){var e=new Blob([this.jsonOutput],{type:"text/csv;charset=utf-8"});Object($h.saveAs)(e,"Asterix-results.csv")},e.prototype.exportToText=function(){var e=this.jsonOutput,t=new Blob([e],{type:"text/plain;charset=utf-8"});Object($h.saveAs)(t,"Asterix-results.txt")},e.prototype.expandTree=function(){"EXPAND TREE"===this.toogleExpand?this.expandAll():this.collapseAll()},e.prototype.expandAll=function(){var e=this;this.toogleExpand="TREE COLLAPSE",this.treeData.forEach(function(t){e.expandRecursive(t,!0)})},e.prototype.collapseAll=function(){var e=this;this.toogleExpand="EXPAND TREE",this.treeData.forEach(function(t){e.expandRecursive(t,!1)})},e.prototype.expandRecursive=function(e,t){var n=this;e.expanded=t,e.children&&e.children.forEach(function(e){n.expandRecursive(e,t)})},e}(),Qh=al["\u0275crt"]({encapsulation:0,styles:[['.sql-results-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;padding:0;height:600px;width:100%;margin:10px;min-height:150px}.toolbar-icon[_ngcontent-%COMP%]{padding:0 14px 0 0;margin:0}.spacer[_ngcontent-%COMP%]{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.results-selector[_ngcontent-%COMP%]{max-height:42px;min-height:42px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;font-size:.8rem;font-weight:500;background-color:#fff;border:1px solid rgba(54,147,209,.87);overflow-wrap:break-word;word-break:break-all}.content-area[_ngcontent-%COMP%]{position:relative;color:rgba(0,0,0,.87);height:500px;padding:0;margin:0;overflow:auto;font-size:.8rem;font-weight:500;font-family:Roboto,monospace}.leaf-list-open[_ngcontent-%COMP%], .root-closed[_ngcontent-%COMP%], .root-open[_ngcontent-%COMP%]{list-style-type:none}.leaf-list-open[_ngcontent-%COMP%]{padding-left:25px;color:red}.leaf-list-open.div[_ngcontent-%COMP%]   .leaf-list-open.li[_ngcontent-%COMP%]{margin-left:50px!important;color:green}.leaf[_ngcontent-%COMP%]{color:blue}.leaf-list-closed[_ngcontent-%COMP%]{list-style-type:none;display:none}ul[_ngcontent-%COMP%] > .root-closed[_ngcontent-%COMP%]:before{content:"+"}ul[_ngcontent-%COMP%] > .root-open[_ngcontent-%COMP%]:before{content:"-"}.queryErrorMessage[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.1);color:rgba(209,54,54,.87);padding:5px;padding-left:10px}.metrics[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;color:rgba(54,147,209,.87);font-size:.8rem;font-weight:500}.span-results[_ngcontent-%COMP%]{padding-top:10px;padding-left:10px}.actions[_ngcontent-%COMP%]{border-top:1px solid rgba(0,0,0,.1);color:rgba(54,147,209,.87);margin:0}th[_ngcontent-%COMP%]{text-align:left!important}.datatable-header[_ngcontent-%COMP%]{color:red!important;background-color:blue}.data-viewer-container[_ngcontent-%COMP%]{padding:20px;padding-bottom:40px;height:100%;overflow:hidden}.output-group[_ngcontent-%COMP%]{margin-right:20px}.menu-export[_ngcontent-%COMP%]{font-size:.8rem!important;font-weight:500!important}.button-expand[_ngcontent-%COMP%], .button-export[_ngcontent-%COMP%]{margin-right:20px;color:rgba(54,147,209,.87)}.ui-datatable-data[_ngcontent-%COMP%] > tr[_ngcontent-%COMP%] > td[_ngcontent-%COMP%]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px;color:red}']],data:{}}),Yh="[Metadata Tree Query] UPDATE Metadata tree",Xh="[Metadata Tree Query] UPDATE Metadata tree Success",Jh=function(){return function(){this.type=Yh}}(),em=function(){return function(e){this.payload=e,this.type=Xh}}(),tm=function(){function e(e){var t=this;this.store=e,this.nodes=[],this.store.select(function(e){return e.metadata.tree}).subscribe(function(e){t.nodes=[];for(var n=0;n<e.length;n++)if(e[n].DataverseName){var r={id:0,name:"",children:[]};r.id=n,r.name=e[n].DataverseName;for(var i=0;i<e[n].Datasets.length;i++){var o={id:0,name:"",children:[]};o.id=i,o.name=e[n].Datasets[i].DatasetName,r.children.push(o)}t.nodes.push(r)}})}return e.prototype.treeCalc=function(){this.store.dispatch(new Jh)},e}(),nm=al["\u0275crt"]({encapsulation:0,styles:[[".query-container[_ngcontent-%COMP%]{width:100%;overflow:hidden}.metadata[_ngcontent-%COMP%], .query-container[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;margin:0;padding:0}.metadata[_ngcontent-%COMP%]{width:20%;border-right:1px solid rgba(0,0,0,.2)}.vertical[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:80%;overflow:hidden;margin:0;padding:1px0}.metadata-card[_ngcontent-%COMP%], .output-card[_ngcontent-%COMP%], .query-card[_ngcontent-%COMP%]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;overflow:hidden;margin:0;padding:0}"]],data:{}}),rm=function(){function e(){this.message=""}return e.prototype.tabChange=function(){this.indexes.cleanUp(),this.datasets.cleanUp(),this.datatypes.cleanUp(),this.dataverses.cleanUp()},e}(),im=al["\u0275crt"]({encapsulation:0,styles:[[".datasets[_ngcontent-%COMP%], .datatypes[_ngcontent-%COMP%], .dataverses[_ngcontent-%COMP%], .indexes[_ngcontent-%COMP%]{margin:0;min-height:750px;max-height:750px;width:100%;overflow:hidden}.metadata-menu[_ngcontent-%COMP%]     .mat-tab-label{font-size:.8rem!important;font-weight:500!important}"]],data:{}}),om=function(e){this.store=e},lm=al["\u0275crt"]({encapsulation:0,styles:[[".content[_ngcontent-%COMP%]{width:95%;margin:0 auto}.menu[_ngcontent-%COMP%]     .mat-tab-label{font-size:.8rem!important;font-weight:500!important}"]],data:{}}),am=function(){return function(e){this.store=e,console.log("AsterixDB Web Console Core Service"),this.store.dispatch(new Wd("-")),this.store.dispatch(new sp("-")),this.store.dispatch(new Sp("-")),this.store.dispatch(new Bp("-"))}}(),sm=al["\u0275crt"]({encapsulation:0,styles:[[""]],data:{}}),um=al["\u0275ccf"]("awc-root",ul,function(e){return al["\u0275vid"](0,[(e()(),al["\u0275eld"](0,0,null,null,1,"awc-root",[],null,null,null,Ui,sm)),al["\u0275did"](1,49152,null,0,ul,[am],null,null)],null,null)},{},{},[]),cm=function(e,t){return!1},dm=function(e,t){return!1},pm=function(e,t,n){return[]};if("undefined"!=typeof Element){if(cm=function(e,t){return e.contains(t)},Element.prototype.matches)dm=function(e,t){return e.matches(t)};else{var fm=Element.prototype,hm=fm.matchesSelector||fm.mozMatchesSelector||fm.msMatchesSelector||fm.oMatchesSelector||fm.webkitMatchesSelector;hm&&(dm=function(e,t){return hm.apply(e,[t])})}pm=function(e,t,n){var r=[];if(n)r.push.apply(r,e.querySelectorAll(t));else{var i=e.querySelector(t);i&&r.push(i)}return r}}var mm=null,gm=!1,ym=dm,vm=cm,bm=pm,_m=function(){function e(){}return e.prototype.validateStyleProperty=function(e){return Ji(e)},e.prototype.matchesElement=function(e,t){return ym(e,t)},e.prototype.containsElement=function(e,t){return vm(e,t)},e.prototype.query=function(e,t,n){return bm(e,t,n)},e.prototype.computeStyle=function(e,t,n){return n||""},e.prototype.animate=function(e,t,n,r,i,o){return void 0===o&&(o=[]),new Rs.NoopAnimationPlayer},e}(),wm=function(){function e(){}return e.NOOP=new _m,e}(),xm=1e3,Cm="ng-trigger",Em=".ng-trigger",Sm=".ng-animating",Om=new RegExp("{{\\s*(.+?)\\s*}}","g"),Tm=/-+([a-z0-9])/g,km="*",Dm=new Set(["true","1"]),Im=new Set(["false","0"]),Rm=new RegExp("s*:selfs*,?","g"),Mm=function(){function e(e){this._driver=e}return e.prototype.build=function(e,t){var n=new Pm(t);return this._resetContextStyleTimingState(n),ho(this,so(e),n)},e.prototype._resetContextStyleTimingState=function(e){e.currentQuerySelector="",e.collectedStyles={},e.collectedStyles[""]={},e.currentTime=0},e.prototype.visitTrigger=function(e,t){var n=this,r=t.queryCount=0,i=t.depCount=0,o=[],l=[];return"@"==e.name.charAt(0)&&t.errors.push("animation triggers cannot be prefixed with an `@` sign (e.g. trigger('@foo', [...]))"),e.definitions.forEach(function(e){if(n._resetContextStyleTimingState(t),0==e.type){var a=e,s=a.name;s.split(/\s*,\s*/).forEach(function(e){a.name=e,o.push(n.visitState(a,t))}),a.name=s}else if(1==e.type){var u=n.visitTransition(e,t);r+=u.queryCount,i+=u.depCount,l.push(u)}else t.errors.push("only state() and transition() definitions can sit inside of a trigger()")}),{type:7,name:e.name,states:o,transitions:l,queryCount:r,depCount:i,options:null}},e.prototype.visitState=function(e,t){var n=this.visitStyle(e.styles,t),r=e.options&&e.options.params||null;if(n.containsDynamicStyles){var i=new Set,o=r||{};if(n.styles.forEach(function(e){if(yo(e)){var t=e;Object.keys(t).forEach(function(e){uo(t[e]).forEach(function(e){o.hasOwnProperty(e)||i.add(e)})})}}),i.size){var l=po(i.values());t.errors.push('state("'+e.name+'", ...) must define default values for all the following style substitutions: '+l.join(", "))}}return{type:0,name:e.name,style:n,options:r?{params:r}:null}},e.prototype.visitTransition=function(e,t){t.queryCount=0,t.depCount=0;var n=ho(this,so(e.animation),t);return{type:1,matchers:function(e,t){var n=[];return"string"==typeof e?e.split(/\s*,\s*/).forEach(function(e){return function(e,t,n){if(":"==e[0]){var r=function(e,t){switch(e){case":enter":return"void => *";case":leave":return"* => void";case":increment":return function(e,t){return parseFloat(t)>parseFloat(e)};case":decrement":return function(e,t){return parseFloat(t)<parseFloat(e)};default:return t.push('The transition alias value "'+e+'" is not supported'),"* => *"}}(e,n);if("function"==typeof r)return void t.push(r);e=r}var i=e.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);if(null==i||i.length<4)return n.push('The provided transition expression "'+e+'" is not supported'),t;var o=i[1],l=i[2],a=i[3];t.push(mo(o,a)),"<"!=l[0]||o==km&&a==km||t.push(mo(a,o))}(e,n,t)}):n.push(e),n}(e.expr,t.errors),animation:n,queryCount:t.queryCount,depCount:t.depCount,options:vo(e.options)}},e.prototype.visitSequence=function(e,t){var n=this;return{type:2,steps:e.steps.map(function(e){return ho(n,e,t)}),options:vo(e.options)}},e.prototype.visitGroup=function(e,t){var n=this,r=t.currentTime,i=0,o=e.steps.map(function(e){t.currentTime=r;var o=ho(n,e,t);return i=Math.max(i,t.currentTime),o});return t.currentTime=i,{type:3,steps:o,options:vo(e.options)}},e.prototype.visitAnimate=function(e,t){var n=function(e,t){var n=null;if(e.hasOwnProperty("duration"))n=e;else if("number"==typeof e)return bo(ro(e,t).duration,0,"");var r=e;if(r.split(/\s+/).some(function(e){return"{"==e.charAt(0)&&"{"==e.charAt(1)})){var i=bo(0,0,"");return i.dynamic=!0,i.strValue=r,i}return n=n||ro(r,t),bo(n.duration,n.delay,n.easing)}(e.timings,t.errors);t.currentAnimateTimings=n;var r,i=e.styles?e.styles:Object(Rs.style)({});if(5==i.type)r=this.visitKeyframes(i,t);else{var o=e.styles,l=!1;if(!o){l=!0;var a={};n.easing&&(a.easing=n.easing),o=Object(Rs.style)(a)}t.currentTime+=n.duration+n.delay;var s=this.visitStyle(o,t);s.isEmptyStep=l,r=s}return t.currentAnimateTimings=null,{type:4,timings:n,style:r,options:null}},e.prototype.visitStyle=function(e,t){var n=this._makeStyleAst(e,t);return this._validateStyleAst(n,t),n},e.prototype._makeStyleAst=function(e,t){var n=[];Array.isArray(e.styles)?e.styles.forEach(function(e){"string"==typeof e?e==Rs.AUTO_STYLE?n.push(e):t.errors.push("The provided style string value "+e+" is not allowed."):n.push(e)}):n.push(e.styles);var r=!1,i=null;return n.forEach(function(e){if(yo(e)){var t=e,n=t.easing;if(n&&(i=n,delete t.easing),!r)for(var o in t)if(t[o].toString().indexOf("{{")>=0){r=!0;break}}}),{type:6,styles:n,easing:i,offset:e.offset,containsDynamicStyles:r,options:null}},e.prototype._validateStyleAst=function(e,t){var n=this,r=t.currentAnimateTimings,i=t.currentTime,o=t.currentTime;r&&o>0&&(o-=r.duration+r.delay),e.styles.forEach(function(e){"string"!=typeof e&&Object.keys(e).forEach(function(r){if(n._driver.validateStyleProperty(r)){var l=t.collectedStyles[t.currentQuerySelector],a=l[r],s=!0;a&&(o!=i&&o>=a.startTime&&i<=a.endTime&&(t.errors.push('The CSS property "'+r+'" that exists between the times of "'+a.startTime+'ms" and "'+a.endTime+'ms" is also being animated in a parallel animation between the times of "'+o+'ms" and "'+i+'ms"'),s=!1),o=a.startTime),s&&(l[r]={startTime:o,endTime:i}),t.options&&function(n,i,o){var l=t.options.params||{},a=uo(e[r]);a.length&&a.forEach(function(e){l.hasOwnProperty(e)||o.push("Unable to resolve the local animation param "+e+" in the given list of values")})}(0,0,t.errors)}else t.errors.push('The provided animation property "'+r+'" is not a supported CSS property for animations')})})},e.prototype.visitKeyframes=function(e,t){var n=this,r={type:5,styles:[],options:null};if(!t.currentAnimateTimings)return t.errors.push("keyframes() must be placed inside of a call to animate()"),r;var i=0,o=[],l=!1,a=!1,s=0,u=e.steps.map(function(e){var r=n._makeStyleAst(e,t),u=null!=r.offset?r.offset:function(e){if("string"==typeof e)return null;var t=null;if(Array.isArray(e))e.forEach(function(e){if(yo(e)&&e.hasOwnProperty("offset")){var n=e;t=parseFloat(n.offset),delete n.offset}});else if(yo(e)&&e.hasOwnProperty("offset")){var n=e;t=parseFloat(n.offset),delete n.offset}return t}(r.styles),c=0;return null!=u&&(i++,c=r.offset=u),a=a||c<0||c>1,l=l||c<s,s=c,o.push(c),r});a&&t.errors.push("Please ensure that all keyframe offsets are between 0 and 1"),l&&t.errors.push("Please ensure that all keyframe offsets are in order");var c=e.steps.length,d=0;i>0&&i<c?t.errors.push("Not all style() steps within the declared keyframes() contain offsets"):0==i&&(d=1/(c-1));var p=c-1,f=t.currentTime,h=t.currentAnimateTimings,m=h.duration;return u.forEach(function(e,i){var l=d>0?i==p?1:d*i:o[i],a=l*m;t.currentTime=f+h.delay+a,h.duration=a,n._validateStyleAst(e,t),e.offset=l,r.styles.push(e)}),r},e.prototype.visitReference=function(e,t){return{type:8,animation:ho(this,so(e.animation),t),options:vo(e.options)}},e.prototype.visitAnimateChild=function(e,t){return t.depCount++,{type:9,options:vo(e.options)}},e.prototype.visitAnimateRef=function(e,t){return{type:10,animation:this.visitReference(e.animation,t),options:vo(e.options)}},e.prototype.visitQuery=function(e,t){var n=t.currentQuerySelector,r=e.options||{};t.queryCount++,t.currentQuery=e;var i=function(e){var t=!!e.split(/\s*,\s*/).find(function(e){return":self"==e});return t&&(e=e.replace(Rm,"")),e=e.replace(/@\*/g,Em).replace(/@\w+/g,function(e){return Em+"-"+e.substr(1)}).replace(/:animating/g,Sm),[e,t]}(e.selector),o=i[0],l=i[1];t.currentQuerySelector=n.length?n+" "+o:o,Yi(t.collectedStyles,t.currentQuerySelector,{});var a=ho(this,so(e.animation),t);return t.currentQuery=null,t.currentQuerySelector=n,{type:11,selector:o,limit:r.limit||0,optional:!!r.optional,includeSelf:l,animation:a,originalSelector:e.selector,options:vo(e.options)}},e.prototype.visitStagger=function(e,t){t.currentQuery||t.errors.push("stagger() can only be used inside of query()");var n="full"===e.timings?{duration:0,delay:0,easing:"full"}:ro(e.timings,t.errors,!0);return{type:12,animation:ho(this,so(e.animation),t),timings:n,options:null}},e}(),Pm=function(e){this.errors=e,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles={},this.options=null},Nm=function(){function e(){this._map=new Map}return e.prototype.consume=function(e){var t=this._map.get(e);return t?this._map.delete(e):t=[],t},e.prototype.append=function(e,t){var n=this._map.get(e);n||this._map.set(e,n=[]),n.push.apply(n,t)},e.prototype.has=function(e){return this._map.has(e)},e.prototype.clear=function(){this._map.clear()},e}(),Am=new RegExp(":enter","g"),Lm=new RegExp(":leave","g"),Fm=function(){function e(){}return e.prototype.buildKeyframes=function(e,t,n,r,i,o,l,a,s,u){void 0===u&&(u=[]),s=s||new Nm;var c=new Vm(e,t,s,r,i,u,[]);c.options=a,c.currentTimeline.setStyles([o],null,c.errors,a),ho(this,n,c);var d=c.timelines.filter(function(e){return e.containsAnimation()});if(d.length&&Object.keys(l).length){var p=d[d.length-1];p.allowOnlyTimelineStyles()||p.setStyles([l],null,c.errors,a)}return d.length?d.map(function(e){return e.buildKeyframes()}):[_o(t,[],[],[],0,0,"",!1)]},e.prototype.visitTrigger=function(e,t){},e.prototype.visitState=function(e,t){},e.prototype.visitTransition=function(e,t){},e.prototype.visitAnimateChild=function(e,t){var n=t.subInstructions.consume(t.element);if(n){var r=t.createSubContext(e.options),i=t.currentTimeline.currentTime,o=this._visitSubInstructions(n,r,r.options);i!=o&&t.transformIntoNewTimeline(o)}t.previousNode=e},e.prototype.visitAnimateRef=function(e,t){var n=t.createSubContext(e.options);n.transformIntoNewTimeline(),this.visitReference(e.animation,n),t.transformIntoNewTimeline(n.currentTimeline.currentTime),t.previousNode=e},e.prototype._visitSubInstructions=function(e,t,n){var r=t.currentTimeline.currentTime,i=null!=n.duration?to(n.duration):null,o=null!=n.delay?to(n.delay):null;return 0!==i&&e.forEach(function(e){var n=t.appendInstructionToTimeline(e,i,o);r=Math.max(r,n.duration+n.delay)}),r},e.prototype.visitReference=function(e,t){t.updateOptions(e.options,!0),ho(this,e.animation,t),t.previousNode=e},e.prototype.visitSequence=function(e,t){var n=this,r=t.subContextCount,i=t,o=e.options;if(o&&(o.params||o.delay)&&((i=t.createSubContext(o)).transformIntoNewTimeline(),null!=o.delay)){6==i.previousNode.type&&(i.currentTimeline.snapshotCurrentStyles(),i.previousNode=jm);var l=to(o.delay);i.delayNextStep(l)}e.steps.length&&(e.steps.forEach(function(e){return ho(n,e,i)}),i.currentTimeline.applyStylesToKeyframe(),i.subContextCount>r&&i.transformIntoNewTimeline()),t.previousNode=e},e.prototype.visitGroup=function(e,t){var n=this,r=[],i=t.currentTimeline.currentTime,o=e.options&&e.options.delay?to(e.options.delay):0;e.steps.forEach(function(l){var a=t.createSubContext(e.options);o&&a.delayNextStep(o),ho(n,l,a),i=Math.max(i,a.currentTimeline.currentTime),r.push(a.currentTimeline)}),r.forEach(function(e){return t.currentTimeline.mergeTimelineCollectedStyles(e)}),t.transformIntoNewTimeline(i),t.previousNode=e},e.prototype._visitTiming=function(e,t){if(e.dynamic){var n=e.strValue;return ro(t.params?co(n,t.params,t.errors):n,t.errors)}return{duration:e.duration,delay:e.delay,easing:e.easing}},e.prototype.visitAnimate=function(e,t){var n=t.currentAnimateTimings=this._visitTiming(e.timings,t),r=t.currentTimeline;n.delay&&(t.incrementTime(n.delay),r.snapshotCurrentStyles());var i=e.style;5==i.type?this.visitKeyframes(i,t):(t.incrementTime(n.duration),this.visitStyle(i,t),r.applyStylesToKeyframe()),t.currentAnimateTimings=null,t.previousNode=e},e.prototype.visitStyle=function(e,t){var n=t.currentTimeline,r=t.currentAnimateTimings;!r&&n.getCurrentStyleProperties().length&&n.forwardFrame();var i=r&&r.easing||e.easing;e.isEmptyStep?n.applyEmptyStep(i):n.setStyles(e.styles,i,t.errors,t.options),t.previousNode=e},e.prototype.visitKeyframes=function(e,t){var n=t.currentAnimateTimings,r=t.currentTimeline.duration,i=n.duration,o=t.createSubContext().currentTimeline;o.easing=n.easing,e.styles.forEach(function(e){o.forwardTime((e.offset||0)*i),o.setStyles(e.styles,e.easing,t.errors,t.options),o.applyStylesToKeyframe()}),t.currentTimeline.mergeTimelineCollectedStyles(o),t.transformIntoNewTimeline(r+i),t.previousNode=e},e.prototype.visitQuery=function(e,t){var n=this,r=t.currentTimeline.currentTime,i=e.options||{},o=i.delay?to(i.delay):0;o&&(6===t.previousNode.type||0==r&&t.currentTimeline.getCurrentStyleProperties().length)&&(t.currentTimeline.snapshotCurrentStyles(),t.previousNode=jm);var l=r,a=t.invokeQuery(e.selector,e.originalSelector,e.limit,e.includeSelf,!!i.optional,t.errors);t.currentQueryTotal=a.length;var s=null;a.forEach(function(r,i){t.currentQueryIndex=i;var a=t.createSubContext(e.options,r);o&&a.delayNextStep(o),r===t.element&&(s=a.currentTimeline),ho(n,e.animation,a),a.currentTimeline.applyStylesToKeyframe();var u=a.currentTimeline.currentTime;l=Math.max(l,u)}),t.currentQueryIndex=0,t.currentQueryTotal=0,t.transformIntoNewTimeline(l),s&&(t.currentTimeline.mergeTimelineCollectedStyles(s),t.currentTimeline.snapshotCurrentStyles()),t.previousNode=e},e.prototype.visitStagger=function(e,t){var n=t.parentContext,r=t.currentTimeline,i=e.timings,o=Math.abs(i.duration),l=o*t.currentQueryIndex;switch(i.duration<0?"reverse":i.easing){case"reverse":l=o*(t.currentQueryTotal-1)-l;break;case"full":l=n.currentStaggerTime}var a=t.currentTimeline;l&&a.delayNextStep(l);var s=a.currentTime;ho(this,e.animation,t),t.previousNode=e,n.currentStaggerTime=r.currentTime-s+(r.startTime-n.currentTimeline.startTime)},e}(),jm={},Vm=function(){function e(e,t,n,r,i,o,l,a){this._driver=e,this.element=t,this.subInstructions=n,this._enterClassName=r,this._leaveClassName=i,this.errors=o,this.timelines=l,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=jm,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=a||new zm(this._driver,t,0),l.push(this.currentTimeline)}return Object.defineProperty(e.prototype,"params",{get:function(){return this.options.params},enumerable:!0,configurable:!0}),e.prototype.updateOptions=function(e,t){var n=this;if(e){var r=e,i=this.options;null!=r.duration&&(i.duration=to(r.duration)),null!=r.delay&&(i.delay=to(r.delay));var o=r.params;if(o){var l=i.params;l||(l=this.options.params={}),Object.keys(o).forEach(function(e){t&&l.hasOwnProperty(e)||(l[e]=co(o[e],l,n.errors))})}}},e.prototype._copyOptions=function(){var e={};if(this.options){var t=this.options.params;if(t){var n=e.params={};Object.keys(t).forEach(function(e){n[e]=t[e]})}}return e},e.prototype.createSubContext=function(t,n,r){void 0===t&&(t=null);var i=n||this.element,o=new e(this._driver,i,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(i,r||0));return o.previousNode=this.previousNode,o.currentAnimateTimings=this.currentAnimateTimings,o.options=this._copyOptions(),o.updateOptions(t),o.currentQueryIndex=this.currentQueryIndex,o.currentQueryTotal=this.currentQueryTotal,o.parentContext=this,this.subContextCount++,o},e.prototype.transformIntoNewTimeline=function(e){return this.previousNode=jm,this.currentTimeline=this.currentTimeline.fork(this.element,e),this.timelines.push(this.currentTimeline),this.currentTimeline},e.prototype.appendInstructionToTimeline=function(e,t,n){var r={duration:null!=t?t:e.duration,delay:this.currentTimeline.currentTime+(null!=n?n:0)+e.delay,easing:""},i=new Bm(this._driver,e.element,e.keyframes,e.preStyleProps,e.postStyleProps,r,e.stretchStartingKeyframe);return this.timelines.push(i),r},e.prototype.incrementTime=function(e){this.currentTimeline.forwardTime(this.currentTimeline.duration+e)},e.prototype.delayNextStep=function(e){e>0&&this.currentTimeline.delayNextStep(e)},e.prototype.invokeQuery=function(e,t,n,r,i,o){var l=[];if(r&&l.push(this.element),e.length>0){e=(e=e.replace(Am,"."+this._enterClassName)).replace(Lm,"."+this._leaveClassName);var a=this._driver.query(this.element,e,1!=n);0!==n&&(a=n<0?a.slice(a.length+n,a.length):a.slice(0,n)),l.push.apply(l,a)}return i||0!=l.length||o.push('`query("'+t+'")` returned zero elements. (Use `query("'+t+'", { optional: true })` if you wish to allow this.)'),l},e}(),zm=function(){function e(e,t,n,r){this._driver=e,this.element=t,this.startTime=n,this._elementTimelineStylesLookup=r,this.duration=0,this._previousKeyframe={},this._currentKeyframe={},this._keyframes=new Map,this._styleSummary={},this._pendingStyles={},this._backFill={},this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._localTimelineStyles=Object.create(this._backFill,{}),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(t),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(t,this._localTimelineStyles)),this._loadKeyframe()}return e.prototype.containsAnimation=function(){switch(this._keyframes.size){case 0:return!1;case 1:return this.getCurrentStyleProperties().length>0;default:return!0}},e.prototype.getCurrentStyleProperties=function(){return Object.keys(this._currentKeyframe)},Object.defineProperty(e.prototype,"currentTime",{get:function(){return this.startTime+this.duration},enumerable:!0,configurable:!0}),e.prototype.delayNextStep=function(e){var t=1==this._keyframes.size&&Object.keys(this._pendingStyles).length;this.duration||t?(this.forwardTime(this.currentTime+e),t&&this.snapshotCurrentStyles()):this.startTime+=e},e.prototype.fork=function(t,n){return this.applyStylesToKeyframe(),new e(this._driver,t,n||this.currentTime,this._elementTimelineStylesLookup)},e.prototype._loadKeyframe=function(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=Object.create(this._backFill,{}),this._keyframes.set(this.duration,this._currentKeyframe))},e.prototype.forwardFrame=function(){this.duration+=1,this._loadKeyframe()},e.prototype.forwardTime=function(e){this.applyStylesToKeyframe(),this.duration=e,this._loadKeyframe()},e.prototype._updateStyle=function(e,t){this._localTimelineStyles[e]=t,this._globalTimelineStyles[e]=t,this._styleSummary[e]={time:this.currentTime,value:t}},e.prototype.allowOnlyTimelineStyles=function(){return this._currentEmptyStepKeyframe!==this._currentKeyframe},e.prototype.applyEmptyStep=function(e){var t=this;e&&(this._previousKeyframe.easing=e),Object.keys(this._globalTimelineStyles).forEach(function(e){t._backFill[e]=t._globalTimelineStyles[e]||Rs.AUTO_STYLE,t._currentKeyframe[e]=Rs.AUTO_STYLE}),this._currentEmptyStepKeyframe=this._currentKeyframe},e.prototype.setStyles=function(e,t,n,r){var i=this;t&&(this._previousKeyframe.easing=t);var o=r&&r.params||{},l=function(t,n){var r,i={};return e.forEach(function(e){"*"===e?(r=r||Object.keys(n)).forEach(function(e){i[e]=Rs.AUTO_STYLE}):oo(e,!1,i)}),i}(0,this._globalTimelineStyles);Object.keys(l).forEach(function(e){var t=co(l[e],o,n);i._pendingStyles[e]=t,i._localTimelineStyles.hasOwnProperty(e)||(i._backFill[e]=i._globalTimelineStyles.hasOwnProperty(e)?i._globalTimelineStyles[e]:Rs.AUTO_STYLE),i._updateStyle(e,t)})},e.prototype.applyStylesToKeyframe=function(){var e=this,t=this._pendingStyles,n=Object.keys(t);0!=n.length&&(this._pendingStyles={},n.forEach(function(n){e._currentKeyframe[n]=t[n]}),Object.keys(this._localTimelineStyles).forEach(function(t){e._currentKeyframe.hasOwnProperty(t)||(e._currentKeyframe[t]=e._localTimelineStyles[t])}))},e.prototype.snapshotCurrentStyles=function(){var e=this;Object.keys(this._localTimelineStyles).forEach(function(t){var n=e._localTimelineStyles[t];e._pendingStyles[t]=n,e._updateStyle(t,n)})},e.prototype.getFinalKeyframe=function(){return this._keyframes.get(this.duration)},Object.defineProperty(e.prototype,"properties",{get:function(){var e=[];for(var t in this._currentKeyframe)e.push(t);return e},enumerable:!0,configurable:!0}),e.prototype.mergeTimelineCollectedStyles=function(e){var t=this;Object.keys(e._styleSummary).forEach(function(n){var r=t._styleSummary[n],i=e._styleSummary[n];(!r||i.time>r.time)&&t._updateStyle(n,i.value)})},e.prototype.buildKeyframes=function(){var e=this;this.applyStylesToKeyframe();var t=new Set,n=new Set,r=1===this._keyframes.size&&0===this.duration,i=[];this._keyframes.forEach(function(o,l){var a=oo(o,!0);Object.keys(a).forEach(function(e){var r=a[e];r==Rs["\u0275PRE_STYLE"]?t.add(e):r==Rs.AUTO_STYLE&&n.add(e)}),r||(a.offset=l/e.duration),i.push(a)});var o=t.size?po(t.values()):[],l=n.size?po(n.values()):[];if(r){var a=i[0],s=io(a);a.offset=0,s.offset=1,i=[a,s]}return _o(this.element,i,o,l,this.duration,this.startTime,this.easing,!1)},e}(),Bm=function(e){function t(t,n,r,i,o,l,a){void 0===a&&(a=!1);var s=e.call(this,t,n,l.delay)||this;return s.element=n,s.keyframes=r,s.preStyleProps=i,s.postStyleProps=o,s._stretchStartingKeyframe=a,s.timings={duration:l.duration,delay:l.delay,easing:l.easing},s}return Object(bl.__extends)(t,e),t.prototype.containsAnimation=function(){return this.keyframes.length>1},t.prototype.buildKeyframes=function(){var e=this.keyframes,t=this.timings,n=t.delay,r=t.duration,i=t.easing;if(this._stretchStartingKeyframe&&n){var o=[],l=r+n,a=n/l,s=oo(e[0],!1);s.offset=0,o.push(s);var u=oo(e[0],!1);u.offset=xo(a),o.push(u);for(var c=e.length-1,d=1;d<=c;d++){var p=oo(e[d],!1);p.offset=xo((n+p.offset*r)/l),o.push(p)}r=l,n=0,i="",e=o}return _o(this.element,e,this.preStyleProps,this.postStyleProps,r,n,i,!0)},t}(zm),Hm=function(){},Wm=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(bl.__extends)(t,e),t.prototype.normalizePropertyName=function(e,t){return fo(e)},t.prototype.normalizeStyleValue=function(e,t,n,r){var i="",o=n.toString().trim();if(qm[t]&&0!==n&&"0"!==n)if("number"==typeof n)i="px";else{var l=n.match(/^[+-]?[\d\.]+([a-z]*)$/);l&&0==l[1].length&&r.push("Please provide a CSS unit value for "+e+":"+n)}return o+i},t}(Hm),qm=function(e){var t={};return"width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective".split(",").forEach(function(e){return t[e]=!0}),t}(),Um={},Gm=function(){function e(e,t,n){this._triggerName=e,this.ast=t,this._stateStyles=n}return e.prototype.match=function(e,t){return function(e,t,n){return e.some(function(e){return e(t,n)})}(this.ast.matchers,e,t)},e.prototype.buildStyles=function(e,t,n){var r=this._stateStyles["*"],i=this._stateStyles[e],o=r?r.buildStyles(t,n):{};return i?i.buildStyles(t,n):o},e.prototype.build=function(e,t,n,r,i,o,l,a,s){var u=[],c=this.ast.options&&this.ast.options.params||Um,d=this.buildStyles(n,l&&l.params||Um,u),p=a&&a.params||Um,f=this.buildStyles(r,p,u),h=new Set,m=new Map,g=new Map,y="void"===r,v={params:Object(bl.__assign)({},c,p)},b=wo(e,t,this.ast.animation,i,o,d,f,v,s,u);if(u.length)return Co(t,this._triggerName,n,r,y,d,f,[],[],m,g,u);b.forEach(function(e){var n=e.element,r=Yi(m,n,{});e.preStyleProps.forEach(function(e){return r[e]=!0});var i=Yi(g,n,{});e.postStyleProps.forEach(function(e){return i[e]=!0}),n!==t&&h.add(n)});var _=po(h.values());return Co(t,this._triggerName,n,r,y,d,f,b,_,m,g)},e}(),Km=function(){function e(e,t){this.styles=e,this.defaultParams=t}return e.prototype.buildStyles=function(e,t){var n={},r=io(this.defaultParams);return Object.keys(e).forEach(function(t){var n=e[t];null!=n&&(r[t]=n)}),this.styles.styles.forEach(function(e){if("string"!=typeof e){var i=e;Object.keys(i).forEach(function(e){var o=i[e];o.length>1&&(o=co(o,r,t)),n[e]=o})}}),n},e}(),$m=function(){function e(e,t){var n=this;this.name=e,this.ast=t,this.transitionFactories=[],this.states={},t.states.forEach(function(e){n.states[e.name]=new Km(e.style,e.options&&e.options.params||{})}),Eo(this.states,"true","1"),Eo(this.states,"false","0"),t.transitions.forEach(function(t){n.transitionFactories.push(new Gm(e,t,n.states))}),this.fallbackTransition=function(t,n){return new Gm(e,{type:1,animation:{type:2,steps:[],options:null},matchers:[function(e,t){return!0}],options:null,queryCount:0,depCount:0},n)}(0,this.states)}return Object.defineProperty(e.prototype,"containsQueries",{get:function(){return this.ast.queryCount>0},enumerable:!0,configurable:!0}),e.prototype.matchTransition=function(e,t){return this.transitionFactories.find(function(n){return n.match(e,t)})||null},e.prototype.matchStyles=function(e,t,n){return this.fallbackTransition.buildStyles(e,t,n)},e}(),Zm=new Nm,Qm=function(){function e(e,t){this._driver=e,this._normalizer=t,this._animations={},this._playersById={},this.players=[]}return e.prototype.register=function(e,t){var n=[],r=go(this._driver,t,n);if(n.length)throw new Error("Unable to build the animation due to the following errors: "+n.join("\n"));this._animations[e]=r},e.prototype._buildPlayer=function(e,t,n){var r=e.element,i=Ki(0,this._normalizer,0,e.keyframes,t,n);return this._driver.animate(r,i,e.duration,e.delay,e.easing,[])},e.prototype.create=function(e,t,n){var r=this;void 0===n&&(n={});var i,o=[],l=this._animations[e],a=new Map;if(l?(i=wo(this._driver,t,l,"ng-enter","ng-leave",{},{},n,Zm,o)).forEach(function(e){var t=Yi(a,e.element,{});e.postStyleProps.forEach(function(e){return t[e]=null})}):(o.push("The requested animation doesn't exist or has already been destroyed"),i=[]),o.length)throw new Error("Unable to create the animation due to the following errors: "+o.join("\n"));a.forEach(function(e,t){Object.keys(e).forEach(function(n){e[n]=r._driver.computeStyle(t,n,Rs.AUTO_STYLE)})});var s=Gi(i.map(function(e){var t=a.get(e.element);return r._buildPlayer(e,{},t)}));return this._playersById[e]=s,s.onDestroy(function(){return r.destroy(e)}),this.players.push(s),s},e.prototype.destroy=function(e){var t=this._getPlayer(e);t.destroy(),delete this._playersById[e];var n=this.players.indexOf(t);n>=0&&this.players.splice(n,1)},e.prototype._getPlayer=function(e){var t=this._playersById[e];if(!t)throw new Error("Unable to find the timeline player referenced by "+e);return t},e.prototype.listen=function(e,t,n,r){var i=Qi(t,"","","");return $i(this._getPlayer(e),n,i,r),function(){}},e.prototype.command=function(e,t,n,r){if("register"!=n)if("create"!=n){var i=this._getPlayer(e);switch(n){case"play":i.play();break;case"pause":i.pause();break;case"reset":i.reset();break;case"restart":i.restart();break;case"finish":i.finish();break;case"init":i.init();break;case"setPosition":i.setPosition(parseFloat(r[0]));break;case"destroy":this.destroy(e)}}else this.create(e,t,r[0]||{});else this.register(e,r[0])},e}(),Ym="ng-animate-disabled",Xm=".ng-animate-disabled",Jm=[],eg={namespaceId:"",setForRemoval:null,hasAnimation:!1,removedBeforeQueried:!1},tg={namespaceId:"",setForRemoval:null,hasAnimation:!1,removedBeforeQueried:!0},ng="__ng_removed",rg=function(){function e(e,t){void 0===t&&(t=""),this.namespaceId=t;var n=e&&e.hasOwnProperty("value");if(this.value=function(e){return null!=e?e:null}(n?e.value:e),n){var r=io(e);delete r.value,this.options=r}else this.options={};this.options.params||(this.options.params={})}return Object.defineProperty(e.prototype,"params",{get:function(){return this.options.params},enumerable:!0,configurable:!0}),e.prototype.absorbOptions=function(e){var t=e.params;if(t){var n=this.options.params;Object.keys(t).forEach(function(e){null==n[e]&&(n[e]=t[e])})}},e}(),ig=new rg("void"),og=new rg("DELETED"),lg=function(){function e(e,t,n){this.id=e,this.hostElement=t,this._engine=n,this.players=[],this._triggers={},this._queue=[],this._elementListeners=new Map,this._hostClassName="ng-tns-"+e,Do(t,this._hostClassName)}return e.prototype.listen=function(e,t,n,r){var i=this;if(!this._triggers.hasOwnProperty(t))throw new Error('Unable to listen on the animation trigger event "'+n+'" because the animation trigger "'+t+"\" doesn't exist!");if(null==n||0==n.length)throw new Error('Unable to listen on the animation trigger "'+t+'" because the provided event is undefined!');if("start"!=n&&"done"!=n)throw new Error('The provided animation trigger event "'+n+'" for the animation trigger "'+t+'" is not supported!');var o=Yi(this._elementListeners,e,[]),l={name:t,phase:n,callback:r};o.push(l);var a=Yi(this._engine.statesByElement,e,{});return a.hasOwnProperty(t)||(Do(e,Cm),Do(e,Cm+"-"+t),a[t]=ig),function(){i._engine.afterFlush(function(){var e=o.indexOf(l);e>=0&&o.splice(e,1),i._triggers[t]||delete a[t]})}},e.prototype.register=function(e,t){return!this._triggers[e]&&(this._triggers[e]=t,!0)},e.prototype._getTrigger=function(e){var t=this._triggers[e];if(!t)throw new Error('The provided animation trigger "'+e+'" has not been registered!');return t},e.prototype.trigger=function(e,t,n,r){var i=this;void 0===r&&(r=!0);var o=this._getTrigger(t),l=new sg(this.id,t,e),a=this._engine.statesByElement.get(e);a||(Do(e,Cm),Do(e,Cm+"-"+t),this._engine.statesByElement.set(e,a={}));var s=a[t],u=new rg(n,this.id);if(!(n&&n.hasOwnProperty("value"))&&s&&u.absorbOptions(s.options),a[t]=u,s){if(s===og)return l}else s=ig;if("void"===u.value||s.value!==u.value){var c=Yi(this._engine.playersByElement,e,[]);c.forEach(function(e){e.namespaceId==i.id&&e.triggerName==t&&e.queued&&e.destroy()});var d=o.matchTransition(s.value,u.value),p=!1;if(!d){if(!r)return;d=o.fallbackTransition,p=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:t,transition:d,fromState:s,toState:u,player:l,isFallbackTransition:p}),p||(Do(e,"ng-animate-queued"),l.onStart(function(){Io(e,"ng-animate-queued")})),l.onDone(function(){var t=i.players.indexOf(l);t>=0&&i.players.splice(t,1);var n=i._engine.playersByElement.get(e);if(n){var r=n.indexOf(l);r>=0&&n.splice(r,1)}}),this.players.push(l),c.push(l),l}if(!function(e,t){var n=Object.keys(e),r=Object.keys(t);if(n.length!=r.length)return!1;for(var i=0;i<n.length;i++){var o=n[i];if(!t.hasOwnProperty(o)||e[o]!==t[o])return!1}return!0}(s.params,u.params)){var f=[],h=o.matchStyles(s.value,s.params,f),m=o.matchStyles(u.value,u.params,f);f.length?this._engine.reportError(f):this._engine.afterFlush(function(){ao(e,h),lo(e,m)})}},e.prototype.deregister=function(e){var t=this;delete this._triggers[e],this._engine.statesByElement.forEach(function(t,n){delete t[e]}),this._elementListeners.forEach(function(n,r){t._elementListeners.set(r,n.filter(function(t){return t.name!=e}))})},e.prototype.clearElementCache=function(e){this._engine.statesByElement.delete(e),this._elementListeners.delete(e);var t=this._engine.playersByElement.get(e);t&&(t.forEach(function(e){return e.destroy()}),this._engine.playersByElement.delete(e))},e.prototype._signalRemovalForInnerTriggers=function(e,t,n){var r=this;void 0===n&&(n=!1),this._engine.driver.query(e,Em,!0).forEach(function(e){if(!e[ng]){var n=r._engine.fetchNamespacesByElement(e);n.size?n.forEach(function(n){return n.triggerLeaveAnimation(e,t,!1,!0)}):r.clearElementCache(e)}})},e.prototype.triggerLeaveAnimation=function(e,t,n,r){var i=this,o=this._engine.statesByElement.get(e);if(o){var l=[];if(Object.keys(o).forEach(function(t){if(i._triggers[t]){var n=i.trigger(e,t,"void",r);n&&l.push(n)}}),l.length)return this._engine.markElementAsRemoved(this.id,e,!0,t),n&&Gi(l).onDone(function(){return i._engine.processLeaveNode(e)}),!0}return!1},e.prototype.prepareLeaveAnimationListeners=function(e){var t=this,n=this._elementListeners.get(e);if(n){var r=new Set;n.forEach(function(n){var i=n.name;if(!r.has(i)){r.add(i);var o=t._triggers[i].fallbackTransition,l=t._engine.statesByElement.get(e)[i]||ig,a=new rg("void"),s=new sg(t.id,i,e);t._engine.totalQueuedPlayers++,t._queue.push({element:e,triggerName:i,transition:o,fromState:l,toState:a,player:s,isFallbackTransition:!0})}})}},e.prototype.removeNode=function(e,t){var n=this,r=this._engine;if(e.childElementCount&&this._signalRemovalForInnerTriggers(e,t,!0),!this.triggerLeaveAnimation(e,t,!0)){var i=!1;if(r.totalAnimations){var o=r.players.length?r.playersByQueriedElement.get(e):[];if(o&&o.length)i=!0;else for(var l=e;l=l.parentNode;)if(r.statesByElement.get(l)){i=!0;break}}this.prepareLeaveAnimationListeners(e),i?r.markElementAsRemoved(this.id,e,!1,t):(r.afterFlush(function(){return n.clearElementCache(e)}),r.destroyInnerAnimations(e),r._onRemovalComplete(e,t))}},e.prototype.insertNode=function(e,t){Do(e,this._hostClassName)},e.prototype.drainQueuedTransitions=function(e){var t=this,n=[];return this._queue.forEach(function(r){var i=r.player;if(!i.destroyed){var o=r.element,l=t._elementListeners.get(o);l&&l.forEach(function(t){if(t.name==r.triggerName){var n=Qi(o,r.triggerName,r.fromState.value,r.toState.value);n._data=e,$i(r.player,t.phase,n,t.callback)}}),i.markedForDestroy?t._engine.afterFlush(function(){i.destroy()}):n.push(r)}}),this._queue=[],n.sort(function(e,n){var r=e.transition.ast.depCount,i=n.transition.ast.depCount;return 0==r||0==i?r-i:t._engine.driver.containsElement(e.element,n.element)?1:-1})},e.prototype.destroy=function(e){this.players.forEach(function(e){return e.destroy()}),this._signalRemovalForInnerTriggers(this.hostElement,e)},e.prototype.elementContainsData=function(e){var t=!1;return this._elementListeners.has(e)&&(t=!0),t=!!this._queue.find(function(t){return t.element===e})||t},e}(),ag=function(){function e(e,t){this.driver=e,this._normalizer=t,this.players=[],this.newHostElements=new Map,this.playersByElement=new Map,this.playersByQueriedElement=new Map,this.statesByElement=new Map,this.disabledNodes=new Set,this.totalAnimations=0,this.totalQueuedPlayers=0,this._namespaceLookup={},this._namespaceList=[],this._flushFns=[],this._whenQuietFns=[],this.namespacesByHostElement=new Map,this.collectedEnterElements=[],this.collectedLeaveElements=[],this.onRemovalComplete=function(e,t){}}return e.prototype._onRemovalComplete=function(e,t){this.onRemovalComplete(e,t)},Object.defineProperty(e.prototype,"queuedPlayers",{get:function(){var e=[];return this._namespaceList.forEach(function(t){t.players.forEach(function(t){t.queued&&e.push(t)})}),e},enumerable:!0,configurable:!0}),e.prototype.createNamespace=function(e,t){var n=new lg(e,t,this);return t.parentNode?this._balanceNamespaceList(n,t):(this.newHostElements.set(t,n),this.collectEnterElement(t)),this._namespaceLookup[e]=n},e.prototype._balanceNamespaceList=function(e,t){var n=this._namespaceList.length-1;if(n>=0){for(var r=!1,i=n;i>=0;i--)if(this.driver.containsElement(this._namespaceList[i].hostElement,t)){this._namespaceList.splice(i+1,0,e),r=!0;break}r||this._namespaceList.splice(0,0,e)}else this._namespaceList.push(e);return this.namespacesByHostElement.set(t,e),e},e.prototype.register=function(e,t){var n=this._namespaceLookup[e];return n||(n=this.createNamespace(e,t)),n},e.prototype.registerTrigger=function(e,t,n){var r=this._namespaceLookup[e];r&&r.register(t,n)&&this.totalAnimations++},e.prototype.destroy=function(e,t){var n=this;if(e){var r=this._fetchNamespace(e);this.afterFlush(function(){n.namespacesByHostElement.delete(r.hostElement),delete n._namespaceLookup[e];var t=n._namespaceList.indexOf(r);t>=0&&n._namespaceList.splice(t,1)}),this.afterFlushAnimationsDone(function(){return r.destroy(t)})}},e.prototype._fetchNamespace=function(e){return this._namespaceLookup[e]},e.prototype.fetchNamespacesByElement=function(e){var t=new Set,n=this.statesByElement.get(e);if(n)for(var r=Object.keys(n),i=0;i<r.length;i++){var o=n[r[i]].namespaceId;if(o){var l=this._fetchNamespace(o);l&&t.add(l)}}return t},e.prototype.trigger=function(e,t,n,r){return!!So(t)&&(this._fetchNamespace(e).trigger(t,n,r),!0)},e.prototype.insertNode=function(e,t,n,r){if(So(t)){var i=t[ng];i&&i.setForRemoval&&(i.setForRemoval=!1),e&&this._fetchNamespace(e).insertNode(t,n),r&&this.collectEnterElement(t)}},e.prototype.collectEnterElement=function(e){this.collectedEnterElements.push(e)},e.prototype.markElementAsDisabled=function(e,t){t?this.disabledNodes.has(e)||(this.disabledNodes.add(e),Do(e,Ym)):this.disabledNodes.has(e)&&(this.disabledNodes.delete(e),Io(e,Ym))},e.prototype.removeNode=function(e,t,n){if(So(t)){var r=e?this._fetchNamespace(e):null;r?r.removeNode(t,n):this.markElementAsRemoved(e,t,!1,n)}else this._onRemovalComplete(t,n)},e.prototype.markElementAsRemoved=function(e,t,n,r){this.collectedLeaveElements.push(t),t[ng]={namespaceId:e,setForRemoval:r,hasAnimation:n,removedBeforeQueried:!1}},e.prototype.listen=function(e,t,n,r,i){return So(t)?this._fetchNamespace(e).listen(t,n,r,i):function(){}},e.prototype._buildInstruction=function(e,t,n,r){return e.transition.build(this.driver,e.element,e.fromState.value,e.toState.value,n,r,e.fromState.options,e.toState.options,t)},e.prototype.destroyInnerAnimations=function(e){var t=this,n=this.driver.query(e,Em,!0);n.forEach(function(e){return t.destroyActiveAnimationsForElement(e)}),0!=this.playersByQueriedElement.size&&(n=this.driver.query(e,Sm,!0)).forEach(function(e){return t.finishActiveQueriedAnimationOnElement(e)})},e.prototype.destroyActiveAnimationsForElement=function(e){var t=this.playersByElement.get(e);t&&t.forEach(function(e){e.queued?e.markedForDestroy=!0:e.destroy()});var n=this.statesByElement.get(e);n&&Object.keys(n).forEach(function(e){return n[e]=og})},e.prototype.finishActiveQueriedAnimationOnElement=function(e){var t=this.playersByQueriedElement.get(e);t&&t.forEach(function(e){return e.finish()})},e.prototype.whenRenderingDone=function(){var e=this;return new Promise(function(t){if(e.players.length)return Gi(e.players).onDone(function(){return t()});t()})},e.prototype.processLeaveNode=function(e){var t=this,n=e[ng];if(n&&n.setForRemoval){if(e[ng]=eg,n.namespaceId){this.destroyInnerAnimations(e);var r=this._fetchNamespace(n.namespaceId);r&&r.clearElementCache(e)}this._onRemovalComplete(e,n.setForRemoval)}this.driver.matchesElement(e,Xm)&&this.markElementAsDisabled(e,!1),this.driver.query(e,Xm,!0).forEach(function(n){t.markElementAsDisabled(e,!1)})},e.prototype.flush=function(e){var t=this;void 0===e&&(e=-1);var n=[];if(this.newHostElements.size&&(this.newHostElements.forEach(function(e,n){return t._balanceNamespaceList(e,n)}),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(var r=0;r<this.collectedEnterElements.length;r++)Do(this.collectedEnterElements[r],"ng-star-inserted");if(this._namespaceList.length&&(this.totalQueuedPlayers||this.collectedLeaveElements.length)){var i=[];try{n=this._flushAnimations(i,e)}finally{for(r=0;r<i.length;r++)i[r]()}}else for(r=0;r<this.collectedLeaveElements.length;r++)this.processLeaveNode(this.collectedLeaveElements[r]);if(this.totalQueuedPlayers=0,this.collectedEnterElements.length=0,this.collectedLeaveElements.length=0,this._flushFns.forEach(function(e){return e()}),this._flushFns=[],this._whenQuietFns.length){var o=this._whenQuietFns;this._whenQuietFns=[],n.length?Gi(n).onDone(function(){o.forEach(function(e){return e()})}):o.forEach(function(e){return e()})}},e.prototype.reportError=function(e){throw new Error("Unable to process animations due to the following failed trigger transitions\n "+e.join("\n"))},e.prototype._flushAnimations=function(e,t){var n=this,r=new Nm,i=[],o=new Map,l=[],a=new Map,s=new Map,u=new Map,c=new Set;this.disabledNodes.forEach(function(e){c.add(e);for(var t=n.driver.query(e,".ng-animate-queued",!0),r=0;r<t.length;r++)c.add(t[r])});var d=eo(),p=Array.from(this.statesByElement.keys()),f=ko(p,this.collectedEnterElements),h=new Map,m=0;f.forEach(function(e,t){var n="ng-enter"+m++;h.set(t,n),e.forEach(function(e){return Do(e,n)})});for(var g=[],y=new Set,v=new Set,b=0;b<this.collectedLeaveElements.length;b++)(L=(A=this.collectedLeaveElements[b])[ng])&&L.setForRemoval&&(g.push(A),y.add(A),L.hasAnimation?this.driver.query(A,".ng-star-inserted",!0).forEach(function(e){return y.add(e)}):v.add(A));var _=new Map,w=ko(p,Array.from(y));w.forEach(function(e,t){var n="ng-leave"+m++;_.set(t,n),e.forEach(function(e){return Do(e,n)})}),e.push(function(){f.forEach(function(e,t){var n=h.get(t);e.forEach(function(e){return Io(e,n)})}),w.forEach(function(e,t){var n=_.get(t);e.forEach(function(e){return Io(e,n)})}),g.forEach(function(e){n.processLeaveNode(e)})});for(var x=[],C=[],E=this._namespaceList.length-1;E>=0;E--)this._namespaceList[E].drainQueuedTransitions(t).forEach(function(e){var t=e.player;x.push(t);var o=e.element;if(d&&n.driver.containsElement(d,o)){var c=_.get(o),p=h.get(o),f=n._buildInstruction(e,r,p,c);if(f.errors&&f.errors.length)C.push(f);else{if(e.isFallbackTransition)return t.onStart(function(){return ao(o,f.fromStyles)}),t.onDestroy(function(){return lo(o,f.toStyles)}),void i.push(t);f.timelines.forEach(function(e){return e.stretchStartingKeyframe=!0}),r.append(o,f.timelines),l.push({instruction:f,player:t,element:o}),f.queriedElements.forEach(function(e){return Yi(a,e,[]).push(t)}),f.preStyleProps.forEach(function(e,t){var n=Object.keys(e);if(n.length){var r=s.get(t);r||s.set(t,r=new Set),n.forEach(function(e){return r.add(e)})}}),f.postStyleProps.forEach(function(e,t){var n=Object.keys(e),r=u.get(t);r||u.set(t,r=new Set),n.forEach(function(e){return r.add(e)})})}}else t.destroy()});if(C.length){var S=[];C.forEach(function(e){S.push("@"+e.triggerName+" has failed due to:\n"),e.errors.forEach(function(e){return S.push("- "+e+"\n")})}),x.forEach(function(e){return e.destroy()}),this.reportError(S)}var O=new Map,T=new Map;l.forEach(function(e){var t=e.element;r.has(t)&&(T.set(t,t),n._beforeAnimationBuild(e.player.namespaceId,e.instruction,O))}),i.forEach(function(e){var t=e.element;n._getPreviousPlayers(t,!1,e.namespaceId,e.triggerName,null).forEach(function(e){Yi(O,t,[]).push(e),e.destroy()})});var k=g.filter(function(e){return Mo(e,s,u)}),D=new Map;To(D,this.driver,v,u,Rs.AUTO_STYLE).forEach(function(e){Mo(e,s,u)&&k.push(e)});var I=new Map;f.forEach(function(e,t){To(I,n.driver,new Set(e),s,Rs["\u0275PRE_STYLE"])}),k.forEach(function(e){var t=D.get(e),n=I.get(e);D.set(e,Object(bl.__assign)({},t,n))});var R=[],M=[],P={};l.forEach(function(e){var t=e.element,l=e.player,a=e.instruction;if(r.has(t)){if(c.has(t))return l.onDestroy(function(){return lo(t,a.toStyles)}),void i.push(l);var s=P;if(T.size>1){for(var u=t,d=[];u=u.parentNode;){var p=T.get(u);if(p){s=p;break}d.push(u)}d.forEach(function(e){return T.set(e,s)})}var f=n._buildAnimation(l.namespaceId,a,O,o,I,D);if(l.setRealPlayer(f),s===P)R.push(l);else{var h=n.playersByElement.get(s);h&&h.length&&(l.parentPlayer=Gi(h)),i.push(l)}}else ao(t,a.fromStyles),l.onDestroy(function(){return lo(t,a.toStyles)}),M.push(l),c.has(t)&&i.push(l)}),M.forEach(function(e){var t=o.get(e.element);if(t&&t.length){var n=Gi(t);e.setRealPlayer(n)}}),i.forEach(function(e){e.parentPlayer?e.syncPlayerEvents(e.parentPlayer):e.destroy()});for(var N=0;N<g.length;N++){var A,L=(A=g[N])[ng];if(Io(A,"ng-leave"),!L||!L.hasAnimation){var F=[];if(a.size){var j=a.get(A);j&&j.length&&F.push.apply(F,j);for(var V=this.driver.query(A,Sm,!0),z=0;z<V.length;z++){var B=a.get(V[z]);B&&B.length&&F.push.apply(F,B)}}var H=F.filter(function(e){return!e.destroyed});H.length?function(e,t,n){Gi(H).onDone(function(){return e.processLeaveNode(t)})}(this,A):this.processLeaveNode(A)}}return g.length=0,R.forEach(function(e){n.players.push(e),e.onDone(function(){e.destroy();var t=n.players.indexOf(e);n.players.splice(t,1)}),e.play()}),R},e.prototype.elementContainsData=function(e,t){var n=!1,r=t[ng];return r&&r.setForRemoval&&(n=!0),this.playersByElement.has(t)&&(n=!0),this.playersByQueriedElement.has(t)&&(n=!0),this.statesByElement.has(t)&&(n=!0),this._fetchNamespace(e).elementContainsData(t)||n},e.prototype.afterFlush=function(e){this._flushFns.push(e)},e.prototype.afterFlushAnimationsDone=function(e){this._whenQuietFns.push(e)},e.prototype._getPreviousPlayers=function(e,t,n,r,i){var o=[];if(t){var l=this.playersByQueriedElement.get(e);l&&(o=l)}else{var a=this.playersByElement.get(e);if(a){var s=!i||"void"==i;a.forEach(function(e){e.queued||(s||e.triggerName==r)&&o.push(e)})}}return(n||r)&&(o=o.filter(function(e){return!(n&&n!=e.namespaceId||r&&r!=e.triggerName)})),o},e.prototype._beforeAnimationBuild=function(e,t,n){for(var r=t.element,i=t.isRemovalTransition?void 0:e,o=t.isRemovalTransition?void 0:t.triggerName,l=function(e){var l=e.element,s=l!==r,u=Yi(n,l,[]);a._getPreviousPlayers(l,s,i,o,t.toState).forEach(function(e){var t=e.getRealPlayer();t.beforeDestroy&&t.beforeDestroy(),e.destroy(),u.push(e)})},a=this,s=0,u=t.timelines;s<u.length;s++)l(u[s]);ao(r,t.fromStyles)},e.prototype._buildAnimation=function(e,t,n,r,i,o){var l=this,a=t.triggerName,s=t.element,u=[],c=new Set,d=new Set,p=t.timelines.map(function(t){var p=t.element;c.add(p);var f=p[ng];if(f&&f.removedBeforeQueried)return new Rs.NoopAnimationPlayer;var h=p!==s,m=function(e){var t=[];return Ro((n.get(p)||Jm).map(function(e){return e.getRealPlayer()}),t),t}().filter(function(e){return!!e.element&&e.element===p}),g=i.get(p),y=o.get(p),v=Ki(0,l._normalizer,0,t.keyframes,g,y),b=l._buildPlayer(t,v,m);if(t.subTimeline&&r&&d.add(p),h){var _=new sg(e,a,p);_.setRealPlayer(b),u.push(_)}return b});u.forEach(function(e){Yi(l.playersByQueriedElement,e.element,[]).push(e),e.onDone(function(){return function(e,t,n){var r;if(e instanceof Map){if(r=e.get(t)){if(r.length){var i=r.indexOf(n);r.splice(i,1)}0==r.length&&e.delete(t)}}else(r=e[t])&&(r.length&&(i=r.indexOf(n),r.splice(i,1)),0==r.length&&delete e[t]);return r}(l.playersByQueriedElement,e.element,e)})}),c.forEach(function(e){return Do(e,"ng-animating")});var f=Gi(p);return f.onDestroy(function(){c.forEach(function(e){return Io(e,"ng-animating")}),lo(s,t.toStyles)}),d.forEach(function(e){Yi(r,e,[]).push(f)}),f},e.prototype._buildPlayer=function(e,t,n){return t.length>0?this.driver.animate(e.element,t,e.duration,e.delay,e.easing,n):new Rs.NoopAnimationPlayer},e}(),sg=function(){function e(e,t,n){this.namespaceId=e,this.triggerName=t,this.element=n,this._player=new Rs.NoopAnimationPlayer,this._containsRealPlayer=!1,this._queuedCallbacks={},this.destroyed=!1,this.markedForDestroy=!1}return Object.defineProperty(e.prototype,"queued",{get:function(){return 0==this._containsRealPlayer},enumerable:!0,configurable:!0}),e.prototype.setRealPlayer=function(e){var t=this;this._containsRealPlayer||(this._player=e,Object.keys(this._queuedCallbacks).forEach(function(n){t._queuedCallbacks[n].forEach(function(t){return $i(e,n,void 0,t)})}),this._queuedCallbacks={},this._containsRealPlayer=!0)},e.prototype.getRealPlayer=function(){return this._player},e.prototype.syncPlayerEvents=function(e){var t=this,n=this._player;n.triggerCallback&&e.onStart(function(){return n.triggerCallback("start")}),e.onDone(function(){return t.finish()}),e.onDestroy(function(){return t.destroy()})},e.prototype._queueEvent=function(e,t){Yi(this._queuedCallbacks,e,[]).push(t)},e.prototype.onDone=function(e){this.queued&&this._queueEvent("done",e),this._player.onDone(e)},e.prototype.onStart=function(e){this.queued&&this._queueEvent("start",e),this._player.onStart(e)},e.prototype.onDestroy=function(e){this.queued&&this._queueEvent("destroy",e),this._player.onDestroy(e)},e.prototype.init=function(){this._player.init()},e.prototype.hasStarted=function(){return!this.queued&&this._player.hasStarted()},e.prototype.play=function(){!this.queued&&this._player.play()},e.prototype.pause=function(){!this.queued&&this._player.pause()},e.prototype.restart=function(){!this.queued&&this._player.restart()},e.prototype.finish=function(){this._player.finish()},e.prototype.destroy=function(){this.destroyed=!0,this._player.destroy()},e.prototype.reset=function(){!this.queued&&this._player.reset()},e.prototype.setPosition=function(e){this.queued||this._player.setPosition(e)},e.prototype.getPosition=function(){return this.queued?0:this._player.getPosition()},Object.defineProperty(e.prototype,"totalTime",{get:function(){return this._player.totalTime},enumerable:!0,configurable:!0}),e.prototype.triggerCallback=function(e){var t=this._player;t.triggerCallback&&t.triggerCallback(e)},e}(),ug="$$classes",cg=function(){function e(e,t){var n=this;this._driver=e,this._triggerCache={},this.onRemovalComplete=function(e,t){},this._transitionEngine=new ag(e,t),this._timelineEngine=new Qm(e,t),this._transitionEngine.onRemovalComplete=function(e,t){return n.onRemovalComplete(e,t)}}return e.prototype.registerTrigger=function(e,t,n,r,i){var o=e+"-"+r,l=this._triggerCache[o];if(!l){var a=[],s=go(this._driver,i,a);if(a.length)throw new Error('The animation trigger "'+r+'" has failed to build due to the following errors:\n - '+a.join("\n - "));l=new $m(r,s),this._triggerCache[o]=l}this._transitionEngine.registerTrigger(t,r,l)},e.prototype.register=function(e,t){this._transitionEngine.register(e,t)},e.prototype.destroy=function(e,t){this._transitionEngine.destroy(e,t)},e.prototype.onInsert=function(e,t,n,r){this._transitionEngine.insertNode(e,t,n,r)},e.prototype.onRemove=function(e,t,n){this._transitionEngine.removeNode(e,t,n)},e.prototype.disableAnimations=function(e,t){this._transitionEngine.markElementAsDisabled(e,t)},e.prototype.process=function(e,t,n,r){if("@"==n.charAt(0)){var i=Xi(n);this._timelineEngine.command(i[0],t,i[1],r)}else this._transitionEngine.trigger(e,t,n,r)},e.prototype.listen=function(e,t,n,r,i){if("@"==n.charAt(0)){var o=Xi(n);return this._timelineEngine.listen(o[0],t,o[1],i)}return this._transitionEngine.listen(e,t,n,r,i)},e.prototype.flush=function(e){void 0===e&&(e=-1),this._transitionEngine.flush(e)},Object.defineProperty(e.prototype,"players",{get:function(){return this._transitionEngine.players.concat(this._timelineEngine.players)},enumerable:!0,configurable:!0}),e.prototype.whenRenderingDone=function(){return this._transitionEngine.whenRenderingDone()},e}(),dg=function(){function e(e,t,n,r){void 0===r&&(r=[]);var i=this;this.element=e,this.keyframes=t,this.options=n,this.previousPlayers=r,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this.time=0,this.parentPlayer=null,this.previousStyles={},this.currentSnapshot={},this._duration=n.duration,this._delay=n.delay||0,this.time=this._duration+this._delay,function(e,t){return 0===e||0===t}(this._duration,this._delay)&&r.forEach(function(e){var t=e.currentSnapshot;Object.keys(t).forEach(function(e){return i.previousStyles[e]=t[e]})})}return e.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(e){return e()}),this._onDoneFns=[])},e.prototype.init=function(){this._buildPlayer(),this._preparePlayerBeforeStart()},e.prototype._buildPlayer=function(){var e=this;if(!this._initialized){this._initialized=!0;var t=this.keyframes.map(function(e){return oo(e,!1)}),n=Object.keys(this.previousStyles);if(n.length&&t.length){var r=t[0],i=[];if(n.forEach(function(t){r.hasOwnProperty(t)||i.push(t),r[t]=e.previousStyles[t]}),i.length)for(var o=this,l=function(){var e=t[a];i.forEach(function(t){e[t]=Po(o.element,t)})},a=1;a<t.length;a++)l()}this.domPlayer=this._triggerWebAnimation(this.element,t,this.options),this._finalKeyframe=t.length?t[t.length-1]:{},this.domPlayer.addEventListener("finish",function(){return e._onFinish()})}},e.prototype._preparePlayerBeforeStart=function(){this._delay?this._resetDomPlayerState():this.domPlayer.pause()},e.prototype._triggerWebAnimation=function(e,t,n){return e.animate(t,n)},e.prototype.onStart=function(e){this._onStartFns.push(e)},e.prototype.onDone=function(e){this._onDoneFns.push(e)},e.prototype.onDestroy=function(e){this._onDestroyFns.push(e)},e.prototype.play=function(){this._buildPlayer(),this.hasStarted()||(this._onStartFns.forEach(function(e){return e()}),this._onStartFns=[],this._started=!0),this.domPlayer.play()},e.prototype.pause=function(){this.init(),this.domPlayer.pause()},e.prototype.finish=function(){this.init(),this._onFinish(),this.domPlayer.finish()},e.prototype.reset=function(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1},e.prototype._resetDomPlayerState=function(){this.domPlayer&&this.domPlayer.cancel()},e.prototype.restart=function(){this.reset(),this.play()},e.prototype.hasStarted=function(){return this._started},e.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._onDestroyFns.forEach(function(e){return e()}),this._onDestroyFns=[])},e.prototype.setPosition=function(e){this.domPlayer.currentTime=e*this.time},e.prototype.getPosition=function(){return this.domPlayer.currentTime/this.time},Object.defineProperty(e.prototype,"totalTime",{get:function(){return this._delay+this._duration},enumerable:!0,configurable:!0}),e.prototype.beforeDestroy=function(){var e=this,t={};this.hasStarted()&&Object.keys(this._finalKeyframe).forEach(function(n){"offset"!=n&&(t[n]=e._finished?e._finalKeyframe[n]:Po(e.element,n))}),this.currentSnapshot=t},e.prototype.triggerCallback=function(e){var t="start"==e?this._onStartFns:this._onDoneFns;t.forEach(function(e){return e()}),t.length=0},e}(),pg=function(){function e(){}return e.prototype.validateStyleProperty=function(e){return Ji(e)},e.prototype.matchesElement=function(e,t){return ym(e,t)},e.prototype.containsElement=function(e,t){return vm(e,t)},e.prototype.query=function(e,t,n){return bm(e,t,n)},e.prototype.computeStyle=function(e,t,n){return window.getComputedStyle(e)[t]},e.prototype.animate=function(e,t,n,r,i,o){void 0===o&&(o=[]);var l={duration:n,delay:r,fill:0==r?"both":"forwards"};i&&(l.easing=i);var a=o.filter(function(e){return e instanceof dg});return new dg(e,t,l,a)},e}(),fg=function(e){function t(t,n){var r=e.call(this)||this;return r._nextAnimationId=0,r._renderer=t.createRenderer(n.body,{id:"0",encapsulation:al.ViewEncapsulation.None,styles:[],data:{animation:[]}}),r}return Object(bl.__extends)(t,e),t.prototype.build=function(e){var t=this._nextAnimationId.toString();this._nextAnimationId++;var n=Array.isArray(e)?Object(Rs.sequence)(e):e;return No(this._renderer,null,t,"register",[n]),new hg(t,this._renderer)},t}(Rs.AnimationBuilder),hg=function(e){function t(t,n){var r=e.call(this)||this;return r._id=t,r._renderer=n,r}return Object(bl.__extends)(t,e),t.prototype.create=function(e,t){return new mg(this._id,e,t||{},this._renderer)},t}(Rs.AnimationFactory),mg=function(){function e(e,t,n,r){this.id=e,this.element=t,this._renderer=r,this.parentPlayer=null,this._started=!1,this.totalTime=0,this._command("create",n)}return e.prototype._listen=function(e,t){return this._renderer.listen(this.element,"@@"+this.id+":"+e,t)},e.prototype._command=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return No(this._renderer,this.element,this.id,e,t)},e.prototype.onDone=function(e){this._listen("done",e)},e.prototype.onStart=function(e){this._listen("start",e)},e.prototype.onDestroy=function(e){this._listen("destroy",e)},e.prototype.init=function(){this._command("init")},e.prototype.hasStarted=function(){return this._started},e.prototype.play=function(){this._command("play"),this._started=!0},e.prototype.pause=function(){this._command("pause")},e.prototype.restart=function(){this._command("restart")},e.prototype.finish=function(){this._command("finish")},e.prototype.destroy=function(){this._command("destroy")},e.prototype.reset=function(){this._command("reset")},e.prototype.setPosition=function(e){this._command("setPosition",e)},e.prototype.getPosition=function(){return 0},e}(),gg=function(){function e(e,t,n){this.delegate=e,this.engine=t,this._zone=n,this._currentId=0,this._microtaskId=1,this._animationCallbacksBuffer=[],this._rendererCache=new Map,this._cdRecurDepth=0,t.onRemovalComplete=function(e,t){t&&t.parentNode(e)&&t.removeChild(e.parentNode,e)}}return e.prototype.createRenderer=function(e,t){var n=this,r=this.delegate.createRenderer(e,t);if(!(e&&t&&t.data&&t.data.animation)){var i=this._rendererCache.get(r);return i||(i=new yg("",r,this.engine),this._rendererCache.set(r,i)),i}var o=t.id,l=t.id+"-"+this._currentId;return this._currentId++,this.engine.register(l,e),t.data.animation.forEach(function(t){return n.engine.registerTrigger(o,l,e,t.name,t)}),new vg(this,l,r,this.engine)},e.prototype.begin=function(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()},e.prototype._scheduleCountTask=function(){var e=this;Zone.current.scheduleMicroTask("incremenet the animation microtask",function(){return e._microtaskId++})},e.prototype.scheduleListenerCallback=function(e,t,n){var r=this;e>=0&&e<this._microtaskId?this._zone.run(function(){return t(n)}):(0==this._animationCallbacksBuffer.length&&Promise.resolve(null).then(function(){r._zone.run(function(){r._animationCallbacksBuffer.forEach(function(e){(0,e[0])(e[1])}),r._animationCallbacksBuffer=[]})}),this._animationCallbacksBuffer.push([t,n]))},e.prototype.end=function(){var e=this;this._cdRecurDepth--,0==this._cdRecurDepth&&this._zone.runOutsideAngular(function(){e._scheduleCountTask(),e.engine.flush(e._microtaskId)}),this.delegate.end&&this.delegate.end()},e.prototype.whenRenderingDone=function(){return this.engine.whenRenderingDone()},e}(),yg=function(){function e(e,t,n){this.namespaceId=e,this.delegate=t,this.engine=n,this.destroyNode=this.delegate.destroyNode?function(e){return t.destroyNode(e)}:null}return Object.defineProperty(e.prototype,"data",{get:function(){return this.delegate.data},enumerable:!0,configurable:!0}),e.prototype.destroy=function(){this.engine.destroy(this.namespaceId,this.delegate),this.delegate.destroy()},e.prototype.createElement=function(e,t){return this.delegate.createElement(e,t)},e.prototype.createComment=function(e){return this.delegate.createComment(e)},e.prototype.createText=function(e){return this.delegate.createText(e)},e.prototype.appendChild=function(e,t){this.delegate.appendChild(e,t),this.engine.onInsert(this.namespaceId,t,e,!1)},e.prototype.insertBefore=function(e,t,n){this.delegate.insertBefore(e,t,n),this.engine.onInsert(this.namespaceId,t,e,!0)},e.prototype.removeChild=function(e,t){this.engine.onRemove(this.namespaceId,t,this.delegate)},e.prototype.selectRootElement=function(e){return this.delegate.selectRootElement(e)},e.prototype.parentNode=function(e){return this.delegate.parentNode(e)},e.prototype.nextSibling=function(e){return this.delegate.nextSibling(e)},e.prototype.setAttribute=function(e,t,n,r){this.delegate.setAttribute(e,t,n,r)},e.prototype.removeAttribute=function(e,t,n){this.delegate.removeAttribute(e,t,n)},e.prototype.addClass=function(e,t){this.delegate.addClass(e,t)},e.prototype.removeClass=function(e,t){this.delegate.removeClass(e,t)},e.prototype.setStyle=function(e,t,n,r){this.delegate.setStyle(e,t,n,r)},e.prototype.removeStyle=function(e,t,n){this.delegate.removeStyle(e,t,n)},e.prototype.setProperty=function(e,t,n){"@"==t.charAt(0)&&"@.disabled"==t?this.disableAnimations(e,!!n):this.delegate.setProperty(e,t,n)},e.prototype.setValue=function(e,t){this.delegate.setValue(e,t)},e.prototype.listen=function(e,t,n){return this.delegate.listen(e,t,n)},e.prototype.disableAnimations=function(e,t){this.engine.disableAnimations(e,t)},e}(),vg=function(e){function t(t,n,r,i){var o=e.call(this,n,r,i)||this;return o.factory=t,o.namespaceId=n,o}return Object(bl.__extends)(t,e),t.prototype.setProperty=function(e,t,n){"@"==t.charAt(0)?"."==t.charAt(1)&&"@.disabled"==t?this.disableAnimations(e,n=void 0===n||!!n):this.engine.process(this.namespaceId,e,t.substr(1),n):this.delegate.setProperty(e,t,n)},t.prototype.listen=function(e,t,n){var r=this;if("@"==t.charAt(0)){var i=function(e){switch(e){case"body":return document.body;case"document":return document;case"window":return window;default:return e}}(e),o=t.substr(1),l="";return"@"!=o.charAt(0)&&(o=(a=function(e){var t=e.indexOf(".");return[e.substring(0,t),e.substr(t+1)]}(o))[0],l=a[1]),this.engine.listen(this.namespaceId,i,o,l,function(e){r.factory.scheduleListenerCallback(e._data||-1,n,e)})}return this.delegate.listen(e,t,n);var a},t}(yg),bg=function(e){function t(t,n){return e.call(this,t,n)||this}return Object(bl.__extends)(t,e),t}(cg),_g=function(){},wg="success",xg=new al.InjectionToken("IndexedDBBackend"),Cg=new al.InjectionToken("IDB_SCHEMA"),Eg=function(){function e(e,t){this.changes=new ml.Subject,this._schema=t,this._idb=e}return e.prototype._mapRecord=function(e){return function(t){return e.primaryKey||(t.record.$key=t.$key),t.record}},e.prototype._upgradeDB=function(e,t){for(var n in this._schema.stores)t.objectStoreNames.contains(n)&&t.deleteObjectStore(n),this._createObjectStore(t,n,this._schema.stores[n]);e.next(t),e.complete()},e.prototype._createObjectStore=function(e,t,n){e.createObjectStore(t,{autoIncrement:!0,keyPath:n.primaryKey})},e.prototype.open=function(e,t,n){var r=this;void 0===t&&(t=1);var i=this._idb;return gl.a.create(function(t){var n=i.open(e,r._schema.version),o=function(e){t.next(e.target.result),t.complete()},l=function(e){console.log(e),t.error(e)},a=function(e){r._upgradeDB(t,e.target.result)};return n.addEventListener(wg,o),n.addEventListener("error",l),n.addEventListener("upgradeneeded",a),function(){n.removeEventListener(wg,o),n.removeEventListener("error",l),n.removeEventListener("upgradeneeded",a)}})},e.prototype.deleteDatabase=function(e){var t=this;return new gl.a(function(n){var r=t._idb.deleteDatabase(e),i=function(e){n.next(null),n.complete()},o=function(e){return n.error(e)};return r.addEventListener(wg,i),r.addEventListener("error",o),function(){r.removeEventListener(wg,i),r.removeEventListener("error",o)}})},e.prototype.insert=function(e,t,n){var r=this;void 0===n&&(n=!0);var i=this.executeWrite(e,"put",t);return function(e,t,n){return x(e,t,n)(this)}.call(i,function(e){return n?r.changes.next({type:"DB_INSERT",payload:e}):{}})},e.prototype.get=function(e,t){var n=this,r=this.open(this._schema.name);return jo.call(r,function(r){return new gl.a(function(i){n._mapRecord(n._schema.stores[e]);var o=r.transaction([e],"readonly"),l=o.objectStore(e).get(t),a=function(e){return i.error(e)},s=function(){return i.complete()},u=function(e){return i.next(l.result)};return o.addEventListener("complete",s),o.addEventListener("error",a),l.addEventListener(wg,u),l.addEventListener("error",a),function(){l.removeEventListener(wg,u),l.removeEventListener("error",a),o.removeEventListener("complete",s),o.removeEventListener("error",a)}})})},e.prototype.query=function(e,t){var n=this.open(this._schema.name);return jo.call(n,function(n){return new gl.a(function(r){var i=n.transaction([e],"readonly"),o=i.objectStore(e).openCursor(),l=function(e){return r.error(e)},a=function(e){var n=e.target.result;n?(t?t(n.value)&&r.next(n.value):r.next(n.value),n.continue()):r.complete()};return i.addEventListener("error",l),o.addEventListener(wg,a),o.addEventListener("error",l),function(){o.removeEventListener(wg,a),o.removeEventListener("error",l),i.removeEventListener("error",l)}})})},e.prototype.executeWrite=function(e,t,n){var r=this,i=this.open(this._schema.name);return jo.call(i,function(i){return new gl.a(function(o){var l=r._schema.stores[e],a=r._mapRecord(l),s=i.transaction([e],"readwrite"),u=s.objectStore(e),c=function(e){return o.error(e)},d=function(){return o.complete()};s.addEventListener("complete",d),s.addEventListener("error",c);var p=jo.call(Ds(n),function(e){return new gl.a(function(n){var r;if(l.primaryKey)r=u[t](e);else{var i=e.$key,o=Object.assign({},e);delete o.key,r=u[t](o,i)}r.addEventListener(wg,function(){n.next(a({$key:r.result,record:e}))}),r.addEventListener("error",function(e){n.error(e)})})}).subscribe(o);return function(){p.unsubscribe(),s.removeEventListener("complete",d),s.removeEventListener("error",c)}})})},e.prototype.compare=function(e,t){return this._idb.cmp(e,t)},e}(),Sg=function(){function e(){}return e.provideDB=function(t){return{ngModule:e,providers:[{provide:Cg,useValue:t}]}},e}(),Og=(n("5jKg"),n("PAZ8")),Tg=new al.InjectionToken("mat-autocomplete-scroll-strategy"),kg=function(){},Dg=new al.InjectionToken("mat-menu-default-options"),Ig=new al.InjectionToken("mat-menu-scroll-strategy"),Rg=function(){},Mg=new al.InjectionToken("mat-select-scroll-strategy"),Pg=function(){},Ng=function(){return function(){this.changes=new ml.Subject,this.itemsPerPageLabel="Items per page:",this.nextPageLabel="Next page",this.previousPageLabel="Previous page",this.getRangeLabel=function(e,t,n){if(0==n||0==t)return"0 of "+n;var r=e*t;return r+1+" - "+(r<(n=Math.max(n,0))?Math.min(r+t,n):r+t)+" of "+n}}}(),Ag=function(){},Lg=function(){return function(){this.changes=new ml.Subject,this.sortButtonLabel=function(e){return"Change sorting for "+e},this.sortDescriptionLabel=function(e,t){return"Sorted by "+e+" "+("asc"==t?"ascending":"descending")}}}(),Fg=function(){},jg=function(){},Vg=function(){return function(){this.changes=new ml.Subject,this.optionalLabel="Optional"}}(),zg=function(){},Bg=n("uIf7"),Hg=n("PR+T"),Wg=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new qg(e))},e}(),qg=function(e){function t(){e.apply(this,arguments)}return Object(bl.__extends)(t,e),t.prototype._next=function(e){Object(Hg.a)()},t}(Yl.a),Ug=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new Gg(e))},e}(),Gg=function(e){function t(t){e.call(this,t)}return Object(bl.__extends)(t,e),t.prototype._next=function(e){this.destination.next(Og.a.createNext(e))},t.prototype._error=function(e){var t=this.destination;t.next(Og.a.createError(e)),t.complete()},t.prototype._complete=function(){var e=this.destination;e.next(Og.a.createComplete()),e.complete()},t}(Yl.a),Kg=function(){function e(){this.size=0,this._values=[],this._keys=[]}return e.prototype.get=function(e){var t=this._keys.indexOf(e);return-1===t?void 0:this._values[t]},e.prototype.set=function(e,t){var n=this._keys.indexOf(e);return-1===n?(this._keys.push(e),this._values.push(t),this.size++):this._values[n]=t,this},e.prototype.delete=function(e){var t=this._keys.indexOf(e);return-1!==t&&(this._values.splice(t,1),this._keys.splice(t,1),this.size--,!0)},e.prototype.clear=function(){this._keys.length=0,this._values.length=0,this.size=0},e.prototype.forEach=function(e,t){for(var n=0;n<this.size;n++)e.call(t,this._values[n],this._keys[n])},e}(),$g=_s.a.Map||function(){return Kg}(),Zg=function(){function e(){this.values={}}return e.prototype.delete=function(e){return this.values[e]=null,!0},e.prototype.set=function(e,t){return this.values[e]=t,this},e.prototype.get=function(e){return this.values[e]},e.prototype.forEach=function(e,t){var n=this.values;for(var r in n)n.hasOwnProperty(r)&&null!==n[r]&&e.call(t,n[r],r)},e.prototype.clear=function(){this.values={}},e}(),Qg=function(){function e(e,t,n,r){this.keySelector=e,this.elementSelector=t,this.durationSelector=n,this.subjectSelector=r}return e.prototype.call=function(e,t){return t.subscribe(new Yg(e,this.keySelector,this.elementSelector,this.durationSelector,this.subjectSelector))},e}(),Yg=function(e){function t(t,n,r,i,o){e.call(this,t),this.keySelector=n,this.elementSelector=r,this.durationSelector=i,this.subjectSelector=o,this.groups=null,this.attemptedToUnsubscribe=!1,this.count=0}return Object(bl.__extends)(t,e),t.prototype._next=function(e){var t;try{t=this.keySelector(e)}catch(e){return void this.error(e)}this._group(e,t)},t.prototype._group=function(e,t){var n=this.groups;n||(n=this.groups="string"==typeof t?new Zg:new $g);var r,i=n.get(t);if(this.elementSelector)try{r=this.elementSelector(e)}catch(e){this.error(e)}else r=e;if(!i){i=this.subjectSelector?this.subjectSelector():new ml.Subject,n.set(t,i);var o=new Jg(t,i,this);if(this.destination.next(o),this.durationSelector){var l=void 0;try{l=this.durationSelector(new Jg(t,i))}catch(e){return void this.error(e)}this.add(l.subscribe(new Xg(t,i,this)))}}i.closed||i.next(r)},t.prototype._error=function(e){var t=this.groups;t&&(t.forEach(function(t,n){t.error(e)}),t.clear()),this.destination.error(e)},t.prototype._complete=function(){var e=this.groups;e&&(e.forEach(function(e,t){e.complete()}),e.clear()),this.destination.complete()},t.prototype.removeGroup=function(e){this.groups.delete(e)},t.prototype.unsubscribe=function(){this.closed||(this.attemptedToUnsubscribe=!0,0===this.count&&e.prototype.unsubscribe.call(this))},t}(Yl.a),Xg=function(e){function t(t,n,r){e.call(this,n),this.key=t,this.group=n,this.parent=r}return Object(bl.__extends)(t,e),t.prototype._next=function(e){this.complete()},t.prototype._unsubscribe=function(){var e=this.parent,t=this.key;this.key=this.parent=null,e&&e.removeGroup(t)},t}(Yl.a),Jg=function(e){function t(t,n,r){e.call(this),this.key=t,this.groupSubject=n,this.refCountSubscription=r}return Object(bl.__extends)(t,e),t.prototype._subscribe=function(e){var t=new Cl.a,n=this.refCountSubscription,r=this.groupSubject;return n&&!n.closed&&t.add(new ey(n)),t.add(r.subscribe(e)),t},t}(gl.a),ey=function(e){function t(t){e.call(this),this.parent=t,t.count++}return Object(bl.__extends)(t,e),t.prototype.unsubscribe=function(){var t=this.parent;t.closed||this.closed||(e.prototype.unsubscribe.call(this),t.count-=1,0===t.count&&t.attemptedToUnsubscribe&&t.unsubscribe())},t}(Cl.a),ty=function(){function e(e,t){this.project=e,this.resultSelector=t}return e.prototype.call=function(e,t){return t.subscribe(new ny(e,this.project,this.resultSelector))},e}(),ny=function(e){function t(t,n,r){e.call(this,t),this.project=n,this.resultSelector=r,this.hasSubscription=!1,this.hasCompleted=!1,this.index=0}return Object(bl.__extends)(t,e),t.prototype._next=function(e){this.hasSubscription||this.tryNext(e)},t.prototype.tryNext=function(e){var t=this.index++,n=this.destination;try{var r=this.project(e,t);this.hasSubscription=!0,this.add(Object(Dl.a)(this,r,e,t))}catch(e){n.error(e)}},t.prototype._complete=function(){this.hasCompleted=!0,this.hasSubscription||this.destination.complete()},t.prototype.notifyNext=function(e,t,n,r,i){var o=this.destination;this.resultSelector?this.trySelectResult(e,t,n,r):o.next(t)},t.prototype.trySelectResult=function(e,t,n,r){var i=this.resultSelector,o=this.destination;try{var l=i(e,t,n,r);o.next(l)}catch(e){o.error(e)}},t.prototype.notifyError=function(e){this.destination.error(e)},t.prototype.notifyComplete=function(e){this.remove(e),this.hasSubscription=!1,this.hasCompleted&&this.destination.complete()},t}(kl.a),ry=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new iy(e))},e}(),iy=function(e){function t(t){e.call(this,t)}return Object(bl.__extends)(t,e),t.prototype._next=function(e){e.observe(this.destination)},t}(Yl.a),oy=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),ly="__@ngrx/effects__",ay=Object(Yp.x)(function(e){return e.constructor[ly]||[]},Go),sy="ngrxOnRunEffects",uy=function(e){function t(t){var n=e.call(this)||this;return t&&(n.source=t),n}return oy(t,e),t.prototype.lift=function(e){var n=new t;return n.source=this,n.operator=e,n},t.prototype.ofType=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return ru.a.call(this,function(t){return e.some(function(e){return e===t.type})})},t}(gl.a),cy=(new al.InjectionToken("ngrx/effects: Immediate Effects"),new al.InjectionToken("ngrx/effects: Root Effects")),dy=(new al.InjectionToken("ngrx/effects: Feature Effects"),new al.InjectionToken("Browser Console")),py=function(){function e(e){this.console=e}return e.prototype.report=function(e,t){this.console.group(e);for(var n in t)this.console.error(n+":",t[n]);this.console.groupEnd()},e}(),fy=function(e){function t(t){var n=e.call(this)||this;return n.errorReporter=t,n}return oy(t,e),t.prototype.addEffects=function(e){this.next(e)},t.prototype.toActions=function(){var e=this;return jo.call(function(e,t,n,r){return function(e,t,n,r){return function(i){return i.lift(new Qg(e,t,n,r))}}(e,t,n,r)(this)}.call(this,Go),function(t){return function(){return function(e){return e.lift(new ry)}(this)}.call(ru.a.call(iu.a.call(function(e,t){return function(e,t){return function(n){return n.lift(new ty(e,t))}}(e,t)(this)}.call(t,Ko),function(t){return function(e,t){!function(e,t){if("E"===e.notification.kind){var n="Effect "+$o(e)+" threw an error";t.report(n,{Source:e.sourceInstance,Effect:e.effect,Error:e.notification.error,Notification:e.notification})}}(e,t),function(e,t){if("N"===e.notification.kind){var n=e.notification.value;if(!n||!n.type||"string"!=typeof n.type){var r="Effect "+$o(e)+" dispatched an invalid action";t.report(r,{Source:e.sourceInstance,Effect:e.effect,Dispatched:n,Notification:e.notification})}}}(e,t)}(t,e.errorReporter),t.notification}),function(e){return"N"===e.kind}))})},t}(ml.Subject),hy=function(){function e(e,t){this.effectSources=e,this.store=t,this.effectsSubscription=null}return e.prototype.start=function(){this.effectsSubscription||(this.effectsSubscription=this.effectSources.toActions().subscribe(this.store))},e.prototype.ngOnDestroy=function(){this.effectsSubscription&&(this.effectsSubscription.unsubscribe(),this.effectsSubscription=null)},e}(),my="@ngrx/effects/init",gy=function(){function e(e,t,n,r,i){this.sources=e,t.start(),r.forEach(function(t){return e.addEffects(t)}),n.dispatch({type:my})}return e.prototype.addEffects=function(e){this.sources.addEffects(e)},e}(),yy={loaded:!1,loading:!1,dataverses:[],createDataverse:[],createDataverseName:"",createDataverseError:[],createDataverseSuccess:!1,createDataverseFailed:!1,dropDataverse:[],dropDataverseName:"",dropDataverseError:[],dropDataverseSuccess:!1,dropDataverseFailed:!1},vy={loaded:!1,loading:!1,datasets:[],createDataset:[],createDatasetError:[],createDatasetSuccess:!1,createDatasetFailed:!1,dropDataset:[],dropDatasetError:[],dropDatasetSuccess:!1,dropDatasetFailed:!1,guideSelectsDataset:""},by={loaded:!1,loading:!1,datatypes:[],createDatatype:[],createDatatypeError:[],createDatatypeSuccess:!1,createDatatypeFailed:!1,dropDatatype:[],dropDatatypeError:[],dropDatatypeSuccess:!1,dropDatatypeFailed:!1},_y={loaded:!1,loading:!1,indexes:[],createIndex:[],createIndexError:[],createIndexSuccess:!1,createIndexFailed:!1,dropIndex:[],dropIndexError:[],dropIndexSuccess:!1,dropIndexFailed:!1},wy={loading:!1,loaded:!1,success:!1,sqlQueryString:"",sqlQueryResult:[],sqlQueryError:[]},xy={loading:!1,loaded:!1,success:!1,sqlQueryMetadataString:"",sqlQueryMetadataResult:[],sqlQueryMetadataError:[]},Cy={tree:[],loading:!1,loaded:!1};gl.a.from=Ds;var Ey=function(){function e(e,t){var n=this;this.store=e,this.ref=t,this.dv=[],this.ds=[],this.dt=[],this.idx=[],this.store.select(function(e){return e.dataverse.dataverses}).subscribe(function(e){if(e.results){n.dv=[];for(var t=0;t<e.results.length;t++){var r={id:0,DataverseName:"",Datasets:[]};r.id=t,r.DataverseName=e.results[t].DataverseName,n.dv.push(r)}n.updateMetadataTree()}}),this.store.select(function(e){return e.dataset.datasets}).subscribe(function(e){e.results&&(n.ds=e.results,n.updateMetadataTree())}),this.store.select(function(e){return e.datatype.datatypes}).subscribe(function(e){e.results&&(n.dt=e.results,n.updateMetadataTree())}),this.store.select(function(e){return e.index.indexes}).subscribe(function(e){e.results&&(n.idx=e.results,n.updateMetadataTree())})}return e.prototype.getMetadataTree=function(){return gl.a.from(this.dv)},e.prototype.updateMetadataTree=function(){for(var e=0;e<this.dv.length;e++){this.dv[e].Datasets=[];for(var t=0;t<this.ds.length;t++)if(this.ds[t].DataverseName===this.dv[e].DataverseName){this.ds[t].Datatype=[];for(var n=0;n<this.dt.length;n++)this.dt[n].DatatypeName===this.ds[t].DatatypeName&&(this.ds[t].Datatype=this.dt[n]);this.ds[t].Indexes=[];for(var r=0;r<this.idx.length;r++)this.idx[r].DatasetName===this.ds[t].DatasetName&&this.ds[t].Indexes.push(this.idx[r]);this.dv[e].Datasets.push(this.ds[t])}}this.store.dispatch(new Jh)},e}(),Sy=n("GpNi");gl.a.prototype.switchMap=Sy.a,gl.a.prototype.catch=il,gl.a.prototype._catch=il;var Oy=function(){function e(e,t){var n=this;this.actions=e,this.metadataService=t,this.calculateDBTree$=this.actions.ofType(Yh).switchMap(function(){return n.metadataService.getMetadataTree().map(function(e){return new em(e)})})}return Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"calculateDBTree$",void 0),e}(),Ty=function(){function e(e){this.http=e}return e.prototype.selectDataverses=function(){return this.executeSQLQuery("SELECT VALUE dv FROM Metadata.`Dataverse` dv")},e.prototype.selectDatasets=function(){return this.executeSQLQuery("SELECT VALUE ds FROM Metadata.`Dataset` ds")},e.prototype.selectDatatypes=function(){return this.executeSQLQuery("SELECT VALUE dt FROM Metadata.`Datatype` dt")},e.prototype.selectIndexes=function(){return this.executeSQLQuery("SELECT VALUE ix FROM Metadata.`Index` ix")},e.prototype.createDataverse=function(e){return this.executeDDLSQLQuery("CREATE DATAVERSE "+e+";")},e.prototype.dropDataverse=function(e){return this.executeDDLSQLQuery("DROP DATAVERSE "+e)},e.prototype.createDataset=function(e){return this.executeDDLSQLQuery("CREATE DATASET "+e+";")},e.prototype.dropDataset=function(e){return this.executeDDLSQLQuery("DROP DATASET "+e)},e.prototype.createDatatype=function(e){return this.executeDDLSQLQuery("CREATE DATATYPE "+e+";")},e.prototype.dropDatatype=function(e){return this.executeDDLSQLQuery("DROP TYPE "+e)},e.prototype.createIndex=function(e){return this.executeDDLSQLQuery("CREATE INDEX "+e+";")},e.prototype.dropIndex=function(e){return this.executeDDLSQLQuery("DROP INDEX "+e)},e.prototype.executeDDLSQLQuery=function(e){var t=this;return this.http.post("http://localhost:19002/query/service",{statement:e}).map(function(e){return e}).catch(function(e){return t.handleExecuteQueryError(e)})},e.prototype.executeSQLQuery=function(e){var t=this;return this.http.post("http://localhost:19002/query/service",{statement:e}).map(function(e){return e}).catch(function(e){return t.handleExecuteQueryError(e)})},e.prototype.handleExecuteQueryError=function(e){return console.log(e),Promise.reject(e.error||e)},e}(),ky=function(){function e(e,t){var n=this;this.actions=e,this.sqlService=t,this.selectDataverses$=this.actions.ofType(Ad).switchMap(function(e){return n.sqlService.selectDataverses().map(function(e){return new qd(e)}).catch(function(e){return vl(new Ud(e))})}),this.createDataverses$=this.actions.ofType(Fd).switchMap(function(e){return n.sqlService.createDataverse(e.payload).map(function(e){return new Kd(e)}).catch(function(e){return vl(new $d(e))})}),this.dropDataverses$=this.actions.ofType(zd).switchMap(function(e){return n.sqlService.dropDataverse(e.payload).map(function(e){return new Qd(e)}).catch(function(e){return vl(new Yd(e))})})}return Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"selectDataverses$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"createDataverses$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"dropDataverses$",void 0),e}(),Dy=function(){function e(e,t){var n=this;this.actions=e,this.sqlService=t,this.selectDatasets$=this.actions.ofType(Xd).switchMap(function(e){return n.sqlService.selectDatasets().map(function(e){return new up(e)}).catch(function(e){return vl(new cp(e))})}),this.createDatasets$=this.actions.ofType(ep).switchMap(function(e){return n.sqlService.createDataset(e.payload).map(function(e){return new pp(e)}).catch(function(e){return vl(new fp(e))})}),this.dropDatasets$=this.actions.ofType(rp).switchMap(function(e){return console.log(e.payload),n.sqlService.dropDataset(e.payload).map(function(e){return new mp(e)}).catch(function(e){return vl(new gp(e))})})}return Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"selectDatasets$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"createDatasets$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"dropDatasets$",void 0),e}(),Iy=function(){function e(e,t){var n=this;this.actions=e,this.sqlService=t,this.selectDatatypes$=this.actions.ofType(yp).switchMap(function(e){return n.sqlService.selectDatatypes().map(function(e){return new Op(e)}).catch(function(e){return vl(new Tp(e))})}),this.createDatatypes$=this.actions.ofType(bp).switchMap(function(e){return n.sqlService.createDatatype(e.payload).map(function(e){return new Dp(e)}).catch(function(e){return vl(new Ip(e))})}),this.dropDatatypes$=this.actions.ofType(xp).switchMap(function(e){return n.sqlService.dropDatatype(e.payload).map(function(e){return new Mp(e)}).catch(function(e){return vl(new Pp(e))})})}return Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"selectDatatypes$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"createDatatypes$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"dropDatatypes$",void 0),e}(),Ry=function(){function e(e,t){var n=this;this.actions=e,this.sqlService=t,this.selectIndexes$=this.actions.ofType(Np).switchMap(function(e){return n.sqlService.selectIndexes().map(function(e){return new Hp(e)}).catch(function(e){return vl(new Wp(e))})}),this.createIndexes$=this.actions.ofType(Lp).switchMap(function(e){return n.sqlService.createIndex(e.payload).map(function(e){return new Up(e)}).catch(function(e){return vl(new Gp(e))})}),this.dropIndexes$=this.actions.ofType(jp).switchMap(function(e){return n.sqlService.dropIndex(e.payload).map(function(e){return new $p(e)}).catch(function(e){return vl(new Zp(e))})})}return Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"selectIndexes$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"createIndexes$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"dropIndexes$",void 0),e}(),My=function(){function e(e,t){var n=this;this.actions=e,this.sqlService=t,this.executeQuery$=this.actions.ofType(Cd).switchMap(function(e){return n.sqlService.executeSQLQuery(e.payload).map(function(e){return new Id(e)}).catch(function(e){return vl(new Rd(e))})}),this.executeMetadataQuery$=this.actions.ofType(Od).switchMap(function(e){return n.sqlService.executeSQLQuery(e.payload).map(function(e){return new Pd(e)}).catch(function(e){return vl(new Nd(e))})})}return Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"executeQuery$",void 0),Object(bl.__decorate)([Uo(),Object(bl.__metadata)("design:type",gl.a)],e.prototype,"executeMetadataQuery$",void 0),e}(),Py=function(){},Ny=function(){},Ay=function(){},Ly=function(){},Fy=function(){},jy=function(){},Vy=function(){},zy=function(){},By=function(){},Hy=new al.InjectionToken("MAT_DRAWER_DEFAULT_AUTOSIZE"),Wy=function(){},qy=function(){},Uy=function(){},Gy=function(){},Ky=al["\u0275cmf"](sl,[ul],function(e){return al["\u0275mod"]([al["\u0275mpd"](512,al.ComponentFactoryResolver,al["\u0275CodegenComponentFactoryResolver"],[[8,[Us,sc,gc,Pc,Ac,uf,df,bf,wf,Df,Rf,Vf,Bf,um]],[3,al.ComponentFactoryResolver],al.NgModuleRef]),al["\u0275mpd"](5120,al.LOCALE_ID,al["\u0275m"],[[3,al.LOCALE_ID]]),al["\u0275mpd"](4608,cl.NgLocalization,cl.NgLocaleLocalization,[al.LOCALE_ID,[2,cl["\u0275a"]]]),al["\u0275mpd"](4608,Fu["\u0275i"],Fu["\u0275i"],[]),al["\u0275mpd"](4608,al.Compiler,al.Compiler,[]),al["\u0275mpd"](5120,al.APP_ID,al["\u0275f"],[]),al["\u0275mpd"](5120,al.IterableDiffers,al["\u0275k"],[]),al["\u0275mpd"](5120,al.KeyValueDiffers,al["\u0275l"],[]),al["\u0275mpd"](4608,Va.c,Va.r,[cl.DOCUMENT]),al["\u0275mpd"](6144,al.Sanitizer,null,[Va.c]),al["\u0275mpd"](4608,Va.f,ns,[[2,ts],[2,Ba]]),al["\u0275mpd"](5120,Va.d,function(e,t,n,r,i){return[new Va.k(e,t),new Va.o(n),new Va.n(r,i)]},[cl.DOCUMENT,al.NgZone,cl.DOCUMENT,cl.DOCUMENT,Va.f]),al["\u0275mpd"](4608,Va.e,Va.e,[Va.d,al.NgZone]),al["\u0275mpd"](135680,Va.m,Va.m,[cl.DOCUMENT]),al["\u0275mpd"](4608,Va.l,Va.l,[Va.e,Va.m]),al["\u0275mpd"](5120,wm,Ao,[]),al["\u0275mpd"](5120,Hm,Lo,[]),al["\u0275mpd"](4608,cg,bg,[wm,Hm]),al["\u0275mpd"](5120,al.RendererFactory2,Fo,[Va.l,cg,al.NgZone]),al["\u0275mpd"](6144,Va.p,null,[Va.m]),al["\u0275mpd"](4608,al.Testability,al.Testability,[al.NgZone]),al["\u0275mpd"](4608,Va.h,Va.h,[cl.DOCUMENT]),al["\u0275mpd"](4608,Va.i,Va.i,[cl.DOCUMENT]),al["\u0275mpd"](4608,Rs.AnimationBuilder,fg,[al.RendererFactory2,Va.b]),al["\u0275mpd"](5120,xg,Vo,[]),al["\u0275mpd"](4608,Eg,Eg,[xg,Cg]),al["\u0275mpd"](6144,zl,null,[cl.DOCUMENT]),al["\u0275mpd"](4608,Bl,Bl,[[2,zl]]),al["\u0275mpd"](4608,pl,pl,[]),al["\u0275mpd"](5120,Fl,l,[[3,Fl],al.NgZone,pl]),al["\u0275mpd"](5120,jl,a,[[3,jl],pl,al.NgZone]),al["\u0275mpd"](4608,aa,aa,[Fl,jl,al.NgZone]),al["\u0275mpd"](5120,fa,v,[[3,fa],cl.DOCUMENT]),al["\u0275mpd"](4608,da,da,[jl,cl.DOCUMENT]),al["\u0275mpd"](5120,pa,y,[[3,pa],cl.DOCUMENT]),al["\u0275mpd"](4608,ga,ga,[aa,fa,al.ComponentFactoryResolver,da,pa,al.ApplicationRef,al.Injector,al.NgZone,cl.DOCUMENT]),al["\u0275mpd"](5120,ya,b,[ga]),al["\u0275mpd"](5120,Tg,zo,[ga]),al["\u0275mpd"](4608,Ea,Ea,[pl]),al["\u0275mpd"](4608,Oa,Oa,[Ea,al.NgZone,cl.DOCUMENT]),al["\u0275mpd"](136192,Pa,O,[[3,Pa],cl.DOCUMENT]),al["\u0275mpd"](5120,Aa,T,[[3,Aa],[2,Na],cl.DOCUMENT]),al["\u0275mpd"](5120,La,k,[[3,La],al.NgZone,pl]),al["\u0275mpd"](5120,Vc,xe,[[3,Vc]]),al["\u0275mpd"](4608,qf,qf,[]),al["\u0275mpd"](4608,es,es,[]),al["\u0275mpd"](5120,Ls,A,[ga]),al["\u0275mpd"](4608,Fs,Fs,[ga,al.Injector,[2,cl.Location],Ls,[3,Fs]]),al["\u0275mpd"](5120,Nu,K,[[3,Nu],[2,gu],Va.c]),al["\u0275mpd"](4608,Ku,Ku,[]),al["\u0275mpd"](5120,Ju,X,[ga]),al["\u0275mpd"](5120,Ig,Bo,[ga]),al["\u0275mpd"](5120,Mg,Ho,[ga]),al["\u0275mpd"](5120,pc,he,[ga]),al["\u0275mpd"](5120,Ng,Wo,[[3,Ng]]),al["\u0275mpd"](4608,xc,xc,[pl]),al["\u0275mpd"](135680,Cc,Cc,[xc,al.NgZone]),al["\u0275mpd"](4608,Ic,Ic,[ga,Aa,al.Injector,Cc,[3,Ic]]),al["\u0275mpd"](5120,Lg,qo,[[3,Lg]]),al["\u0275mpd"](4608,Vg,Vg,[]),al["\u0275mpd"](6144,Ha,null,[al.LOCALE_ID]),al["\u0275mpd"](4608,Wa,Qa,[[2,Ha]]),al["\u0275mpd"](135680,Yp.k,Yp.k,[Yp.a,Yp.i,Yp.j,Yp.d]),al["\u0275mpd"](5120,Bg.c,Bg.d,[Bg.k,Bg.i]),al["\u0275mpd"](4608,am,am,[Yp.m]),al["\u0275mpd"](512,cl.CommonModule,cl.CommonModule,[]),al["\u0275mpd"](512,ah.SharedModule,ah.SharedModule,[]),al["\u0275mpd"](512,lh.TreeModule,lh.TreeModule,[]),al["\u0275mpd"](512,Oh.DropdownModule,Oh.DropdownModule,[]),al["\u0275mpd"](512,Fu["\u0275ba"],Fu["\u0275ba"],[]),al["\u0275mpd"](512,Fu.FormsModule,Fu.FormsModule,[]),al["\u0275mpd"](512,Th.PaginatorModule,Th.PaginatorModule,[]),al["\u0275mpd"](512,Sh.DataTableModule,Sh.DataTableModule,[]),al["\u0275mpd"](1024,al.ErrorHandler,Va.q,[]),al["\u0275mpd"](1024,al.APP_INITIALIZER,function(e){return[Va.t(e)]},[[2,al.NgProbeToken]]),al["\u0275mpd"](512,al.ApplicationInitStatus,al.ApplicationInitStatus,[[2,al.APP_INITIALIZER]]),al["\u0275mpd"](131584,al.ApplicationRef,al.ApplicationRef,[al.NgZone,al["\u0275Console"],al.Injector,al.ErrorHandler,al.ComponentFactoryResolver,al.ApplicationInitStatus]),al["\u0275mpd"](512,al.ApplicationModule,al.ApplicationModule,[al.ApplicationRef]),al["\u0275mpd"](512,Va.a,Va.a,[[3,Va.a]]),al["\u0275mpd"](512,_g,_g,[]),al["\u0275mpd"](512,Sg,Sg,[]),al["\u0275mpd"](1024,dy,Qo,[]),al["\u0275mpd"](512,py,py,[dy]),al["\u0275mpd"](512,fy,fy,[py]),al["\u0275mpd"](131584,Bg.h,Bg.h,[]),al["\u0275mpd"](131584,Yp.a,Yp.a,[]),al["\u0275mpd"](2048,Yp.h,null,[Bg.h]),al["\u0275mpd"](256,Yp.r,void 0,[]),al["\u0275mpd"](1024,Yp.d,Yp.v,[Yp.r]),al["\u0275mpd"](256,Yp.q,{dataverse:Yo,dataset:Xo,datatype:Jo,index:el,sqlQuery:tl,sqlMetadataQuery:nl,metadata:rl},[]),al["\u0275mpd"](2048,Yp.t,null,[Yp.q]),al["\u0275mpd"](1024,Yp.c,Yp.u,[al.Injector,Yp.q,Yp.t]),al["\u0275mpd"](256,Yp.s,Yp.w,[]),al["\u0275mpd"](256,Yp.e,[],[]),al["\u0275mpd"](1024,Yp.f,Yp.y,[Yp.s,Yp.e]),al["\u0275mpd"](131584,Yp.g,Yp.g,[Yp.h,Yp.d,Yp.c,Yp.f]),al["\u0275mpd"](2048,Yp.i,null,[Yp.g]),al["\u0275mpd"](1024,Bg.k,Bg.e,[]),al["\u0275mpd"](512,Bg.l,Bg.l,[Bg.k]),al["\u0275mpd"](131584,Yp.j,Yp.j,[]),al["\u0275mpd"](256,Bg.j,{maxAge:10},[]),al["\u0275mpd"](1024,Bg.i,Bg.g,[Bg.j]),al["\u0275mpd"](512,Bg.a,Bg.a,[Bg.h,Yp.a,Yp.i,Bg.l,Yp.j,Yp.d,Bg.i]),al["\u0275mpd"](1024,Yp.l,Bg.f,[Bg.a]),al["\u0275mpd"](512,Yp.m,Yp.m,[Yp.l,Yp.a,Yp.g]),al["\u0275mpd"](131584,hy,hy,[fy,Yp.m]),al["\u0275mpd"](512,uy,uy,[Yp.j]),al["\u0275mpd"](512,Ey,Ey,[Yp.m,al.ApplicationRef]),al["\u0275mpd"](512,Oy,Oy,[uy,Ey]),al["\u0275mpd"](512,xu,xu,[]),al["\u0275mpd"](2048,wu,null,[xu]),al["\u0275mpd"](512,Cu,Cu,[wu]),al["\u0275mpd"](2048,lu,null,[Cu]),al["\u0275mpd"](256,Eu,"XSRF-TOKEN",[]),al["\u0275mpd"](512,Ou,Tu,[cl.DOCUMENT,al.PLATFORM_ID,Eu]),al["\u0275mpd"](256,Su,"X-XSRF-TOKEN",[]),al["\u0275mpd"](512,ku,ku,[Ou,Su]),al["\u0275mpd"](1024,vu,function(e){return[e]},[ku]),al["\u0275mpd"](1024,ou,q,[lu,[2,vu]]),al["\u0275mpd"](512,gu,gu,[ou]),al["\u0275mpd"](512,Ty,Ty,[gu]),al["\u0275mpd"](512,ky,ky,[uy,Ty]),al["\u0275mpd"](512,Dy,Dy,[uy,Ty]),al["\u0275mpd"](512,Iy,Iy,[uy,Ty]),al["\u0275mpd"](512,Ry,Ry,[uy,Ty]),al["\u0275mpd"](512,My,My,[uy,Ty]),al["\u0275mpd"](1024,cy,Zo,[Oy,ky,Dy,Iy,Ry,My]),al["\u0275mpd"](512,gy,gy,[fy,hy,Yp.m,cy,[2,Yp.n]]),al["\u0275mpd"](512,Du,Du,[]),al["\u0275mpd"](512,Iu,Iu,[]),al["\u0275mpd"](512,Hl,Hl,[]),al["\u0275mpd"](256,za,!0,[]),al["\u0275mpd"](512,Ba,Ba,[[2,za]]),al["\u0275mpd"](512,hl,hl,[]),al["\u0275mpd"](512,us,us,[]),al["\u0275mpd"](512,cs,cs,[]),al["\u0275mpd"](512,ds,ds,[]),al["\u0275mpd"](512,Zl,Zl,[]),al["\u0275mpd"](512,Vl,Vl,[]),al["\u0275mpd"](512,va,va,[]),al["\u0275mpd"](512,kg,kg,[]),al["\u0275mpd"](512,ja,ja,[]),al["\u0275mpd"](512,Qs,Qs,[]),al["\u0275mpd"](512,Gh,Gh,[]),al["\u0275mpd"](512,md,md,[]),al["\u0275mpd"](512,Gf,Gf,[]),al["\u0275mpd"](512,Py,Py,[]),al["\u0275mpd"](512,Ny,Ny,[]),al["\u0275mpd"](512,Yc,Yc,[]),al["\u0275mpd"](512,sd,sd,[]),al["\u0275mpd"](512,Ws,Ws,[]),al["\u0275mpd"](512,Lu,Lu,[]),al["\u0275mpd"](512,tc,tc,[]),al["\u0275mpd"](512,Ay,Ay,[]),al["\u0275mpd"](512,Ly,Ly,[]),al["\u0275mpd"](512,Bu,Bu,[]),al["\u0275mpd"](512,rs,rs,[]),al["\u0275mpd"](512,Fy,Fy,[]),al["\u0275mpd"](512,Gu,Gu,[]),al["\u0275mpd"](512,jy,jy,[]),al["\u0275mpd"](512,Rg,Rg,[]),al["\u0275mpd"](512,Pg,Pg,[]),al["\u0275mpd"](512,hc,hc,[]),al["\u0275mpd"](512,Ag,Ag,[]),al["\u0275mpd"](512,Vy,Vy,[]),al["\u0275mpd"](512,zy,zy,[]),al["\u0275mpd"](512,By,By,[]),al["\u0275mpd"](512,Wy,Wy,[]),al["\u0275mpd"](512,qy,qy,[]),al["\u0275mpd"](512,Uy,Uy,[]),al["\u0275mpd"](512,Ec,Ec,[]),al["\u0275mpd"](512,Rc,Rc,[]),al["\u0275mpd"](512,Fg,Fg,[]),al["\u0275mpd"](512,jg,jg,[]),al["\u0275mpd"](512,zg,zg,[]),al["\u0275mpd"](512,th,th,[]),al["\u0275mpd"](512,vd,vd,[]),al["\u0275mpd"](512,Xa,Xa,[]),al["\u0275mpd"](512,Ja,Ja,[]),al["\u0275mpd"](512,Gy,Gy,[]),al["\u0275mpd"](512,Yp.o,Yp.o,[Yp.a,Yp.i,Yp.j]),al["\u0275mpd"](512,Bg.b,Bg.b,[]),al["\u0275mpd"](512,sl,sl,[]),al["\u0275mpd"](256,Cg,{version:1,name:"asterixDB_app",stores:{}},[]),al["\u0275mpd"](256,Dg,{overlapTrigger:!0,xPosition:"after",yPosition:"below"},[]),al["\u0275mpd"](256,Hy,!1,[]),al["\u0275mpd"](256,qa,Ya,[])])});Object(al.enableProdMode)(),Va.j().bootstrapModuleFactory(Ky).catch(function(e){return console.log(e)})},"cpZ/":function(e,t,n){"use strict";var r=n("ptrv"),i=n("CDXM"),o=n("lfBE"),l=n("pBmS"),a=n("xI8H"),s=n("p/bR"),u=n("Lcie"),c=n("JXkd"),d=n("umMR"),p=n("UlVq"),f=n("P6IN"),h=n("Ula3");e.exports=function(e,t,n,m,g,y){var v=r[e],b=v,_=g?"set":"add",w=b&&b.prototype,x={},C=function(e){var t=w[e];o(w,e,"delete"==e?function(e){return!(y&&!c(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(y&&!c(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return y&&!c(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof b&&(y||w.forEach&&!d(function(){(new b).entries().next()}))){var E=new b,S=E[_](y?{}:-0,1)!=E,O=d(function(){E.has(1)}),T=p(function(e){new b(e)}),k=!y&&d(function(){for(var e=new b,t=5;t--;)e[_](t,t);return!e.has(-0)});T||((b=t(function(t,n){u(t,b,e);var r=h(new v,t,b);return void 0!=n&&s(n,g,r[_],r),r})).prototype=w,w.constructor=b),(O||k)&&(C("delete"),C("has"),g&&C("get")),(k||S)&&C(_),y&&w.clear&&delete w.clear}else b=m.getConstructor(t,e,g,_),l(b.prototype,n),a.NEED=!0;return f(b,e),x[e]=b,i(i.G+i.W+i.F*(b!=v),x),y||m.setStrong(b,e,g),b}},"dXJ/":function(e,t,n){var r=n("VceJ"),i=n("3r0D")("toStringTag"),o="Arguments"==r(function(){return arguments}());e.exports=function(e){var t,n,l;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),i))?n:o?r(t):"Object"==(l=r(t))&&"function"==typeof t.callee?"Arguments":l}},"dmC+":function(e,t,n){"use strict";t.a=function(e,t){return Object(r.a)(e,t)(this)};var r=n("qqDE")},eFQL:function(e,t,n){(function(e){!function(){"use strict";function t(e,t){for(var n=e.length-1;n>=0;n--)typeof e[n]===v&&(e[n]=Zone.current.wrap(e[n],t+"_"+n));return e}function n(e){return!e||!1!==e.writable&&(typeof e.get!==v||typeof e.set!==b)}function r(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(!r&&n&&Object.getOwnPropertyDescriptor(n,t)&&(r={enumerable:!0,configurable:!0}),r&&r.configurable){delete r.writable,delete r.value;var i=r.get,o=t.substr(2),l=S[o];l||(l=S[o]=g("ON_PROPERTY"+o)),r.set=function(t){var n=this;n||e!==y||(n=y),n&&(n[l]&&n.removeEventListener(o,O),"function"==typeof t?(n[l]=t,n.addEventListener(o,O,!1)):n[l]=null)},r.get=function(){var n=this;if(n||e!==y||(n=y),!n)return null;var o=n[l];if(o)return o;if(i){var a=i&&i.apply(this);if(a)return r.set.apply(this,[a]),typeof n[_]===v&&n.removeAttribute(t),a}return null},Object.defineProperty(e,t,r)}}function i(e,t,n){if(t)for(var i=0;i<t.length;i++)r(e,"on"+t[i],n);else{var o=[];for(var l in e)"on"==l.substr(0,2)&&o.push(l);for(var a=0;a<o.length;a++)r(e,o[a],n)}}function o(e){var n=y[e];if(n){y[g(e)]=n,y[e]=function(){var r=t(arguments,e);switch(r.length){case 0:this[T]=new n;break;case 1:this[T]=new n(r[0]);break;case 2:this[T]=new n(r[0],r[1]);break;case 3:this[T]=new n(r[0],r[1],r[2]);break;case 4:this[T]=new n(r[0],r[1],r[2],r[3]);break;default:throw new Error("Arg list too long.")}},a(y[e],n);var r,i=new n(function(){});for(r in i)"XMLHttpRequest"===e&&"responseBlob"===r||function(t){"function"==typeof i[t]?y[e].prototype[t]=function(){return this[T][t].apply(this[T],arguments)}:Object.defineProperty(y[e].prototype,t,{set:function(n){"function"==typeof n?(this[T][t]=Zone.current.wrap(n,e+"."+t),a(this[T][t],n)):this[T][t]=n},get:function(){return this[T][t]}})}(r);for(r in n)"prototype"!==r&&n.hasOwnProperty(r)&&(y[e][r]=n[r])}}function l(e,t,r){for(var i=e;i&&!i.hasOwnProperty(t);)i=Object.getPrototypeOf(i);!i&&e[t]&&(i=e);var o,l=g(t);if(i&&!(o=i[l])&&(o=i[l]=i[t],n(i&&Object.getOwnPropertyDescriptor(i,t)))){var s=r(o,l,t);i[t]=function(){return s(this,arguments)},a(i[t],o)}return o}function a(e,t){e[g("OriginalDelegate")]=t}function s(e,t,n){function r(t,n){if(!t)return!1;var r=!0;n&&void 0!==n.useGlobalCallback&&(r=n.useGlobalCallback);var h=n&&n.validateHandler,v=!0;n&&void 0!==n.checkDuplicate&&(v=n.checkDuplicate);var b=!1;n&&void 0!==n.returnTarget&&(b=n.returnTarget);for(var _=t;_&&!_.hasOwnProperty(i);)_=Object.getPrototypeOf(_);if(!_&&t[i]&&(_=t),!_)return!1;if(_[c])return!1;var w,x={},C=_[c]=_[i],E=_[g(o)]=_[o],S=_[g(l)]=_[l],O=_[g(s)]=_[s];n&&n.prependEventListenerFnName&&(w=_[g(n.prependEventListenerFnName)]=_[n.prependEventListenerFnName]);var T=r?function(e){if(!e.isRemoved){var t=A[e.eventName],n=void 0;t&&(n=t[e.capture?M:P]);var r=n&&e.target[n];if(r)for(var i=0;i<r.length;i++)if(r[i]===e){r.splice(i,1),e.isRemoved=!0,0===r.length&&(e.allRemoved=!0,e.target[n]=null);break}}if(e.allRemoved)return E.apply(e.target,[e.eventName,e.capture?y:m,e.options])}:function(e){return E.apply(e.target,[e.eventName,e.invoke,e.options])},k=n&&n.compareTaskCallbackVsDelegate?n.compareTaskCallbackVsDelegate:function(e,t){var n=typeof t;return n===j&&e.callback===t||n===V&&e.originalDelegate===t},D=function(t,n,i,o,l,a){return void 0===l&&(l=!1),void 0===a&&(a=!1),function(){var s=this||e,u=(Zone,arguments[1]);if(!u)return t.apply(this,arguments);var c=!1;if(typeof u!==j){if(!u.handleEvent)return t.apply(this,arguments);c=!0}if(!h||h(t,u,s,arguments)){var d,p=arguments[0],f=arguments[2],m=!1;void 0===f?d=!1:!0===f?d=!0:!1===f?d=!1:(d=!!f&&!!f.capture,m=!!f&&!!f.once);var g,y=Zone.current,b=A[p];if(b)g=b[d?M:P];else{var _=z+(p+P),w=z+(p+M);A[p]={},A[p][P]=_,A[p][M]=w,g=d?w:_}var C=s[g],E=!1;if(C){if(E=!0,v)for(var S=0;S<C.length;S++)if(k(C[S],u))return}else C=s[g]=[];var O,T=s.constructor[F],D=L[T];D&&(O=D[p]),O||(O=T+n+p),x.options=f,m&&(x.options.once=!1),x.target=s,x.capture=d,x.eventName=p,x.isExisting=E;var I=y.scheduleEventTask(O,u,r?N:null,i,o);return m&&(f.once=!0),I.options=f,I.target=s,I.capture=d,I.eventName=p,c&&(I.originalDelegate=u),a?C.unshift(I):C.push(I),l?s:void 0}}};return _[i]=D(C,d,r?function(e){if(!x.isExisting)return C.apply(x.target,[x.eventName,x.capture?y:m,x.options])}:function(e){return C.apply(x.target,[x.eventName,e.invoke,x.options])},T,b),w&&(_[p]=D(w,f,function(e){return w.apply(x.target,[x.eventName,e.invoke,x.options])},T,b,!0)),_[o]=function(){var t,n=this||e,r=arguments[0],i=arguments[2];t=void 0!==i&&(!0===i||!1!==i&&!!i&&!!i.capture);var o=arguments[1];if(!o)return E.apply(this,arguments);if(!h||h(E,o,n,arguments)){var l,a=A[r];a&&(l=a[t?M:P]);var s=l&&n[l];if(s)for(var u=0;u<s.length;u++){var c=s[u];if(k(c,o))return s.splice(u,1),c.isRemoved=!0,0===s.length&&(c.allRemoved=!0,n[l]=null),void c.zone.cancelTask(c)}}},_[l]=function(){for(var t=[],n=u(this||e,arguments[0]),r=0;r<n.length;r++){var i=n[r];t.push(i.originalDelegate?i.originalDelegate:i.callback)}return t},_[s]=function(){var t=this||e,n=arguments[0];if(n){var r=A[n];if(r){var i=t[r[P]],l=t[r[M]];if(i){var a=R(i);for(d=0;d<a.length;d++)this[o].apply(this,[n,(u=a[d]).originalDelegate?u.originalDelegate:u.callback,u.options])}if(l)for(a=R(l),d=0;d<a.length;d++){var u;this[o].apply(this,[n,(u=a[d]).originalDelegate?u.originalDelegate:u.callback,u.options])}}}else{for(var c=Object.keys(t),d=0;d<c.length;d++){var p=B.exec(c[d]),f=p&&p[1];f&&"removeListener"!==f&&this[s].apply(this,[f])}this[s].apply(this,["removeListener"])}},a(_[i],C),a(_[o],E),O&&a(_[s],O),S&&a(_[l],S),!0}for(var i=n&&n.addEventListenerFnName||"addEventListener",o=n&&n.removeEventListenerFnName||"removeEventListener",l=n&&n.listenersFnName||"eventListeners",s=n&&n.removeAllFnName||"removeAllListeners",c=g(i),d="."+i+":",p="prependListener",f="."+p+":",h=function(e,t,n){if(!e.isRemoved){var r=e.callback;typeof r===V&&r.handleEvent&&(e.callback=function(e){return r.handleEvent(e)},e.originalDelegate=r),e.invoke(e,t,[n]);var i=e.options;i&&"object"==typeof i&&i.once&&t[o].apply(t,[n.type,e.originalDelegate?e.originalDelegate:e.callback,i])}},m=function(t){if(t=t||e.event){var n=this||t.target||e,r=n[A[t.type][P]];if(r)if(1===r.length)h(r[0],n,t);else for(var i=r.slice(),o=0;o<i.length&&(!t||!0!==t[H]);o++)h(i[o],n,t)}},y=function(t){if(t=t||e.event){var n=this||t.target||e,r=n[A[t.type][M]];if(r)if(1===r.length)h(r[0],n,t);else for(var i=r.slice(),o=0;o<i.length&&(!t||!0!==t[H]);o++)h(i[o],n,t)}},v=[],b=0;b<t.length;b++)v[b]=r(t[b],n);return v}function u(e,t){var n=[];for(var r in e){var i=B.exec(r),o=i&&i[1];if(o&&(!t||o===t)){var l=e[r];if(l)for(var a=0;a<l.length;a++)n.push(l[a])}}return n}function c(e,t,n,r){function i(t){var n=t.data;return n.args[0]=function(){try{t.invoke.apply(this,arguments)}finally{typeof n.handleId===c?delete u[n.handleId]:n.handleId&&(n.handleId[W]=null)}},n.handleId=a.apply(e,n.args),t}function o(e){return s(e.data.handleId)}var a=null,s=null;n+=r;var u={},c="number";a=l(e,t+=r,function(n){return function(l,a){if("function"==typeof a[0]){var s=Zone.current.scheduleMacroTask(t,a[0],{handleId:null,isPeriodic:"Interval"===r,delay:"Timeout"===r||"Interval"===r?a[1]||0:null,args:a},i,o);if(!s)return s;var d=s.data.handleId;return typeof d===c?u[d]=s:d&&(d[W]=s),d&&d.ref&&d.unref&&"function"==typeof d.ref&&"function"==typeof d.unref&&(s.ref=d.ref.bind(d),s.unref=d.unref.bind(d)),typeof d===c||d?d:s}return n.apply(e,a)}}),s=l(e,n,function(t){return function(n,r){var i,o=r[0];typeof o===c?i=u[o]:(i=o&&o[W])||(i=o),i&&"string"==typeof i.type?"notScheduled"!==i.state&&(i.cancelFn&&i.data.isPeriodic||0===i.runCount)&&(typeof o===c?delete u[o]:o&&(o[W]=null),i.zone.cancelTask(i)):t.apply(e,r)}})}function d(e,t){return e&&e[K]&&e[K][t]}function p(e,t,n){return n.configurable=!0,n.configurable||(e[K]||q(e,K,{writable:!0,value:{}}),e[K][t]=!0),n}function f(e,t,n,r){try{return q(e,t,n)}catch(o){if(!n.configurable)throw o;typeof r==$?delete n.configurable:n.configurable=r;try{return q(e,t,n)}catch(r){var i=null;try{i=JSON.stringify(n)}catch(e){i=i.toString()}console.log("Attempting to configure '"+t+"' with descriptor '"+i+"' on object '"+e+"' and got error, giving up: "+r)}}}function h(e,t,n,r){i(e,function(e,t,n){if(!n)return t;var r=n.filter(function(t){return t.target===e});if(!r||0===r.length)return t;var i=r[0].ignoreProperties;return t.filter(function(e){return-1===i.indexOf(e)})}(e,t,n),r)}!function(e){function t(e){a&&a.mark&&a.mark(e)}function n(e,t){a&&a.measure&&a.measure(e,t)}function r(t){0===M&&0===g.length&&(u||e[h]&&(u=e[h].resolve(0)),u?u[m](i):e[f](i,0)),t&&g.push(t)}function i(){if(!y){for(y=!0;g.length;){var e=g;g=[];for(var t=0;t<e.length;t++){var n=e[t];try{n.zone.runTask(n,null,null)}catch(e){D.onUnhandledError(e)}}}l("ignoreConsoleErrorUncaughtError"),D.microtaskDrainDone(),y=!1}}function o(){}function l(e){return"__zone_symbol__"+e}var a=e.performance;if(t("Zone"),e.Zone)throw new Error("Zone already loaded.");var s=function(){function r(e,t){this._properties=null,this._parent=e,this._name=t?t.name||"unnamed":"<root>",this._properties=t&&t.properties||{},this._zoneDelegate=new d(this,this._parent&&this._parent._zoneDelegate,t)}return r.assertZonePatched=function(){if(e.Promise!==k.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(r,"root",{get:function(){for(var e=r.current;e.parent;)e=e.parent;return e},enumerable:!0,configurable:!0}),Object.defineProperty(r,"current",{get:function(){return I.zone},enumerable:!0,configurable:!0}),Object.defineProperty(r,"currentTask",{get:function(){return R},enumerable:!0,configurable:!0}),r.__load_patch=function(i,o){if(k.hasOwnProperty(i))throw Error("Already loaded patch: "+i);if(!e["__Zone_disable_"+i]){var l="Zone:"+i;t(l),k[i]=o(e,r,D),n(l,l)}},Object.defineProperty(r.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"name",{get:function(){return this._name},enumerable:!0,configurable:!0}),r.prototype.get=function(e){var t=this.getZoneWith(e);if(t)return t._properties[e]},r.prototype.getZoneWith=function(e){for(var t=this;t;){if(t._properties.hasOwnProperty(e))return t;t=t._parent}return null},r.prototype.fork=function(e){if(!e)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,e)},r.prototype.wrap=function(e,t){if("function"!=typeof e)throw new Error("Expecting function got: "+e);var n=this._zoneDelegate.intercept(this,e,t),r=this;return function(){return r.runGuarded(n,this,arguments,t)}},r.prototype.run=function(e,t,n,r){void 0===t&&(t=void 0),void 0===n&&(n=null),void 0===r&&(r=null),I={parent:I,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,r)}finally{I=I.parent}},r.prototype.runGuarded=function(e,t,n,r){void 0===t&&(t=null),void 0===n&&(n=null),void 0===r&&(r=null),I={parent:I,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,r)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{I=I.parent}},r.prototype.runTask=function(e,t,n){if(e.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(e.zone||v).name+"; Execution: "+this.name+")");if(e.state!==b||e.type!==T){var r=e.state!=x;r&&e._transitionTo(x,w),e.runCount++;var i=R;R=e,I={parent:I,zone:this};try{e.type==O&&e.data&&!e.data.isPeriodic&&(e.cancelFn=null);try{return this._zoneDelegate.invokeTask(this,e,t,n)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{e.state!==b&&e.state!==E&&(e.type==T||e.data&&e.data.isPeriodic?r&&e._transitionTo(w,x):(e.runCount=0,this._updateTaskCount(e,-1),r&&e._transitionTo(b,x,b))),I=I.parent,R=i}}},r.prototype.scheduleTask=function(e){if(e.zone&&e.zone!==this)for(var t=this;t;){if(t===e.zone)throw Error("can not reschedule task to "+this.name+" which is descendants of the original zone "+e.zone.name);t=t.parent}e._transitionTo(_,b);var n=[];e._zoneDelegates=n,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(t){throw e._transitionTo(E,_,b),this._zoneDelegate.handleError(this,t),t}return e._zoneDelegates===n&&this._updateTaskCount(e,1),e.state==_&&e._transitionTo(w,_),e},r.prototype.scheduleMicroTask=function(e,t,n,r){return this.scheduleTask(new p(S,e,t,n,r,null))},r.prototype.scheduleMacroTask=function(e,t,n,r,i){return this.scheduleTask(new p(O,e,t,n,r,i))},r.prototype.scheduleEventTask=function(e,t,n,r,i){return this.scheduleTask(new p(T,e,t,n,r,i))},r.prototype.cancelTask=function(e){if(e.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(e.zone||v).name+"; Execution: "+this.name+")");e._transitionTo(C,w,x);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(E,C),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(b,C),e.runCount=0,e},r.prototype._updateTaskCount=function(e,t){var n=e._zoneDelegates;-1==t&&(e._zoneDelegates=null);for(var r=0;r<n.length;r++)n[r]._updateTaskCount(e.type,t)},r}();s.__symbol__=l;var u,c={name:"",onHasTask:function(e,t,n,r){return e.hasTask(n,r)},onScheduleTask:function(e,t,n,r){return e.scheduleTask(n,r)},onInvokeTask:function(e,t,n,r,i,o){return e.invokeTask(n,r,i,o)},onCancelTask:function(e,t,n,r){return e.cancelTask(n,r)}},d=function(){function e(e,t,n){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=e,this._parentDelegate=t,this._forkZS=n&&(n&&n.onFork?n:t._forkZS),this._forkDlgt=n&&(n.onFork?t:t._forkDlgt),this._forkCurrZone=n&&(n.onFork?this.zone:t.zone),this._interceptZS=n&&(n.onIntercept?n:t._interceptZS),this._interceptDlgt=n&&(n.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this.zone:t.zone),this._invokeZS=n&&(n.onInvoke?n:t._invokeZS),this._invokeDlgt=n&&(n.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this.zone:t.zone),this._handleErrorZS=n&&(n.onHandleError?n:t._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this.zone:t.zone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:t._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this.zone:t.zone),this._invokeTaskZS=n&&(n.onInvokeTask?n:t._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this.zone:t.zone),this._cancelTaskZS=n&&(n.onCancelTask?n:t._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this.zone:t.zone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;var r=n&&n.onHasTask;(r||t&&t._hasTaskZS)&&(this._hasTaskZS=r?n:c,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=e,n.onScheduleTask||(this._scheduleTaskZS=c,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),n.onInvokeTask||(this._invokeTaskZS=c,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),n.onCancelTask||(this._cancelTaskZS=c,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}return e.prototype.fork=function(e,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,e,t):new s(e,t)},e.prototype.intercept=function(e,t,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,e,t,n):t},e.prototype.invoke=function(e,t,n,r,i){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,e,t,n,r,i):t.apply(n,r)},e.prototype.handleError=function(e,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,e,t)},e.prototype.scheduleTask=function(e,t){var n=t;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),(n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,e,t))||(n=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=S)throw new Error("Task is missing scheduleFn.");r(t)}return n},e.prototype.invokeTask=function(e,t,n,r){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,e,t,n,r):t.callback.apply(n,r)},e.prototype.cancelTask=function(e,t){var n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,e,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");n=t.cancelFn(t)}return n},e.prototype.hasTask=function(e,t){try{return this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,e,t)}catch(t){this.handleError(e,t)}},e.prototype._updateTaskCount=function(e,t){var n=this._taskCounts,r=n[e],i=n[e]=r+t;if(i<0)throw new Error("More tasks executed then were scheduled.");0!=r&&0!=i||this.hasTask(this.zone,{microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:e})},e}(),p=function(){function t(n,r,i,o,l,a){this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=n,this.source=r,this.data=o,this.scheduleFn=l,this.cancelFn=a,this.callback=i;var s=this;this.invoke=n===T&&o&&o.isUsingGlobalCallback?t.invokeTask:function(){return t.invokeTask.apply(e,[s,this,arguments])}}return t.invokeTask=function(e,t,n){e||(e=this),M++;try{return e.runCount++,e.zone.runTask(e,t,n)}finally{1==M&&i(),M--}},Object.defineProperty(t.prototype,"zone",{get:function(){return this._zone},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"state",{get:function(){return this._state},enumerable:!0,configurable:!0}),t.prototype.cancelScheduleRequest=function(){this._transitionTo(b,_)},t.prototype._transitionTo=function(e,t,n){if(this._state!==t&&this._state!==n)throw new Error(this.type+" '"+this.source+"': can not transition to '"+e+"', expecting state '"+t+"'"+(n?" or '"+n+"'":"")+", was '"+this._state+"'.");this._state=e,e==b&&(this._zoneDelegates=null)},t.prototype.toString=function(){return this.data&&void 0!==this.data.handleId?this.data.handleId:Object.prototype.toString.call(this)},t.prototype.toJSON=function(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,invoke:this.invoke,scheduleFn:this.scheduleFn,cancelFn:this.cancelFn,runCount:this.runCount,callback:this.callback}},t}(),f=l("setTimeout"),h=l("Promise"),m=l("then"),g=[],y=!1,v={name:"NO ZONE"},b="notScheduled",_="scheduling",w="scheduled",x="running",C="canceling",E="unknown",S="microTask",O="macroTask",T="eventTask",k={},D={symbol:l,currentZoneFrame:function(){return I},onUnhandledError:o,microtaskDrainDone:o,scheduleMicroTask:r,showUncaughtError:function(){return!s[l("ignoreConsoleErrorUncaughtError")]},patchEventTarget:function(){return[]},patchOnProperties:o,patchMethod:function(){return o},setNativePromise:function(e){u=e.resolve(0)}},I={parent:null,zone:new s(null,null)},R=null,M=0;n("Zone","Zone"),e.Zone=s}("undefined"!=typeof window&&window||"undefined"!=typeof self&&self||e);var m=function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}};Zone.__load_patch("ZoneAwarePromise",function(e,t,n){function r(e){return e&&e.then}function i(e){return e}function o(e){return I.reject(e)}function l(e,t){return function(n){try{a(e,t,n)}catch(t){a(e,!1,t)}}}function a(e,r,i){var o=E();if(e===i)throw new TypeError(S);if(e[y]===_){var c=null;try{typeof i!==O&&typeof i!==T||(c=i&&i.then)}catch(t){return o(function(){a(e,!1,t)})(),e}if(r!==x&&i instanceof I&&i.hasOwnProperty(y)&&i.hasOwnProperty(v)&&i[y]!==_)s(i),a(e,i[y],i[v]);else if(r!==x&&typeof c===T)try{c.apply(i,[o(l(e,r)),o(l(e,!1))])}catch(t){o(function(){a(e,!1,t)})()}else{e[y]=r;var d=e[v];e[v]=i,r===x&&i instanceof Error&&(i[k]=t.currentTask);for(var f=0;f<d.length;)u(e,d[f++],d[f++],d[f++],d[f++]);if(0==d.length&&r==x){e[y]=C;try{throw new Error("Uncaught (in promise): "+i+(i&&i.stack?"\n"+i.stack:""))}catch(r){var h=r;h.rejection=i,h.promise=e,h.zone=t.current,h.task=t.currentTask,p.push(h),n.scheduleMicroTask()}}}}return e}function s(e){if(e[y]===C){try{var n=t[D];n&&typeof n===T&&n.apply(this,[{rejection:e[v],promise:e}])}catch(e){}e[y]=x;for(var r=0;r<p.length;r++)e===p[r].promise&&p.splice(r,1)}}function u(e,t,n,r,l){s(e);var u=e[y]?typeof r===T?r:i:typeof l===T?l:o;t.scheduleMicroTask(b,function(){try{a(n,!0,t.run(u,void 0,[e[v]]))}catch(e){a(n,!1,e)}})}function c(e){var t=e.prototype,n=t.then;t[h]=n;var r=Object.getOwnPropertyDescriptor(e.prototype,"then");r&&!1===r.writable&&r.configurable&&Object.defineProperty(e.prototype,"then",{writable:!0}),e.prototype.then=function(e,t){var r=this;return new I(function(e,t){n.call(r,e,t)}).then(e,t)},e[N]=!0}var d=n.symbol,p=[],f=d("Promise"),h=d("then");n.onUnhandledError=function(e){if(n.showUncaughtError()){var t=e&&e.rejection;t?console.error("Unhandled Promise rejection:",t instanceof Error?t.message:t,"; Zone:",e.zone.name,"; Task:",e.task&&e.task.source,"; Value:",t,t instanceof Error?t.stack:void 0):console.error(e)}},n.microtaskDrainDone=function(){for(;p.length;)for(var e=function(){var e=p.shift();try{e.zone.runGuarded(function(){throw e})}catch(e){!function(e){n.onUnhandledError(e);try{var r=t[g];r&&"function"==typeof r&&r.apply(this,[e])}catch(e){}}(e)}};p.length;)e()};var g=d("unhandledPromiseRejectionHandler"),y=d("state"),v=d("value"),b="Promise.then",_=null,w=!0,x=!1,C=0,E=function(){var e=!1;return function(t){return function(){e||(e=!0,t.apply(null,arguments))}}},S="Promise resolved with itself",O="object",T="function",k=d("currentTask"),D=d("rejectionHandledHandler"),I=function(){function e(t){if(!(this instanceof e))throw new Error("Must be an instanceof Promise.");this[y]=_,this[v]=[];try{t&&t(l(this,w),l(this,x))}catch(e){a(this,!1,e)}}return e.toString=function(){return"function ZoneAwarePromise() { [native code] }"},e.resolve=function(e){return a(new this(null),w,e)},e.reject=function(e){return a(new this(null),x,e)},e.race=function(e){function t(e){l&&(l=i(e))}function n(e){l&&(l=o(e))}var i,o,l=new this(function(e,t){n=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)l.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return l}([e,t],2),i=n[0],o=n[1];var n});try{for(var a=m(e),s=a.next();!s.done;s=a.next()){var u=s.value;r(u)||(u=this.resolve(u)),u.then(t,n)}}catch(e){c={error:e}}finally{try{s&&!s.done&&(d=a.return)&&d.call(a)}finally{if(c)throw c.error}}return l;var c,d},e.all=function(e){var t,n,i=new this(function(e,r){t=e,n=r}),o=0,l=[];try{for(var a=m(e),s=a.next();!s.done;s=a.next()){var u=s.value;r(u)||(u=this.resolve(u)),u.then(function(e){return function(n){l[e]=n,--o||t(l)}}(o),n),o++}}catch(e){c={error:e}}finally{try{s&&!s.done&&(d=a.return)&&d.call(a)}finally{if(c)throw c.error}}return o||t(l),i;var c,d},e.prototype.then=function(e,n){var r=new this.constructor(null),i=t.current;return this[y]==_?this[v].push(i,r,e,n):u(this,i,r,e,n),r},e.prototype.catch=function(e){return this.then(null,e)},e}();I.resolve=I.resolve,I.reject=I.reject,I.race=I.race,I.all=I.all;var R=e[f]=e.Promise,M=t.__symbol__("ZoneAwarePromise"),P=Object.getOwnPropertyDescriptor(e,"Promise");P&&!P.configurable||(P&&delete P.writable,P&&delete P.value,P||(P={configurable:!0,enumerable:!0}),P.get=function(){return e[M]?e[M]:e[f]},P.set=function(t){t===I?e[M]=t:(e[f]=t,t.prototype[h]||c(t),n.setNativePromise(t))},Object.defineProperty(e,"Promise",P)),e.Promise=I;var N=d("thenPatched");if(R){c(R);var A=e.fetch;typeof A==T&&(e.fetch=function(e){return function(){var t=e.apply(this,arguments);if(t instanceof I)return t;var n=t.constructor;return n[N]||c(n),t}}(A))}return Promise[t.__symbol__("uncaughtPromiseErrors")]=p,I});var g=Zone.__symbol__,y="object"==typeof window&&window||"object"==typeof self&&self||e,v="function",b="undefined",_="removeAttribute",w="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,x=!("nw"in y)&&void 0!==y.process&&"[object process]"==={}.toString.call(y.process),C=!x&&!w&&!("undefined"==typeof window||!window.HTMLElement),E=void 0!==y.process&&"[object process]"==={}.toString.call(y.process)&&!w&&!("undefined"==typeof window||!window.HTMLElement),S={},O=function(e){if(e=e||y.event){var t=S[e.type];t||(t=S[e.type]=g("ON_PROPERTY"+e.type));var n=(this||e.target||y)[t],r=n&&n.apply(this,arguments);return void 0==r||r||e.preventDefault(),r}},T=g("originalInstance"),k=!1,D=!1;Zone.__load_patch("toString",function(e,t,n){var r=t.__zone_symbol__originalToString=Function.prototype.toString,i=g("OriginalDelegate"),o=g("Promise"),l=g("Error");Function.prototype.toString=function(){if("function"==typeof this){var t=this[i];if(t)return"function"==typeof t?r.apply(this[i],arguments):Object.prototype.toString.call(t);if(this===Promise){var n=e[o];if(n)return r.apply(n,arguments)}if(this===Error){var a=e[l];if(a)return r.apply(a,arguments)}}return r.apply(this,arguments)};var a=Object.prototype.toString;Object.prototype.toString=function(){return this instanceof Promise?"[object Promise]":a.apply(this,arguments)}});var I=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)l.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return l},R=function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(I(arguments[t]));return e},M="true",P="false",N={isUsingGlobalCallback:!0},A={},L={},F="name",j="function",V="object",z="__zone_symbol__",B=/^__zone_symbol__(\w+)(true|false)$/,H="__zone_symbol__propagationStopped",W=g("zoneTask"),q=Object[g("defineProperty")]=Object.defineProperty,U=Object[g("getOwnPropertyDescriptor")]=Object.getOwnPropertyDescriptor,G=Object.create,K=g("unconfigurables"),$="undefined",Z=["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximity","vrdisplyconnected","vrdisplaydisconnected","vrdisplaypresentchange"],Q=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],Y=["load"],X=["blur","error","focus","load","resize","scroll","messageerror"],J=["bounce","finish","start"],ee=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],te=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],ne=["close","error","open","message"],re=["error","message"],ie=["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"].concat(["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],["autocomplete","autocompleteerror"],["toggle"],["afterscriptexecute","beforescriptexecute","DOMContentLoaded","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange"],Z,["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslostpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"]),oe=g("unbound");Zone.__load_patch("util",function(e,t,n){n.patchOnProperties=i,n.patchMethod=l}),Zone.__load_patch("timers",function(e,t,n){c(e,"set","clear","Timeout"),c(e,"set","clear","Interval"),c(e,"set","clear","Immediate")}),Zone.__load_patch("requestAnimationFrame",function(e,t,n){c(e,"request","cancel","AnimationFrame"),c(e,"mozRequest","mozCancel","AnimationFrame"),c(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",function(e,t,n){for(var r=["alert","prompt","confirm"],i=0;i<r.length;i++)l(e,r[i],function(n,r,i){return function(r,o){return t.current.run(n,e,o,i)}})}),Zone.__load_patch("EventTarget",function(e,t,n){(function(e,t){!function(n,r){var i=e.Event;i&&i.prototype&&t.patchMethod(i.prototype,"stopImmediatePropagation",function(e){return function(e,t){e[H]=!0}})}()})(e,n),function(e,t){var n="Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video",r="ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket".split(","),i=[],o=e.wtf,l=n.split(",");o?i=l.map(function(e){return"HTML"+e+"Element"}).concat(r):e.EventTarget?i.push("EventTarget"):i=r;for(var a=e.__Zone_disable_IE_check||!1,u=e.__Zone_enable_cross_context_check||!1,c=function(){if(k)return D;k=!0;try{var e=window.navigator.userAgent;return e.indexOf("MSIE "),-1===e.indexOf("MSIE ")&&-1===e.indexOf("Trident/")&&-1===e.indexOf("Edge/")||(D=!0),D}catch(e){}}(),d="[object FunctionWrapper]",p="function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }",f=0;f<ie.length;f++){var h=z+((b=ie[f])+P),m=z+(b+M);A[b]={},A[b][P]=h,A[b][M]=m}for(f=0;f<n.length;f++)for(var g=l[f],y=L[g]={},v=0;v<ie.length;v++){var b;y[b=ie[v]]=g+".addEventListener:"+b}var _=[];for(f=0;f<i.length;f++){var w=e[i[f]];_.push(w&&w.prototype)}s(e,_,{validateHandler:function(e,t,n,r){if(!a&&c)if(u)try{if((i=t.toString())===d||i==p)return e.apply(n,r),!1}catch(t){return e.apply(n,r),!1}else{var i;if((i=t.toString())===d||i==p)return e.apply(n,r),!1}else if(u)try{t.toString()}catch(t){return e.apply(n,r),!1}return!0}}),t.patchEventTarget=s}(e,n);var r=e.XMLHttpRequestEventTarget;r&&r.prototype&&n.patchEventTarget(e,[r.prototype]),o("MutationObserver"),o("WebKitMutationObserver"),o("IntersectionObserver"),o("FileReader")}),Zone.__load_patch("on_property",function(e,t,n){(function(e,t){if(!x||E){var n="undefined"!=typeof WebSocket;if(function(){if((C||E)&&!Object.getOwnPropertyDescriptor(HTMLElement.prototype,"onclick")&&"undefined"!=typeof Element){var e=Object.getOwnPropertyDescriptor(Element.prototype,"onclick");if(e&&!e.configurable)return!1}var t=Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype,"onreadystatechange");if(t){Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return!0}});var n=!!(i=new XMLHttpRequest).onreadystatechange;return Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",t||{}),n}var r=g("fakeonreadystatechange");Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return this[r]},set:function(e){this[r]=e}});var i,o=function(){};(i=new XMLHttpRequest).onreadystatechange=o;n=i[r]===o;return i.onreadystatechange=null,n}()){var r=t.__Zone_ignore_on_properties;if(C){h(window,ie.concat(["messageerror"]),r,Object.getPrototypeOf(window)),h(Document.prototype,ie,r),void 0!==window.SVGElement&&h(window.SVGElement.prototype,ie,r),h(Element.prototype,ie,r),h(HTMLElement.prototype,ie,r),h(HTMLMediaElement.prototype,Q,r),h(HTMLFrameSetElement.prototype,Z.concat(X),r),h(HTMLBodyElement.prototype,Z.concat(X),r),h(HTMLFrameElement.prototype,Y,r),h(HTMLIFrameElement.prototype,Y,r);var l=window.HTMLMarqueeElement;l&&h(l.prototype,J,r);var a=window.Worker;a&&h(a.prototype,re,r)}h(XMLHttpRequest.prototype,ee,r);var u=t.XMLHttpRequestEventTarget;u&&h(u&&u.prototype,ee,r),"undefined"!=typeof IDBIndex&&(h(IDBIndex.prototype,te,r),h(IDBRequest.prototype,te,r),h(IDBOpenDBRequest.prototype,te,r),h(IDBDatabase.prototype,te,r),h(IDBTransaction.prototype,te,r),h(IDBCursor.prototype,te,r)),n&&h(WebSocket.prototype,ne,r)}else!function(){for(var e=function(e){var t=ie[e],n="on"+t;self.addEventListener(t,function(e){var t,r,i=e.target;for(r=i?i.constructor.name+"."+n:"unknown."+n;i;)i[n]&&!i[n][oe]&&((t=Zone.current.wrap(i[n],r))[oe]=i[n],i[n]=t),i=i.parentElement},!0)},t=0;t<ie.length;t++)e(t)}(),o("XMLHttpRequest"),n&&function(e,t){var n=t.WebSocket;t.EventTarget||s(t,[n.prototype]),t.WebSocket=function(e,t){var r,o,l=arguments.length>1?new n(e,t):new n(e),a=Object.getOwnPropertyDescriptor(l,"onmessage");return a&&!1===a.configurable?(r=Object.create(l),o=l,["addEventListener","removeEventListener","send","close"].forEach(function(e){r[e]=function(){var t=Array.prototype.slice.call(arguments);if("addEventListener"===e||"removeEventListener"===e){var n=t.length>0?t[0]:void 0;if(n){var i=Zone.__symbol__("ON_PROPERTY"+n);l[i]=r[i]}}return l[e].apply(l,t)}})):r=l,i(r,["close","error","message","open"],o),r};var r=t.WebSocket;for(var o in n)r[o]=n[o]}(0,t)}})(0,e),Object.defineProperty=function(e,t,n){if(d(e,t))throw new TypeError("Cannot assign to read only property '"+t+"' of "+e);var r=n.configurable;return"prototype"!==t&&(n=p(e,t,n)),f(e,t,n,r)},Object.defineProperties=function(e,t){return Object.keys(t).forEach(function(n){Object.defineProperty(e,n,t[n])}),e},Object.create=function(e,t){return"object"!=typeof t||Object.isFrozen(t)||Object.keys(t).forEach(function(n){t[n]=p(e,n,t[n])}),G(e,t)},Object.getOwnPropertyDescriptor=function(e,t){var n=U(e,t);return d(e,t)&&(n.configurable=!1),n},function(t){if((C||E)&&"registerElement"in e.document){var n=document.registerElement,r=["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"];document.registerElement=function(e,t){return t&&t.prototype&&r.forEach(function(e){var n="Document.registerElement::"+e;if(t.prototype.hasOwnProperty(e)){var r=Object.getOwnPropertyDescriptor(t.prototype,e);r&&r.value?(r.value=Zone.current.wrap(r.value,n),function(t,n,r){var i=r.configurable;f(t,e,r=p(t,e,r),i)}(t.prototype,0,r)):t.prototype[e]=Zone.current.wrap(t.prototype[e],n)}else t.prototype[e]&&(t.prototype[e]=Zone.current.wrap(t.prototype[e],n))}),n.apply(document,[e,t])},a(document.registerElement,n)}}()}),Zone.__load_patch("canvas",function(e,t,n){var r=e.HTMLCanvasElement;void 0!==r&&r.prototype&&r.prototype.toBlob&&function(e,t,n){function i(e){var t=e.data;return t.args[t.callbackIndex]=function(){e.invoke.apply(this,arguments)},o.apply(t.target,t.args),e}var o=null;o=l(r.prototype,"toBlob",function(e){return function(t,n){var r={name:"HTMLCanvasElement.toBlob",target:t,callbackIndex:0,args:n};return r.callbackIndex>=0&&"function"==typeof n[r.callbackIndex]?Zone.current.scheduleMacroTask(r.name,n[r.callbackIndex],r,i,null):e.apply(t,n)}})}()}),Zone.__load_patch("XHR",function(e,t,n){!function(e){function n(e){XMLHttpRequest[a]=!1;var t=e.data,n=t.target,i=n[o];f||(f=n[d],h=n[p]),i&&h.apply(n,[y,i]);var l=n[o]=function(){n.readyState===n.DONE&&!t.aborted&&XMLHttpRequest[a]&&e.state===v&&e.invoke()};return f.apply(n,[y,l]),n[r]||(n[r]=e),_.apply(n,t.args),XMLHttpRequest[a]=!0,e}function u(){}function c(e){var t=e.data;return t.aborted=!0,w.apply(t.target,t.args)}var d=g("addEventListener"),p=g("removeEventListener"),f=XMLHttpRequest.prototype[d],h=XMLHttpRequest.prototype[p];if(!f){var m=e.XMLHttpRequestEventTarget;m&&(f=m.prototype[d],h=m.prototype[p])}var y="readystatechange",v="scheduled",b=l(e.XMLHttpRequest.prototype,"open",function(){return function(e,t){return e[i]=0==t[2],e[s]=t[1],b.apply(e,t)}}),_=l(e.XMLHttpRequest.prototype,"send",function(){return function(e,r){var o=t.current;return e[i]?_.apply(e,r):o.scheduleMacroTask("XMLHttpRequest.send",u,{target:e,url:e[s],isPeriodic:!1,delay:null,args:r,aborted:!1},n,c)}}),w=l(e.XMLHttpRequest.prototype,"abort",function(e){return function(e,t){var n=e[r];if(n&&"string"==typeof n.type){if(null==n.cancelFn||n.data&&n.data.aborted)return;n.zone.cancelTask(n)}}})}(e);var r=g("xhrTask"),i=g("xhrSync"),o=g("xhrListener"),a=g("xhrScheduled"),s=g("xhrURL")}),Zone.__load_patch("geolocation",function(e,r,i){e.navigator&&e.navigator.geolocation&&function(e,r){for(var i=e.constructor.name,o=function(o){var l=r[o],s=e[l];if(s){if(!n(Object.getOwnPropertyDescriptor(e,l)))return"continue";e[l]=function(e){var n=function(){return e.apply(this,t(arguments,i+"."+l))};return a(n,e),n}(s)}},l=0;l<r.length;l++)o(l)}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",function(e,t,n){function r(t){return function(n){u(e,t).forEach(function(r){var i=e.PromiseRejectionEvent;if(i){var o=new i(t,{promise:n.promise,reason:n.rejection});r.invoke(o)}})}}e.PromiseRejectionEvent&&(t[g("unhandledPromiseRejectionHandler")]=r("unhandledrejection"),t[g("rejectionHandledHandler")]=r("rejectionhandled"))})}()}).call(t,n("fRUx"))},eIqN:function(e,t,n){"use strict";function r(){return function(e){return e.lift(new c(e))}}function i(){return new l.Subject}var o=n("6Xbx"),l=n("TO51"),a=n("AP4T"),s=n("E9/g"),u=n("qLnt"),c=function(){function e(e){this.connectable=e}return e.prototype.call=function(e,t){var n=this.connectable;n._refCount++;var r=new d(e,n),i=t.subscribe(r);return r.closed||(r.connection=n.connect()),i},e}(),d=function(e){function t(t,n){e.call(this,t),this.connectable=n}return Object(o.__extends)(t,e),t.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._refCount;if(t<=0)this.connection=null;else if(e._refCount=t-1,t>1)this.connection=null;else{var n=this.connection,r=e._connection;this.connection=null,!r||n&&r!==n||r.unsubscribe()}}else this.connection=null},t}(s.a),p=function(e){function t(t,n){e.call(this),this.source=t,this.subjectFactory=n,this._refCount=0,this._isComplete=!1}return Object(o.__extends)(t,e),t.prototype._subscribe=function(e){return this.getSubject().subscribe(e)},t.prototype.getSubject=function(){var e=this._subject;return e&&!e.isStopped||(this._subject=this.subjectFactory()),this._subject},t.prototype.connect=function(){var e=this._connection;return e||(this._isComplete=!1,(e=this._connection=new u.a).add(this.source.subscribe(new h(this.getSubject(),this))),e.closed?(this._connection=null,e=u.a.EMPTY):this._connection=e),e},t.prototype.refCount=function(){return r()(this)},t}(a.a).prototype,f={operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:p._subscribe},_isComplete:{value:p._isComplete,writable:!0},getSubject:{value:p.getSubject},connect:{value:p.connect},refCount:{value:p.refCount}},h=function(e){function t(t,n){e.call(this,t),this.connectable=n}return Object(o.__extends)(t,e),t.prototype._error=function(t){this._unsubscribe(),e.prototype._error.call(this,t)},t.prototype._complete=function(){this.connectable._isComplete=!0,this._unsubscribe(),e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._connection;e._refCount=0,e._subject=null,e._connection=null,t&&t.unsubscribe()}},t}(l.SubjectSubscriber);t.a=function(){return function(e){return r()(function(e,t){return function(t){var n;n="function"==typeof e?e:function(){return e};var r=Object.create(t,f);return r.source=t,r.subjectFactory=n,r}}(i)(e))}}},eoFs:function(e,t,n){"use strict";n.d(t,"a",function(){return l});var r=n("6Xbx"),i=n("TO51"),o=n("Upor"),l=function(e){function t(t){e.call(this),this._value=t}return Object(r.__extends)(t,e),Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!0,configurable:!0}),t.prototype._subscribe=function(t){var n=e.prototype._subscribe.call(this,t);return n&&!n.closed&&t.next(this._value),n},t.prototype.getValue=function(){if(this.hasError)throw this.thrownError;if(this.closed)throw new o.a;return this._value},t.prototype.next=function(t){e.prototype.next.call(this,this._value=t)},t}(i.Subject)},ewdp:function(e,t,n){var r=n("tose"),i=n("+pQw"),o=n("2Fuj");e.exports=n("V+0c")?Object.defineProperties:function(e,t){i(e);for(var n,l=o(t),a=l.length,s=0;a>s;)r.f(e,n=l[s++],t[n]);return e}},f8Ud:function(e,t){(function(t){e.exports=t}).call(t,{})},fAeS:function(e,t,n){"use strict";function r(e,t){return{type:7,name:e,definitions:t,options:{}}}function i(e,t){return void 0===t&&(t=null),{type:4,styles:t,timings:e}}function o(e,t){return void 0===t&&(t=null),{type:3,steps:e,options:t}}function l(e,t){return void 0===t&&(t=null),{type:2,steps:e,options:t}}function a(e){return{type:6,styles:e,offset:null}}function s(e,t,n){return{type:0,name:e,styles:t,options:n}}function u(e){return{type:5,steps:e}}function c(e,t,n){return void 0===n&&(n=null),{type:1,expr:e,animation:t,options:n}}function d(e,t){return void 0===t&&(t=null),{type:8,animation:e,options:t}}function p(e){return void 0===e&&(e=null),{type:9,options:e}}function f(e,t){return void 0===t&&(t=null),{type:10,animation:e,options:t}}function h(e,t,n){return void 0===n&&(n=null),{type:11,selector:e,animation:t,options:n}}function m(e,t){return{type:12,timings:e,animation:t}}function g(e){Promise.resolve(null).then(e)}Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"AnimationBuilder",function(){return y}),n.d(t,"AnimationFactory",function(){return v}),n.d(t,"AUTO_STYLE",function(){return b}),n.d(t,"animate",function(){return i}),n.d(t,"animateChild",function(){return p}),n.d(t,"animation",function(){return d}),n.d(t,"group",function(){return o}),n.d(t,"keyframes",function(){return u}),n.d(t,"query",function(){return h}),n.d(t,"sequence",function(){return l}),n.d(t,"stagger",function(){return m}),n.d(t,"state",function(){return s}),n.d(t,"style",function(){return a}),n.d(t,"transition",function(){return c}),n.d(t,"trigger",function(){return r}),n.d(t,"useAnimation",function(){return f}),n.d(t,"NoopAnimationPlayer",function(){return _}),n.d(t,"\u0275AnimationGroupPlayer",function(){return w}),n.d(t,"\u0275PRE_STYLE",function(){return x});var y=function(){},v=function(){},b="*",_=function(){function e(){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this.parentPlayer=null,this.totalTime=0}return e.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(e){return e()}),this._onDoneFns=[])},e.prototype.onStart=function(e){this._onStartFns.push(e)},e.prototype.onDone=function(e){this._onDoneFns.push(e)},e.prototype.onDestroy=function(e){this._onDestroyFns.push(e)},e.prototype.hasStarted=function(){return this._started},e.prototype.init=function(){},e.prototype.play=function(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0},e.prototype.triggerMicrotask=function(){var e=this;g(function(){return e._onFinish()})},e.prototype._onStart=function(){this._onStartFns.forEach(function(e){return e()}),this._onStartFns=[]},e.prototype.pause=function(){},e.prototype.restart=function(){},e.prototype.finish=function(){this._onFinish()},e.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(function(e){return e()}),this._onDestroyFns=[])},e.prototype.reset=function(){},e.prototype.setPosition=function(e){},e.prototype.getPosition=function(){return 0},e.prototype.triggerCallback=function(e){var t="start"==e?this._onStartFns:this._onDoneFns;t.forEach(function(e){return e()}),t.length=0},e}(),w=function(){function e(e){var t=this;this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=e;var n=0,r=0,i=0,o=this.players.length;0==o?g(function(){return t._onFinish()}):this.players.forEach(function(e){e.onDone(function(){++n>=o&&t._onFinish()}),e.onDestroy(function(){++r>=o&&t._onDestroy()}),e.onStart(function(){++i>=o&&t._onStart()})}),this.totalTime=this.players.reduce(function(e,t){return Math.max(e,t.totalTime)},0)}return e.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(e){return e()}),this._onDoneFns=[])},e.prototype.init=function(){this.players.forEach(function(e){return e.init()})},e.prototype.onStart=function(e){this._onStartFns.push(e)},e.prototype._onStart=function(){this.hasStarted()||(this._onStartFns.forEach(function(e){return e()}),this._onStartFns=[],this._started=!0)},e.prototype.onDone=function(e){this._onDoneFns.push(e)},e.prototype.onDestroy=function(e){this._onDestroyFns.push(e)},e.prototype.hasStarted=function(){return this._started},e.prototype.play=function(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(function(e){return e.play()})},e.prototype.pause=function(){this.players.forEach(function(e){return e.pause()})},e.prototype.restart=function(){this.players.forEach(function(e){return e.restart()})},e.prototype.finish=function(){this._onFinish(),this.players.forEach(function(e){return e.finish()})},e.prototype.destroy=function(){this._onDestroy()},e.prototype._onDestroy=function(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(function(e){return e.destroy()}),this._onDestroyFns.forEach(function(e){return e()}),this._onDestroyFns=[])},e.prototype.reset=function(){this.players.forEach(function(e){return e.reset()}),this._destroyed=!1,this._finished=!1,this._started=!1},e.prototype.setPosition=function(e){var t=e*this.totalTime;this.players.forEach(function(e){var n=e.totalTime?Math.min(1,t/e.totalTime):1;e.setPosition(n)})},e.prototype.getPosition=function(){var e=0;return this.players.forEach(function(t){var n=t.getPosition();e=Math.min(n,e)}),e},e.prototype.beforeDestroy=function(){this.players.forEach(function(e){e.beforeDestroy&&e.beforeDestroy()})},e.prototype.triggerCallback=function(e){var t="start"==e?this._onStartFns:this._onDoneFns;t.forEach(function(e){return e()}),t.length=0},e}(),x="!"},fC8q:function(e,t,n){var r=n("dXJ/"),i=n("3r0D")("iterator"),o=n("lexG");e.exports=n("b4gG").getIteratorMethod=function(e){if(void 0!=e)return e[i]||e["@@iterator"]||o[r(e)]}},fHxy:function(e,t,n){var r=n("gBtn"),i=n("+pQw"),o=r.key,l=r.set;r.exp({defineMetadata:function(e,t,n,r){l(e,t,i(n),o(r))}})},fRUx:function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},gBtn:function(e,t,n){var r=n("ZI9W"),i=n("CDXM"),o=n("Iclu")("metadata"),l=o.store||(o.store=new(n("QZhw"))),a=function(e,t,n){var i=l.get(e);if(!i){if(!n)return;l.set(e,i=new r)}var o=i.get(t);if(!o){if(!n)return;i.set(t,o=new r)}return o};e.exports={store:l,map:a,has:function(e,t,n){var r=a(t,n,!1);return void 0!==r&&r.has(e)},get:function(e,t,n){var r=a(t,n,!1);return void 0===r?void 0:r.get(e)},set:function(e,t,n,r){a(n,r,!0).set(e,t)},keys:function(e,t){var n=a(e,t,!1),r=[];return n&&n.forEach(function(e,t){r.push(t)}),r},key:function(e){return void 0===e||"symbol"==typeof e?e:String(e)},exp:function(e){i(i.S,"Reflect",e)}}},gNkH:function(e,t,n){e.exports=!n("V+0c")&&!n("umMR")(function(){return 7!=Object.defineProperty(n("BQSv")("div"),"a",{get:function(){return 7}}).a})},grVA:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r={closed:!0,next:function(e){},error:function(e){throw e},complete:function(){}}},gxdV:function(e,t,n){var r=n("tose"),i=n("piOq");e.exports=n("V+0c")?function(e,t,n){return r.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},gy58:function(e,t,n){"use strict";t.a=function(e){return Object(r.a)(e)(this)};var r=n("5O0w")},jaVc:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("6Xbx"),i=function(e){function t(t,n){e.call(this),this.subject=t,this.subscriber=n,this.closed=!1}return Object(r.__extends)(t,e),t.prototype.unsubscribe=function(){if(!this.closed){this.closed=!0;var e=this.subject,t=e.observers;if(this.subject=null,t&&0!==t.length&&!e.isStopped&&!e.closed){var n=t.indexOf(this.subscriber);-1!==n&&t.splice(n,1)}}},t}(n("qLnt").a)},kQVV:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(e){return e&&"number"==typeof e.length}},lI6h:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("6Xbx"),i=function(e){function t(){e.apply(this,arguments)}return Object(r.__extends)(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.destination.next(t)},t.prototype.notifyError=function(e,t){this.destination.error(e)},t.prototype.notifyComplete=function(e){this.destination.complete()},t}(n("E9/g").a)},lexG:function(e,t){e.exports={}},lfBE:function(e,t,n){var r=n("ptrv"),i=n("gxdV"),o=n("rMsi"),l=n("c09d")("src"),a=Function.toString,s=(""+a).split("toString");n("b4gG").inspectSource=function(e){return a.call(e)},(e.exports=function(e,t,n,a){var u="function"==typeof n;u&&(o(n,"name")||i(n,"name",t)),e[t]!==n&&(u&&(o(n,l)||i(n,l,e[t]?""+e[t]:s.join(String(t)))),e===r?e[t]=n:a?e[t]?e[t]=n:i(e,t,n):(delete e[t],i(e,t,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[l]||a.call(this)})},lzDK:function(e,t){t.f=Object.getOwnPropertySymbols},mHG6:function(e,t,n){"use strict";t.a=function(e){return e&&"function"!=typeof e.subscribe&&"function"==typeof e.then}},mz3w:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(e){var t,r=n("xIGM").a.Symbol;return"function"==typeof r?r.observable?t=r.observable:(t=r("observable"),r.observable=t):t="@@observable",t}()},ncNB:function(e,t,n){var r=n("gBtn"),i=n("+pQw"),o=r.get,l=r.key;r.exp({getOwnMetadata:function(e,t){return o(e,i(t),arguments.length<3?void 0:l(arguments[2]))}})},oiK7:function(e,t,n){e.exports=function(){"use strict";function e(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}function t(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function n(e,n){return t(e).appendChild(n)}function r(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n),r&&(i.style.cssText=r),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function i(e,t,n,i){var o=r(e,t,n,i);return o.setAttribute("role","presentation"),o}function o(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function l(){var e;try{e=document.activeElement}catch(t){e=document.body||null}for(;e&&e.shadowRoot&&e.shadowRoot.activeElement;)e=e.shadowRoot.activeElement;return e}function a(t,n){var r=t.className;e(n).test(r)||(t.className+=(r?" ":"")+n)}function s(t,n){for(var r=t.split(" "),i=0;i<r.length;i++)r[i]&&!e(r[i]).test(n)&&(n+=" "+r[i]);return n}function u(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function c(e,t,n){t||(t={});for(var r in e)!e.hasOwnProperty(r)||!1===n&&t.hasOwnProperty(r)||(t[r]=e[r]);return t}function d(e,t,n,r,i){null==t&&-1==(t=e.search(/[^\s\u00a0]/))&&(t=e.length);for(var o=r||0,l=i||0;;){var a=e.indexOf("\t",o);if(a<0||a>=t)return l+(t-o);l+=a-o,l+=n-l%n,o=a+1}}function p(e,t){for(var n=0;n<e.length;++n)if(e[n]==t)return n;return-1}function f(e,t,n){for(var r=0,i=0;;){var o=e.indexOf("\t",r);-1==o&&(o=e.length);var l=o-r;if(o==e.length||i+l>=t)return r+Math.min(l,t-i);if(i+=o-r,i+=n-i%n,r=o+1,i>=t)return r}}function h(e){for(;go.length<=e;)go.push(m(go)+" ");return go[e]}function m(e){return e[e.length-1]}function g(e,t){for(var n=[],r=0;r<e.length;r++)n[r]=t(e[r],r);return n}function y(){}function v(e,t){var n;return Object.create?n=Object.create(e):(y.prototype=e,n=new y),t&&c(t,n),n}function b(e){return/\w/.test(e)||e>"\x80"&&(e.toUpperCase()!=e.toLowerCase()||yo.test(e))}function _(e,t){return t?!!(t.source.indexOf("\\w")>-1&&b(e))||t.test(e):b(e)}function w(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}function x(e){return e.charCodeAt(0)>=768&&vo.test(e)}function C(e,t,n){for(;(n<0?t>0:t<e.length)&&x(e.charAt(t));)t+=n;return t}function E(e,t,n){for(var r=t>n?-1:1;;){if(t==n)return t;var i=(t+n)/2,o=r<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:n;e(o)?n=o:t=o+r}}function S(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],o=i.chunkSize();if(t<o){n=i;break}t-=o}return n.lines[t]}function O(e,t,n){var r=[],i=t.line;return e.iter(t.line,n.line+1,function(e){var o=e.text;i==n.line&&(o=o.slice(0,n.ch)),i==t.line&&(o=o.slice(t.ch)),r.push(o),++i}),r}function T(e,t,n){var r=[];return e.iter(t,n,function(e){r.push(e.text)}),r}function k(e,t){var n=t-e.height;if(n)for(var r=e;r;r=r.parent)r.height+=n}function D(e){if(null==e.parent)return null;for(var t=e.parent,n=p(t.lines,e),r=t.parent;r;t=r,r=r.parent)for(var i=0;r.children[i]!=t;++i)n+=r.children[i].chunkSize();return n+t.first}function I(e,t){var n=e.first;e:do{for(var r=0;r<e.children.length;++r){var i=e.children[r],o=i.height;if(t<o){e=i;continue e}t-=o,n+=i.chunkSize()}return n}while(!e.lines);for(var l=0;l<e.lines.length;++l){var a=e.lines[l].height;if(t<a)break;t-=a}return n+l}function R(e,t){return t>=e.first&&t<e.first+e.size}function M(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function P(e,t,n){if(void 0===n&&(n=null),!(this instanceof P))return new P(e,t,n);this.line=e,this.ch=t,this.sticky=n}function N(e,t){return e.line-t.line||e.ch-t.ch}function A(e,t){return e.sticky==t.sticky&&0==N(e,t)}function L(e){return P(e.line,e.ch)}function F(e,t){return N(e,t)<0?t:e}function j(e,t){return N(e,t)<0?e:t}function V(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function z(e,t){if(t.line<e.first)return P(e.first,0);var n=e.first+e.size-1;return t.line>n?P(n,S(e,n).text.length):function(e,t){var n=e.ch;return null==n||n>t?P(e.line,t):n<0?P(e.line,0):e}(t,S(e,t.line).text.length)}function B(e,t){for(var n=[],r=0;r<t.length;r++)n[r]=z(e,t[r]);return n}function H(e,t,n){this.marker=e,this.from=t,this.to=n}function W(e,t){if(e)for(var n=0;n<e.length;++n){var r=e[n];if(r.marker==t)return r}}function q(e,t){for(var n,r=0;r<e.length;++r)e[r]!=t&&(n||(n=[])).push(e[r]);return n}function U(e,t){if(t.full)return null;var n=R(e,t.from.line)&&S(e,t.from.line).markedSpans,r=R(e,t.to.line)&&S(e,t.to.line).markedSpans;if(!n&&!r)return null;var i=t.from.ch,o=t.to.ch,l=0==N(t.from,t.to),a=function(e,t,n){var r;if(e)for(var i=0;i<e.length;++i){var o=e[i],l=o.marker;null!=o.from&&!(l.inclusiveLeft?o.from<=t:o.from<t)&&(o.from!=t||"bookmark"!=l.type||n&&o.marker.insertLeft)||(r||(r=[])).push(new H(l,o.from,null==o.to||(l.inclusiveRight?o.to>=t:o.to>t)?null:o.to))}return r}(n,i,l),s=function(e,t,n){var r;if(e)for(var i=0;i<e.length;++i){var o=e[i],l=o.marker;(null==o.to||(l.inclusiveRight?o.to>=t:o.to>t)||o.from==t&&"bookmark"==l.type&&(!n||o.marker.insertLeft))&&(r||(r=[])).push(new H(l,null==o.from||(l.inclusiveLeft?o.from<=t:o.from<t)?null:o.from-t,null==o.to?null:o.to-t))}return r}(r,o,l),u=1==t.text.length,c=m(t.text).length+(u?i:0);if(a)for(var d=0;d<a.length;++d){var p=a[d];if(null==p.to){var f=W(s,p.marker);f?u&&(p.to=null==f.to?null:f.to+c):p.to=i}}if(s)for(var h=0;h<s.length;++h){var g=s[h];null!=g.to&&(g.to+=c),null==g.from?W(a,g.marker)||(g.from=c,u&&(a||(a=[])).push(g)):(g.from+=c,u&&(a||(a=[])).push(g))}a&&(a=G(a)),s&&s!=a&&(s=G(s));var y=[a];if(!u){var v,b=t.text.length-2;if(b>0&&a)for(var _=0;_<a.length;++_)null==a[_].to&&(v||(v=[])).push(new H(a[_].marker,null,null));for(var w=0;w<b;++w)y.push(v);y.push(s)}return y}function G(e){for(var t=0;t<e.length;++t){var n=e[t];null!=n.from&&n.from==n.to&&!1!==n.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function K(e){var t=e.markedSpans;if(t){for(var n=0;n<t.length;++n)t[n].marker.detachLine(e);e.markedSpans=null}}function $(e,t){if(t){for(var n=0;n<t.length;++n)t[n].marker.attachLine(e);e.markedSpans=t}}function Z(e){return e.inclusiveLeft?-1:0}function Q(e){return e.inclusiveRight?1:0}function Y(e,t){var n=e.lines.length-t.lines.length;if(0!=n)return n;var r=e.find(),i=t.find(),o=N(r.from,i.from)||Z(e)-Z(t);if(o)return-o;return N(r.to,i.to)||Q(e)-Q(t)||t.id-e.id}function X(e,t){var n,r=_o&&e.markedSpans;if(r)for(var i=void 0,o=0;o<r.length;++o)(i=r[o]).marker.collapsed&&null==(t?i.from:i.to)&&(!n||Y(n,i.marker)<0)&&(n=i.marker);return n}function J(e){return X(e,!0)}function ee(e){return X(e,!1)}function te(e,t,n,r,i){var o=S(e,t),l=_o&&o.markedSpans;if(l)for(var a=0;a<l.length;++a){var s=l[a];if(s.marker.collapsed){var u=s.marker.find(0),c=N(u.from,n)||Z(s.marker)-Z(i),d=N(u.to,r)||Q(s.marker)-Q(i);if(!(c>=0&&d<=0||c<=0&&d>=0)&&(c<=0&&(s.marker.inclusiveRight&&i.inclusiveLeft?N(u.to,n)>=0:N(u.to,n)>0)||c>=0&&(s.marker.inclusiveRight&&i.inclusiveLeft?N(u.from,r)<=0:N(u.from,r)<0)))return!0}}}function ne(e){for(var t;t=J(e);)e=t.find(-1,!0).line;return e}function re(e,t){var n=S(e,t),r=ne(n);return n==r?t:D(r)}function ie(e,t){if(t>e.lastLine())return t;var n,r=S(e,t);if(!oe(e,r))return t;for(;n=ee(r);)r=n.find(1,!0).line;return D(r)+1}function oe(e,t){var n=_o&&t.markedSpans;if(n)for(var r=void 0,i=0;i<n.length;++i)if((r=n[i]).marker.collapsed){if(null==r.from)return!0;if(!r.marker.widgetNode&&0==r.from&&r.marker.inclusiveLeft&&le(e,t,r))return!0}}function le(e,t,n){if(null==n.to){var r=n.marker.find(1,!0);return le(e,r.line,W(r.line.markedSpans,n.marker))}if(n.marker.inclusiveRight&&n.to==t.text.length)return!0;for(var i=void 0,o=0;o<t.markedSpans.length;++o)if((i=t.markedSpans[o]).marker.collapsed&&!i.marker.widgetNode&&i.from==n.to&&(null==i.to||i.to!=n.from)&&(i.marker.inclusiveLeft||n.marker.inclusiveRight)&&le(e,t,i))return!0}function ae(e){for(var t=0,n=(e=ne(e)).parent,r=0;r<n.lines.length;++r){var i=n.lines[r];if(i==e)break;t+=i.height}for(var o=n.parent;o;n=o,o=n.parent)for(var l=0;l<o.children.length;++l){var a=o.children[l];if(a==n)break;t+=a.height}return t}function se(e){if(0==e.height)return 0;for(var t,n=e.text.length,r=e;t=J(r);){var i=t.find(0,!0);r=i.from.line,n+=i.from.ch-i.to.ch}for(r=e;t=ee(r);){var o=t.find(0,!0);n-=r.text.length-o.from.ch,n+=(r=o.to.line).text.length-o.to.ch}return n}function ue(e){var t=e.display,n=e.doc;t.maxLine=S(n,n.first),t.maxLineLength=se(t.maxLine),t.maxLineChanged=!0,n.iter(function(e){var n=se(e);n>t.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)})}function ce(e,t,n){var r;wo=null;for(var i=0;i<e.length;++i){var o=e[i];if(o.from<t&&o.to>t)return i;o.to==t&&(o.from!=o.to&&"before"==n?r=i:wo=i),o.from==t&&(o.from!=o.to&&"before"!=n?r=i:wo=i)}return null!=r?r:wo}function de(e,t){var n=e.order;return null==n&&(n=e.order=xo(e.text,t)),n}function pe(e,t){return e._handlers&&e._handlers[t]||Co}function fe(e,t,n){if(e.removeEventListener)e.removeEventListener(t,n,!1);else if(e.detachEvent)e.detachEvent("on"+t,n);else{var r=e._handlers,i=r&&r[t];if(i){var o=p(i,n);o>-1&&(r[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function he(e,t){var n=pe(e,t);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),i=0;i<n.length;++i)n[i].apply(null,r)}function me(e,t,n){return"string"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),he(e,n||t.type,e,t),we(t)||t.codemirrorIgnore}function ge(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var n=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),r=0;r<t.length;++r)-1==p(n,t[r])&&n.push(t[r])}function ye(e,t){return pe(e,t).length>0}function ve(e){e.prototype.on=function(e,t){Eo(this,e,t)},e.prototype.off=function(e,t){fe(this,e,t)}}function be(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function _e(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function we(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function xe(e){be(e),_e(e)}function Ce(e){return e.target||e.srcElement}function Ee(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),Xi&&e.ctrlKey&&1==t&&(t=3),t}function Se(e){if(null==so){var t=r("span","\u200b");n(e,r("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(so=t.offsetWidth<=1&&t.offsetHeight>2&&!(zi&&Bi<8))}var i=so?r("span","\u200b"):r("span","\xa0",null,"display: inline-block; width: 1px; margin-right: -1px");return i.setAttribute("cm-text",""),i}function Oe(e){if(null!=uo)return uo;var r=n(e,document.createTextNode("A\u062eA")),i=no(r,0,1).getBoundingClientRect(),o=no(r,1,2).getBoundingClientRect();return t(e),!(!i||i.left==i.right)&&(uo=o.right-i.right<3)}function Te(e){if("string"==typeof e&&Ro.hasOwnProperty(e))e=Ro[e];else if(e&&"string"==typeof e.name&&Ro.hasOwnProperty(e.name)){var t=Ro[e.name];"string"==typeof t&&(t={name:t}),(e=v(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Te("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Te("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function ke(e,t){t=Te(t);var n=Io[t.name];if(!n)return ke(e,"text/plain");var r=n(e,t);if(Mo.hasOwnProperty(t.name)){var i=Mo[t.name];for(var o in i)i.hasOwnProperty(o)&&(r.hasOwnProperty(o)&&(r["_"+o]=r[o]),r[o]=i[o])}if(r.name=t.name,t.helperType&&(r.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)r[l]=t.modeProps[l];return r}function De(e,t){c(t,Mo.hasOwnProperty(e)?Mo[e]:Mo[e]={})}function Ie(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n={};for(var r in t){var i=t[r];i instanceof Array&&(i=i.concat([])),n[r]=i}return n}function Re(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t=n.state,e=n.mode;return n||{mode:e,state:t}}function Me(e,t,n){return!e.startState||e.startState(t,n)}function Pe(e,t,n,r){var i=[e.state.modeGen],o={};Be(e,t.text,e.doc.mode,n,function(e,t){return i.push(e,t)},o,r);for(var l=n.state,a=function(r){n.baseTokens=i;var a=e.state.overlays[r],s=1,u=0;n.state=!0,Be(e,t.text,a.mode,n,function(e,t){for(var n=s;u<e;){var r=i[s];r>e&&i.splice(s,1,e,i[s+1],r),s+=2,u=Math.min(e,r)}if(t)if(a.opaque)i.splice(n,s-n,e,"overlay "+t),s=n+2;else for(;n<s;n+=2){var o=i[n+1];i[n+1]=(o?o+" ":"")+"overlay "+t}},o),n.state=l,n.baseTokens=null,n.baseTokenPos=1},s=0;s<e.state.overlays.length;++s)a(s);return{styles:i,classes:o.bgClass||o.textClass?o:null}}function Ne(e,t,n){if(!t.styles||t.styles[0]!=e.state.modeGen){var r=Ae(e,D(t)),i=t.text.length>e.options.maxHighlightLength&&Ie(e.doc.mode,r.state),o=Pe(e,t,r);i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function Ae(e,t,n){var r=e.doc,i=e.display;if(!r.mode.startState)return new Ao(r,!0,t);var o=function(e,n,r){for(var i,o,l=e.doc,a=r?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>a;--s){if(s<=l.first)return l.first;var u=S(l,s-1),c=u.stateAfter;if(c&&(!r||s+(c instanceof No?c.lookAhead:0)<=l.modeFrontier))return s;var p=d(u.text,null,e.options.tabSize);(null==o||i>p)&&(o=s-1,i=p)}return o}(e,0,n),l=o>r.first&&S(r,o-1).stateAfter,a=l?Ao.fromSaved(r,l,o):new Ao(r,Me(r.mode),o);return r.iter(o,t,function(n){Le(e,n.text,a);var r=a.line;n.stateAfter=r==t-1||r%5==0||r>=i.viewFrom&&r<i.viewTo?a.save():null,a.nextLine()}),n&&(r.modeFrontier=a.line),a}function Le(e,t,n,r){var i=e.doc.mode,o=new Po(t,e.options.tabSize,n);for(o.start=o.pos=r||0,""==t&&Fe(i,n.state);!o.eol();)je(i,o,n.state),o.start=o.pos}function Fe(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var n=Re(e,t);return n.mode.blankLine?n.mode.blankLine(n.state):void 0}}function je(e,t,n,r){for(var i=0;i<10;i++){r&&(r[0]=Re(e,n).mode);var o=e.token(t,n);if(t.pos>t.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}function Ve(e,t,n,r){var i,o,l=e.doc,a=l.mode,s=S(l,(t=z(l,t)).line),u=Ae(e,t.line,n),c=new Po(s.text,e.options.tabSize,u);for(r&&(o=[]);(r||c.pos<t.ch)&&!c.eol();)c.start=c.pos,i=je(a,c,u.state),r&&o.push(new Lo(c,i,Ie(l.mode,u.state)));return r?o:new Lo(c,i,u.state)}function ze(e,t){if(e)for(;;){var n=e.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!n)break;e=e.slice(0,n.index)+e.slice(n.index+n[0].length);var r=n[1]?"bgClass":"textClass";null==t[r]?t[r]=n[2]:new RegExp("(?:^|s)"+n[2]+"(?:$|s)").test(t[r])||(t[r]+=" "+n[2])}return e}function Be(e,t,n,r,i,o,l){var a=n.flattenSpans;null==a&&(a=e.options.flattenSpans);var s,u=0,c=null,d=new Po(t,e.options.tabSize,r),p=e.options.addModeClass&&[null];for(""==t&&ze(Fe(n,r.state),o);!d.eol();){if(d.pos>e.options.maxHighlightLength?(a=!1,l&&Le(e,t,r,d.pos),d.pos=t.length,s=null):s=ze(je(n,d,r.state,p),o),p){var f=p[0].name;f&&(s="m-"+(s?f+" "+s:f))}if(!a||c!=s){for(;u<d.start;)i(u=Math.min(d.start,u+5e3),c);c=s}d.start=d.pos}for(;u<d.pos;){var h=Math.min(d.pos,u+5e3);i(h,c),u=h}}function He(e){e.parent=null,K(e)}function We(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass?zo:Vo;return n[e]||(n[e]=e.replace(/\S+/g,"cm-$&"))}function qe(e,t){var n=i("span",null,null,Hi?"padding-right: .1px":null),r={pre:i("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:(zi||Hi)&&e.getOption("lineWrapping")};t.measure={};for(var o=0;o<=(t.rest?t.rest.length:0);o++){var l=o?t.rest[o-1]:t.line,a=void 0;r.pos=0,r.addToken=Ge,Oe(e.display.measure)&&(a=de(l,e.doc.direction))&&(r.addToken=function(e,t){return function(n,r,i,o,l,a,s){i=i?i+" cm-force-border":"cm-force-border";for(var u=n.pos,c=u+r.length;;){for(var d=void 0,p=0;p<t.length&&!((d=t[p]).to>u&&d.from<=u);p++);if(d.to>=c)return e(n,r,i,o,l,a,s);e(n,r.slice(0,d.to-u),i,o,null,a,s),o=null,r=r.slice(d.to-u),u=d.to}}}(r.addToken,a)),r.map=[],function(e,t,n){var r=e.markedSpans,i=e.text,o=0;if(r)for(var l,a,s,u,c,d,p,f=i.length,h=0,m=1,g="",y=0;;){if(y==h){s=u=c=d=a="",p=null,y=1/0;for(var v=[],b=void 0,_=0;_<r.length;++_){var w=r[_],x=w.marker;"bookmark"==x.type&&w.from==h&&x.widgetNode?v.push(x):w.from<=h&&(null==w.to||w.to>h||x.collapsed&&w.to==h&&w.from==h)?(null!=w.to&&w.to!=h&&y>w.to&&(y=w.to,u=""),x.className&&(s+=" "+x.className),x.css&&(a=(a?a+";":"")+x.css),x.startStyle&&w.from==h&&(c+=" "+x.startStyle),x.endStyle&&w.to==y&&(b||(b=[])).push(x.endStyle,w.to),x.title&&!d&&(d=x.title),x.collapsed&&(!p||Y(p.marker,x)<0)&&(p=w)):w.from>h&&y>w.from&&(y=w.from)}if(b)for(var C=0;C<b.length;C+=2)b[C+1]==y&&(u+=" "+b[C]);if(!p||p.from==h)for(var E=0;E<v.length;++E)Ke(t,0,v[E]);if(p&&(p.from||0)==h){if(Ke(t,(null==p.to?f+1:p.to)-h,p.marker,null==p.from),null==p.to)return;p.to==h&&(p=!1)}}if(h>=f)break;for(var S=Math.min(f,y);;){if(g){var O=h+g.length;if(!p){var T=O>S?g.slice(0,S-h):g;t.addToken(t,T,l?l+s:s,c,h+T.length==y?u:"",d,a)}if(O>=S){g=g.slice(S-h),h=S;break}h=O,c=""}g=i.slice(o,o=n[m++]),l=We(n[m++],t.cm.options)}}else for(var k=1;k<n.length;k+=2)t.addToken(t,i.slice(o,o=n[k]),We(n[k+1],t.cm.options))}(l,r,Ne(e,l,t!=e.display.externalMeasured&&D(l))),l.styleClasses&&(l.styleClasses.bgClass&&(r.bgClass=s(l.styleClasses.bgClass,r.bgClass||"")),l.styleClasses.textClass&&(r.textClass=s(l.styleClasses.textClass,r.textClass||""))),0==r.map.length&&r.map.push(0,0,r.content.appendChild(Se(e.display.measure))),0==o?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(Hi){var u=r.content.lastChild;(/\bcm-tab\b/.test(u.className)||u.querySelector&&u.querySelector(".cm-tab"))&&(r.content.className="cm-tab-wrap-hack")}return he(e,"renderLine",e,t.line,r.pre),r.pre.className&&(r.textClass=s(r.pre.className,r.textClass||"")),r}function Ue(e){var t=r("span","\u2022","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Ge(e,t,n,i,o,l,a){if(t){var s,u=e.splitSpaces?function(e,t){if(e.length>1&&!/  /.test(e))return e;for(var n=t,r="",i=0;i<e.length;i++){var o=e.charAt(i);" "!=o||!n||i!=e.length-1&&32!=e.charCodeAt(i+1)||(o="\xa0"),r+=o,n=" "==o}return r}(t,e.trailingSpace):t,c=e.cm.state.specialChars,d=!1;if(c.test(t)){s=document.createDocumentFragment();for(var p=0;;){c.lastIndex=p;var f=c.exec(t),m=f?f.index-p:t.length-p;if(m){var g=document.createTextNode(u.slice(p,p+m));s.appendChild(zi&&Bi<9?r("span",[g]):g),e.map.push(e.pos,e.pos+m,g),e.col+=m,e.pos+=m}if(!f)break;p+=m+1;var y=void 0;if("\t"==f[0]){var v=e.cm.options.tabSize,b=v-e.col%v;(y=s.appendChild(r("span",h(b),"cm-tab"))).setAttribute("role","presentation"),y.setAttribute("cm-text","\t"),e.col+=b}else"\r"==f[0]||"\n"==f[0]?((y=s.appendChild(r("span","\r"==f[0]?"\u240d":"\u2424","cm-invalidchar"))).setAttribute("cm-text",f[0]),e.col+=1):((y=e.cm.options.specialCharPlaceholder(f[0])).setAttribute("cm-text",f[0]),s.appendChild(zi&&Bi<9?r("span",[y]):y),e.col+=1);e.map.push(e.pos,e.pos+1,y),e.pos++}}else e.col+=t.length,s=document.createTextNode(u),e.map.push(e.pos,e.pos+t.length,s),zi&&Bi<9&&(d=!0),e.pos+=t.length;if(e.trailingSpace=32==u.charCodeAt(t.length-1),n||i||o||d||a){var _=n||"";i&&(_+=i),o&&(_+=o);var w=r("span",[s],_,a);return l&&(w.title=l),e.content.appendChild(w)}e.content.appendChild(s)}}function Ke(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",n.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function $e(e,t,n){this.line=t,this.rest=function(e){for(var t,n;t=ee(e);)e=t.find(1,!0).line,(n||(n=[])).push(e);return n}(t),this.size=this.rest?D(m(this.rest))-n+1:1,this.node=this.text=null,this.hidden=oe(e,t)}function Ze(e,t,n){for(var r,i=[],o=t;o<n;o=r){var l=new $e(e.doc,S(e.doc,o),o);r=o+l.size,i.push(l)}return i}function Qe(e,t){var n=pe(e,t);if(n.length){var r,i=Array.prototype.slice.call(arguments,2);Bo?r=Bo.delayedCallbacks:Ho?r=Ho:(r=Ho=[],setTimeout(Ye,0));for(var o=function(e){r.push(function(){return n[e].apply(null,i)})},l=0;l<n.length;++l)o(l)}}function Ye(){var e=Ho;Ho=null;for(var t=0;t<e.length;++t)e[t]()}function Xe(e,t,n,r){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];"text"==o?function(e,t){var n=t.text.className,r=et(e,t);t.text==t.node&&(t.node=r.pre),t.text.parentNode.replaceChild(r.pre,t.text),t.text=r.pre,r.bgClass!=t.bgClass||r.textClass!=t.textClass?(t.bgClass=r.bgClass,t.textClass=r.textClass,tt(e,t)):n&&(t.text.className=n)}(e,t):"gutter"==o?nt(e,t,n,r):"class"==o?tt(e,t):"widget"==o&&function(e,t,n){t.alignable&&(t.alignable=null);for(var r=t.node.firstChild,i=void 0;r;r=i)i=r.nextSibling,"CodeMirror-linewidget"==r.className&&t.node.removeChild(r);it(e,t,n)}(e,t,r)}t.changes=null}function Je(e){return e.node==e.text&&(e.node=r("div",null,null,"position: relative"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),zi&&Bi<8&&(e.node.style.zIndex=2)),e.node}function et(e,t){var n=e.display.externalMeasured;return n&&n.line==t.line?(e.display.externalMeasured=null,t.measure=n.measure,n.built):qe(e,t)}function tt(e,t){!function(e,t){var n=t.bgClass?t.bgClass+" "+(t.line.bgClass||""):t.line.bgClass;if(n&&(n+=" CodeMirror-linebackground"),t.background)n?t.background.className=n:(t.background.parentNode.removeChild(t.background),t.background=null);else if(n){var i=Je(t);t.background=i.insertBefore(r("div",null,n),i.firstChild),e.display.input.setUneditable(t.background)}}(e,t),t.line.wrapClass?Je(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className=""),t.text.className=(t.textClass?t.textClass+" "+(t.line.textClass||""):t.line.textClass)||""}function nt(e,t,n,i){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var o=Je(t);t.gutterBackground=r("div",null,"CodeMirror-gutter-background "+t.line.gutterClass,"left: "+(e.options.fixedGutter?i.fixedPos:-i.gutterTotalWidth)+"px; width: "+i.gutterTotalWidth+"px"),e.display.input.setUneditable(t.gutterBackground),o.insertBefore(t.gutterBackground,t.text)}var l=t.line.gutterMarkers;if(e.options.lineNumbers||l){var a=Je(t),s=t.gutter=r("div",null,"CodeMirror-gutter-wrapper","left: "+(e.options.fixedGutter?i.fixedPos:-i.gutterTotalWidth)+"px");if(e.display.input.setUneditable(s),a.insertBefore(s,t.text),t.line.gutterClass&&(s.className+=" "+t.line.gutterClass),!e.options.lineNumbers||l&&l["CodeMirror-linenumbers"]||(t.lineNumber=s.appendChild(r("div",M(e.options,n),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+i.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+e.display.lineNumInnerWidth+"px"))),l)for(var u=0;u<e.options.gutters.length;++u){var c=e.options.gutters[u],d=l.hasOwnProperty(c)&&l[c];d&&s.appendChild(r("div",[d],"CodeMirror-gutter-elt","left: "+i.gutterLeft[c]+"px; width: "+i.gutterWidth[c]+"px"))}}}function rt(e,t,n,r){var i=et(e,t);return t.text=t.node=i.pre,i.bgClass&&(t.bgClass=i.bgClass),i.textClass&&(t.textClass=i.textClass),tt(e,t),nt(e,t,n,r),it(e,t,r),t.node}function it(e,t,n){if(ot(e,t.line,t,n,!0),t.rest)for(var r=0;r<t.rest.length;r++)ot(e,t.rest[r],t,n,!1)}function ot(e,t,n,i,o){if(t.widgets)for(var l=Je(n),a=0,s=t.widgets;a<s.length;++a){var u=s[a],c=r("div",[u.node],"CodeMirror-linewidget");u.handleMouseEvents||c.setAttribute("cm-ignore-events","true"),function(e,t,r,i){if(e.noHScroll){(n.alignable||(n.alignable=[])).push(t);var o=i.wrapperWidth;t.style.left=i.fixedPos+"px",e.coverGutter||(o-=i.gutterTotalWidth,t.style.paddingLeft=i.gutterTotalWidth+"px"),t.style.width=o+"px"}e.coverGutter&&(t.style.zIndex=5,t.style.position="relative",e.noHScroll||(t.style.marginLeft=-i.gutterTotalWidth+"px"))}(u,c,0,i),e.display.input.setUneditable(c),o&&u.above?l.insertBefore(c,n.gutter||n.text):l.appendChild(c),Qe(u,"redraw")}}function lt(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!o(document.body,e.node)){var i="position: relative;";e.coverGutter&&(i+="margin-left: -"+t.display.gutters.offsetWidth+"px;"),e.noHScroll&&(i+="width: "+t.display.wrapper.clientWidth+"px;"),n(t.display.measure,r("div",[e.node],null,i))}return e.height=e.node.parentNode.offsetHeight}function at(e,t){for(var n=Ce(t);n!=e.wrapper;n=n.parentNode)if(!n||1==n.nodeType&&"true"==n.getAttribute("cm-ignore-events")||n.parentNode==e.sizer&&n!=e.mover)return!0}function st(e){return e.lineSpace.offsetTop}function ut(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function ct(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=n(e.measure,r("pre","x")),i=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,o={left:parseInt(i.paddingLeft),right:parseInt(i.paddingRight)};return isNaN(o.left)||isNaN(o.right)||(e.cachedPaddingH=o),o}function dt(e){return co-e.display.nativeBarWidth}function pt(e){return e.display.scroller.clientWidth-dt(e)-e.display.barWidth}function ft(e){return e.display.scroller.clientHeight-dt(e)-e.display.barHeight}function ht(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var r=0;r<e.rest.length;r++)if(e.rest[r]==t)return{map:e.measure.maps[r],cache:e.measure.caches[r]};for(var i=0;i<e.rest.length;i++)if(D(e.rest[i])>n)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function mt(e,t,n,r){return vt(e,yt(e,t),n,r)}function gt(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[Wt(e,t)];var n=e.display.externalMeasured;return n&&t>=n.lineN&&t<n.lineN+n.size?n:void 0}function yt(e,t){var r=D(t),i=gt(e,r);i&&!i.text?i=null:i&&i.changes&&(Xe(e,i,r,jt(e)),e.curOp.forceUpdate=!0),i||(i=function(e,t){var r=D(t=ne(t)),i=e.display.externalMeasured=new $e(e.doc,t,r);i.lineN=r;var o=i.built=qe(e,i);return i.text=o.pre,n(e.display.lineMeasure,o.pre),i}(e,t));var o=ht(i,t,r);return{line:t,view:i,rect:null,map:o.map,cache:o.cache,before:o.before,hasHeights:!1}}function vt(e,t,i,o,l){t.before&&(i=-1);var a,s=i+(o||"");return t.cache.hasOwnProperty(s)?a=t.cache[s]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(function(t,n,r){var i=e.options.lineWrapping,o=i&&pt(e);if(!n.measure.heights||i&&n.measure.width!=o){var l=n.measure.heights=[];if(i){n.measure.width=o;for(var a=n.text.firstChild.getClientRects(),s=0;s<a.length-1;s++){var u=a[s],c=a[s+1];Math.abs(u.bottom-c.bottom)>2&&l.push((u.bottom+c.top)/2-r.top)}}l.push(r.bottom-r.top)}}(0,t.view,t.rect),t.hasHeights=!0),(a=function(e,t,o,l){var a,s=bt(t.map,i,l),u=s.node,c=s.start,d=s.end,p=s.collapse;if(3==u.nodeType){for(var f=0;f<4;f++){for(;c&&x(t.line.text.charAt(s.coverStart+c));)--c;for(;s.coverStart+d<s.coverEnd&&x(t.line.text.charAt(s.coverStart+d));)++d;if((a=zi&&Bi<9&&0==c&&d==s.coverEnd-s.coverStart?u.parentNode.getBoundingClientRect():function(e,t){var n=Wo;if("left"==l)for(var r=0;r<e.length&&(n=e[r]).left==n.right;r++);else for(var i=e.length-1;i>=0&&(n=e[i]).left==n.right;i--);return n}(no(u,c,d).getClientRects())).left||a.right||0==c)break;d=c,c-=1,p="right"}zi&&Bi<11&&(a=function(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!function(e){if(null!=Do)return Do;var t=n(e,r("span","x")),i=t.getBoundingClientRect(),o=no(t,0,1).getBoundingClientRect();return Do=Math.abs(i.left-o.left)>1}(e))return t;var i=screen.logicalXDPI/screen.deviceXDPI,o=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*i,right:t.right*i,top:t.top*o,bottom:t.bottom*o}}(e.display.measure,a))}else{c>0&&(p=l="right");var h;a=e.options.lineWrapping&&(h=u.getClientRects()).length>1?h["right"==l?h.length-1:0]:u.getBoundingClientRect()}if(zi&&Bi<9&&!c&&(!a||!a.left&&!a.right)){var m=u.parentNode.getClientRects()[0];a=m?{left:m.left,right:m.left+Ft(e.display),top:m.top,bottom:m.bottom}:Wo}for(var g=a.top-t.rect.top,y=a.bottom-t.rect.top,v=(g+y)/2,b=t.view.measure.heights,_=0;_<b.length-1&&!(v<b[_]);_++);var w={left:("right"==p?a.right:a.left)-t.rect.left,right:("left"==p?a.left:a.right)-t.rect.left,top:_?b[_-1]:0,bottom:b[_]};return a.left||a.right||(w.bogus=!0),e.options.singleCursorHeightPerLine||(w.rtop=g,w.rbottom=y),w}(e,t,0,o)).bogus||(t.cache[s]=a)),{left:a.left,right:a.right,top:l?a.rtop:a.top,bottom:l?a.rbottom:a.bottom}}function bt(e,t,n){for(var r,i,o,l,a,s,u=0;u<e.length;u+=3)if(a=e[u],s=e[u+1],t<a?(i=0,o=1,l="left"):t<s?o=1+(i=t-a):(u==e.length-3||t==s&&e[u+3]>t)&&(i=(o=s-a)-1,t>=s&&(l="right")),null!=i){if(r=e[u+2],a==s&&n==(r.insertLeft?"left":"right")&&(l=n),"left"==n&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)r=e[2+(u-=3)],l="left";if("right"==n&&i==s-a)for(;u<e.length-3&&e[u+3]==e[u+4]&&!e[u+5].insertLeft;)r=e[(u+=3)+2],l="right";break}return{node:r,start:i,end:o,collapse:l,coverStart:a,coverEnd:s}}function _t(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function wt(e){e.display.externalMeasure=null,t(e.display.lineMeasure);for(var n=0;n<e.display.view.length;n++)_t(e.display.view[n])}function xt(e){wt(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function Ct(){return qi&&Qi?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function Et(){return qi&&Qi?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function St(e){var t=0;if(e.widgets)for(var n=0;n<e.widgets.length;++n)e.widgets[n].above&&(t+=lt(e.widgets[n]));return t}function Ot(e,t,n,r,i){if(!i){var o=St(t);n.top+=o,n.bottom+=o}if("line"==r)return n;r||(r="local");var l=ae(t);if("local"==r?l+=st(e.display):l-=e.display.viewOffset,"page"==r||"window"==r){var a=e.display.lineSpace.getBoundingClientRect();l+=a.top+("window"==r?0:Et());var s=a.left+("window"==r?0:Ct());n.left+=s,n.right+=s}return n.top+=l,n.bottom+=l,n}function Tt(e,t,n){if("div"==n)return t;var r=t.left,i=t.top;if("page"==n)r-=Ct(),i-=Et();else if("local"==n||!n){var o=e.display.sizer.getBoundingClientRect();r+=o.left,i+=o.top}var l=e.display.lineSpace.getBoundingClientRect();return{left:r-l.left,top:i-l.top}}function kt(e,t,n,r,i){return r||(r=S(e.doc,t.line)),Ot(e,r,mt(e,r,t.ch,i),n)}function Dt(e,t,n,r,i,o){function l(t,l){var a=vt(e,i,t,l?"right":"left",o);return l?a.left=a.right:a.right=a.left,Ot(e,r,a,n)}function a(e,t,n){return l(n?e-1:e,1==s[t].level!=n)}r=r||S(e.doc,t.line),i||(i=yt(e,r));var s=de(r,e.doc.direction),u=t.ch,c=t.sticky;if(u>=r.text.length?(u=r.text.length,c="before"):u<=0&&(u=0,c="after"),!s)return l("before"==c?u-1:u,"before"==c);var d=ce(s,u,c),p=wo,f=a(u,d,"before"==c);return null!=p&&(f.other=a(u,p,"before"!=c)),f}function It(e,t){var n=0;t=z(e.doc,t),e.options.lineWrapping||(n=Ft(e.display)*t.ch);var r=S(e.doc,t.line),i=ae(r)+st(e.display);return{left:n,right:n,top:i,bottom:i+r.height}}function Rt(e,t,n,r,i){var o=P(e,t,n);return o.xRel=i,r&&(o.outside=!0),o}function Mt(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return Rt(r.first,0,null,!0,-1);var i=I(r,n),o=r.first+r.size-1;if(i>o)return Rt(r.first+r.size-1,S(r,o).text.length,null,!0,1);t<0&&(t=0);for(var l=S(r,i);;){var a=function(e,t,n,r,i){i-=ae(t);var o=yt(e,t),l=St(t),a=0,s=t.text.length,u=!0,c=de(t,e.doc.direction);if(c){var d=(e.options.lineWrapping?function(e,t,n,r,i,o,l){var a=Pt(e,t,r,l),s=a.begin,u=a.end;/\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,d=null,p=0;p<i.length;p++){var f=i[p];if(!(f.from>=u||f.to<=s)){var h=vt(e,r,1!=f.level?Math.min(u,f.to)-1:Math.max(s,f.from)).right,m=h<o?o-h+1e9:h-o;(!c||d>m)&&(c=f,d=m)}}return c||(c=i[i.length-1]),c.from<s&&(c={from:s,to:c.to,level:c.level}),c.to>u&&(c={from:c.from,to:u,level:c.level}),c}:function(e,t,n,r,i,o,l){var a=E(function(a){var s=i[a],u=1!=s.level;return At(Dt(e,P(n,u?s.to:s.from,u?"before":"after"),"line",t,r),o,l,!0)},0,i.length-1),s=i[a];if(a>0){var u=1!=s.level,c=Dt(e,P(n,u?s.from:s.to,u?"after":"before"),"line",t,r);At(c,o,l,!0)&&c.top>l&&(s=i[a-1])}return s})(e,t,n,o,c,r,i);a=(u=1!=d.level)?d.from:d.to-1,s=u?d.to:d.from-1}var p,f,h=null,m=null,g=E(function(t){var n=vt(e,o,t);return n.top+=l,n.bottom+=l,!!At(n,r,i,!1)&&(n.top<=i&&n.left<=r&&(h=t,m=n),!0)},a,s),y=!1;if(m){var v=r-m.left<m.right-r,b=v==u;g=h+(b?0:1),f=b?"after":"before",p=v?m.left:m.right}else{u||g!=s&&g!=a||g++,f=0==g?"after":g==t.text.length?"before":vt(e,o,g-(u?1:0)).bottom+l<=i==u?"after":"before";var _=Dt(e,P(n,g,f),"line",t,o);p=_.left,y=i<_.top||i>=_.bottom}return g=C(t.text,g,1),Rt(n,g,f,y,r-p)}(e,l,i,t,n),s=ee(l),u=s&&s.find(0,!0);if(!s||!(a.ch>u.from.ch||a.ch==u.from.ch&&a.xRel>0))return a;i=D(l=u.to.line)}}function Pt(e,t,n,r){r-=St(t);var i=t.text.length,o=E(function(t){return vt(e,n,t-1).bottom<=r},i,0);return i=E(function(t){return vt(e,n,t).top>r},o,i),{begin:o,end:i}}function Nt(e,t,n,r){return n||(n=yt(e,t)),Pt(e,t,n,Ot(e,t,vt(e,n,r),"line").top)}function At(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}function Lt(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==jo){jo=r("pre");for(var i=0;i<49;++i)jo.appendChild(document.createTextNode("x")),jo.appendChild(r("br"));jo.appendChild(document.createTextNode("x"))}n(e.measure,jo);var o=jo.offsetHeight/50;return o>3&&(e.cachedTextHeight=o),t(e.measure),o||1}function Ft(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=r("span","xxxxxxxxxx"),i=r("pre",[t]);n(e.measure,i);var o=t.getBoundingClientRect(),l=(o.right-o.left)/10;return l>2&&(e.cachedCharWidth=l),l||10}function jt(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l)n[e.options.gutters[l]]=o.offsetLeft+o.clientLeft+i,r[e.options.gutters[l]]=o.clientWidth;return{fixedPos:Vt(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function Vt(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function zt(e){var t=Lt(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/Ft(e.display)-3);return function(i){if(oe(e.doc,i))return 0;var o=0;if(i.widgets)for(var l=0;l<i.widgets.length;l++)i.widgets[l].height&&(o+=i.widgets[l].height);return n?o+(Math.ceil(i.text.length/r)||1)*t:o+t}}function Bt(e){var t=e.doc,n=zt(e);t.iter(function(e){var t=n(e);t!=e.height&&k(e,t)})}function Ht(e,t,n,r){var i=e.display;if(!n&&"true"==Ce(t).getAttribute("cm-not-content"))return null;var o,l,a=i.lineSpace.getBoundingClientRect();try{o=t.clientX-a.left,l=t.clientY-a.top}catch(t){return null}var s,u=Mt(e,o,l);if(r&&1==u.xRel&&(s=S(e.doc,u.line).text).length==u.ch){var c=d(s,s.length,e.options.tabSize)-s.length;u=P(u.line,Math.max(0,Math.round((o-ct(e.display).left)/Ft(e.display))-c))}return u}function Wt(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,r=0;r<n.length;r++)if((t-=n[r].size)<0)return r}function qt(e){e.display.input.showSelection(e.display.input.prepareSelection())}function Ut(e,t){void 0===t&&(t=!0);for(var n=e.doc,i={},o=i.cursors=document.createDocumentFragment(),l=i.selection=document.createDocumentFragment(),a=0;a<n.sel.ranges.length;a++)if(t||a!=n.sel.primIndex){var s=n.sel.ranges[a];if(!(s.from().line>=e.display.viewTo||s.to().line<e.display.viewFrom)){var u=s.empty();(u||e.options.showCursorWhenSelecting)&&Gt(e,s.head,o),u||function(e,t,n){function i(e,t,n,i){t<0&&(t=0),t=Math.round(t),i=Math.round(i),s.appendChild(r("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n                             top: "+t+"px; width: "+(null==n?d-e:n)+"px;\n                             height: "+(i-t)+"px"))}function o(t,n,r){function o(n,r){return kt(e,P(t,n),"div",f,r)}function l(t,n,r){var i=Nt(e,f,null,t),l="ltr"==n==("after"==r)?"left":"right";return o("after"==r?i.begin:i.end-(/\s/.test(f.text.charAt(i.end-1))?2:1),l)[l]}var s,u,f=S(a,t),h=f.text.length,m=de(f,a.direction);return function(e,t,n,r){if(!e)return r(t,n,"ltr",0);for(var i=!1,o=0;o<e.length;++o){var l=e[o];(l.from<n&&l.to>t||t==n&&l.to==t)&&(r(Math.max(l.from,t),Math.min(l.to,n),1==l.level?"rtl":"ltr",o),i=!0)}i||r(t,n,"ltr")}(m,n||0,null==r?h:r,function(e,t,a,f){var g="ltr"==a,y=o(e,g?"left":"right"),v=o(t-1,g?"right":"left"),b=null==n&&0==e,_=null==r&&t==h,w=0==f,x=!m||f==m.length-1;if(v.top-y.top<=3){var C=(p?b:_)&&w?c:(g?y:v).left;i(C,y.top,((p?_:b)&&x?d:(g?v:y).right)-C,y.bottom)}else{var E,S,O,T;g?(E=p&&b&&w?c:y.left,S=p?d:l(e,a,"before"),O=p?c:l(t,a,"after"),T=p&&_&&x?d:v.right):(E=p?l(e,a,"before"):c,S=!p&&b&&w?d:y.right,O=!p&&_&&x?c:v.left,T=p?l(t,a,"after"):d),i(E,y.top,S-E,y.bottom),y.bottom<v.top&&i(c,y.bottom,null,v.top),i(O,v.top,T-O,v.bottom)}(!s||Kt(y,s)<0)&&(s=y),Kt(v,s)<0&&(s=v),(!u||Kt(y,u)<0)&&(u=y),Kt(v,u)<0&&(u=v)}),{start:s,end:u}}var l=e.display,a=e.doc,s=document.createDocumentFragment(),u=ct(e.display),c=u.left,d=Math.max(l.sizerWidth,pt(e)-l.sizer.offsetLeft)-u.right,p="ltr"==a.direction,f=t.from(),h=t.to();if(f.line==h.line)o(f.line,f.ch,h.ch);else{var m=S(a,f.line),g=S(a,h.line),y=ne(m)==ne(g),v=o(f.line,f.ch,y?m.text.length+1:null).end,b=o(h.line,y?0:null,h.ch).start;y&&(v.top<b.top-2?(i(v.right,v.top,null,v.bottom),i(c,b.top,b.left,b.bottom)):i(v.right,v.top,b.left-v.right,v.bottom)),v.bottom<b.top&&i(c,v.bottom,null,b.top)}n.appendChild(s)}(e,s,l)}}return i}function Gt(e,t,n){var i=Dt(e,t,"div",null,null,!e.options.singleCursorHeightPerLine),o=n.appendChild(r("div","\xa0","CodeMirror-cursor"));if(o.style.left=i.left+"px",o.style.top=i.top+"px",o.style.height=Math.max(0,i.bottom-i.top)*e.options.cursorHeight+"px",i.other){var l=n.appendChild(r("div","\xa0","CodeMirror-cursor CodeMirror-secondarycursor"));l.style.display="",l.style.left=i.other.left+"px",l.style.top=i.other.top+"px",l.style.height=.85*(i.other.bottom-i.other.top)+"px"}}function Kt(e,t){return e.top-t.top||e.left-t.left}function $t(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var n=!0;t.cursorDiv.style.visibility="",e.options.cursorBlinkRate>0?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(n=!n)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Zt(e){e.state.focused||(e.display.input.focus(),Yt(e))}function Qt(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,Xt(e))},100)}function Yt(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(he(e,"focus",e,t),e.state.focused=!0,a(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),Hi&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),$t(e))}function Xt(e,t){e.state.delayingBlurEvent||(e.state.focused&&(he(e,"blur",e,t),e.state.focused=!1,oo(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function Jt(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=0;r<t.view.length;r++){var i=t.view[r],o=void 0;if(!i.hidden){if(zi&&Bi<8){var l=i.node.offsetTop+i.node.offsetHeight;o=l-n,n=l}else{var a=i.node.getBoundingClientRect();o=a.bottom-a.top}var s=i.line.height-o;if(o<2&&(o=Lt(t)),(s>.005||s<-.005)&&(k(i.line,o),en(i.line),i.rest))for(var u=0;u<i.rest.length;u++)en(i.rest[u])}}}function en(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var n=e.widgets[t],r=n.node.parentNode;r&&(n.height=r.offsetHeight)}}function tn(e,t,n){var r=n&&null!=n.top?Math.max(0,n.top):e.scroller.scrollTop;r=Math.floor(r-st(e));var i=n&&null!=n.bottom?n.bottom:r+e.wrapper.clientHeight,o=I(t,r),l=I(t,i);if(n&&n.ensure){var a=n.ensure.from.line,s=n.ensure.to.line;a<o?(o=a,l=I(t,ae(S(t,a))+e.wrapper.clientHeight)):Math.min(s,t.lastLine())>=l&&(o=I(t,ae(S(t,s))-e.wrapper.clientHeight),l=s)}return{from:o,to:Math.max(l,o+1)}}function nn(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=Vt(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=r+"px",l=0;l<n.length;l++)if(!n[l].hidden){e.options.fixedGutter&&(n[l].gutter&&(n[l].gutter.style.left=o),n[l].gutterBackground&&(n[l].gutterBackground.style.left=o));var a=n[l].alignable;if(a)for(var s=0;s<a.length;s++)a[s].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=r+i+"px")}}function rn(e){if(!e.options.lineNumbers)return!1;var t=e.doc,n=M(e.options,t.first+t.size-1),i=e.display;if(n.length!=i.lineNumChars){var o=i.measure.appendChild(r("div",[r("div",n)],"CodeMirror-linenumber CodeMirror-gutter-elt")),l=o.firstChild.offsetWidth,a=o.offsetWidth-l;return i.lineGutter.style.width="",i.lineNumInnerWidth=Math.max(l,i.lineGutter.offsetWidth-a)+1,i.lineNumWidth=i.lineNumInnerWidth+a,i.lineNumChars=i.lineNumInnerWidth?n.length:-1,i.lineGutter.style.width=i.lineNumWidth+"px",Nn(e),!0}return!1}function on(e,t){var n=e.display,r=Lt(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:n.scroller.scrollTop,o=ft(e),l={};t.bottom-t.top>o&&(t.bottom=t.top+o);var a=e.doc.height+ut(n),s=t.bottom>a-r;if(t.top<i)l.scrollTop=t.top<r?0:t.top;else if(t.bottom>i+o){var u=Math.min(t.top,(s?a:t.bottom)-o);u!=i&&(l.scrollTop=u)}var c=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft,d=pt(e)-(e.options.fixedGutter?n.gutters.offsetWidth:0),p=t.right-t.left>d;return p&&(t.right=t.left+d),t.left<10?l.scrollLeft=0:t.left<c?l.scrollLeft=Math.max(0,t.left-(p?0:10)):t.right>d+c-3&&(l.scrollLeft=t.right+(p?0:10)-d),l}function ln(e,t){null!=t&&(un(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function an(e){un(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function sn(e,t,n){null==t&&null==n||un(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function un(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,cn(e,It(e,t.from),It(e,t.to),t.margin))}function cn(e,t,n,r){var i=on(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});sn(e,i.scrollLeft,i.scrollTop)}function dn(e,t){Math.abs(e.doc.scrollTop-t)<2||(Li||Pn(e,{top:t}),pn(e,t,!0),Li&&Pn(e),Dn(e,100))}function pn(e,t,n){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function fn(e,t,n,r){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(e.doc.scrollLeft=t,nn(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function hn(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+ut(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+dt(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}function mn(e,t){t||(t=hn(e));var n=e.display.barWidth,r=e.display.barHeight;gn(e,t);for(var i=0;i<4&&n!=e.display.barWidth||r!=e.display.barHeight;i++)n!=e.display.barWidth&&e.options.lineWrapping&&Jt(e),gn(e,hn(e)),n=e.display.barWidth,r=e.display.barHeight}function gn(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+"px",n.heightForcer.style.borderBottom=r.bottom+"px solid transparent",r.right&&r.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=r.bottom+"px",n.scrollbarFiller.style.width=r.right+"px"):n.scrollbarFiller.style.display="",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=r.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}function yn(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&oo(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Go[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),Eo(t,"mousedown",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute("cm-not-content","true")},function(t,n){"horizontal"==n?fn(e,t):dn(e,t)},e),e.display.scrollbars.addClass&&a(e.display.wrapper,e.display.scrollbars.addClass)}function vn(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ko},function(e){Bo?Bo.ops.push(e):e.ownsGroup=Bo={ops:[e],delayedCallbacks:[]}}(e.curOp)}function bn(e){!function(t,n){var i=e.curOp.ownsGroup;if(i)try{!function(e){var t=e.delayedCallbacks,n=0;do{for(;n<t.length;n++)t[n].call(null);for(var r=0;r<e.ops.length;r++){var i=e.ops[r];if(i.cursorActivityHandlers)for(;i.cursorActivityCalled<i.cursorActivityHandlers.length;)i.cursorActivityHandlers[i.cursorActivityCalled++].call(null,i.cm)}}while(n<t.length)}(i)}finally{Bo=null,function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;!function(t){for(var n=e.ops,i=0;i<n.length;i++)!function(e){var t=e.cm,n=t.display;(function(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=dt(e)+"px",t.sizer.style.marginBottom=-t.nativeBarWidth+"px",t.sizer.style.borderRightWidth=dt(e)+"px",t.scrollbarsClipped=!0)})(t),e.updateMaxLine&&ue(t),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<n.viewFrom||e.scrollToPos.to.line>=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new $o(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}(n[i]);for(var o=0;o<n.length;o++)!function(e){e.updatedDisplay=e.mustUpdate&&Rn(e.cm,e.update)}(n[o]);for(var a=0;a<n.length;a++)!function(e){var t=e.cm,n=t.display;e.updatedDisplay&&Jt(t),e.barMeasure=hn(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=mt(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+dt(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-pt(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}(n[a]);for(var s=0;s<n.length;s++)!function(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft<t.doc.scrollLeft&&fn(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var n=e.focus&&e.focus==l();e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,n),(e.updatedDisplay||e.startHeight!=t.doc.height)&&mn(t,e.barMeasure),e.updatedDisplay&&An(t,e.barMeasure),e.selectionChanged&&$t(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),n&&Zt(e.cm)}(n[s]);for(var u=0;u<n.length;u++)!function(e){var t=e.cm,n=t.display,i=t.doc;if(e.updatedDisplay&&Mn(t,e.update),null==n.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(n.wheelStartX=n.wheelStartY=null),null!=e.scrollTop&&pn(t,e.scrollTop,e.forceScroll),null!=e.scrollLeft&&fn(t,e.scrollLeft,!0,!0),e.scrollToPos){!function(e,t){if(!me(e,"scrollCursorIntoView")){var n=e.display,i=n.sizer.getBoundingClientRect(),o=null;if(t.top+i.top<0?o=!0:t.bottom+i.top>(window.innerHeight||document.documentElement.clientHeight)&&(o=!1),null!=o&&!$i){var l=r("div","\u200b",null,"position: absolute;\n                         top: "+(t.top-n.viewOffset-st(e.display))+"px;\n                         height: "+(t.bottom-t.top+dt(e)+n.barHeight)+"px;\n                         left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(l),l.scrollIntoView(o),e.display.lineSpace.removeChild(l)}}}(t,function(e,t,n,r){null==r&&(r=0);var i;e.options.lineWrapping||t!=n||(n="before"==(t=t.ch?P(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t).sticky?P(t.line,t.ch+1,"before"):t);for(var o=0;o<5;o++){var l=!1,a=Dt(e,t),s=n&&n!=t?Dt(e,n):a,u=on(e,i={left:Math.min(a.left,s.left),top:Math.min(a.top,s.top)-r,right:Math.max(a.left,s.left),bottom:Math.max(a.bottom,s.bottom)+r}),c=e.doc.scrollTop,d=e.doc.scrollLeft;if(null!=u.scrollTop&&(dn(e,u.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(l=!0)),null!=u.scrollLeft&&(fn(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-d)>1&&(l=!0)),!l)break}return i}(t,z(i,e.scrollToPos.from),z(i,e.scrollToPos.to),e.scrollToPos.margin))}var o=e.maybeHiddenMarkers,l=e.maybeUnhiddenMarkers;if(o)for(var a=0;a<o.length;++a)o[a].lines.length||he(o[a],"hide");if(l)for(var s=0;s<l.length;++s)l[s].lines.length&&he(l[s],"unhide");n.wrapper.offsetHeight&&(i.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&he(t,"changes",t,e.changeObjs),e.update&&e.update.finish()}(n[u])}()}(i)}}()}function _n(e,t){if(e.curOp)return t();vn(e);try{return t()}finally{bn(e)}}function wn(e,t){return function(){if(e.curOp)return t.apply(e,arguments);vn(e);try{return t.apply(e,arguments)}finally{bn(e)}}}function xn(e){return function(){if(this.curOp)return e.apply(this,arguments);vn(this);try{return e.apply(this,arguments)}finally{bn(this)}}}function Cn(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);vn(t);try{return e.apply(this,arguments)}finally{bn(t)}}}function En(e,t,n,r){null==t&&(t=e.doc.first),null==n&&(n=e.doc.first+e.doc.size),r||(r=0);var i=e.display;if(r&&n<i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>t)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)_o&&re(e.doc,t)<i.viewTo&&On(e);else if(n<=i.viewFrom)_o&&ie(e.doc,n+r)>i.viewFrom?On(e):(i.viewFrom+=r,i.viewTo+=r);else if(t<=i.viewFrom&&n>=i.viewTo)On(e);else if(t<=i.viewFrom){var o=Tn(e,n,n+r,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=r):On(e)}else if(n>=i.viewTo){var l=Tn(e,t,t,-1);l?(i.view=i.view.slice(0,l.index),i.viewTo=l.lineN):On(e)}else{var a=Tn(e,t,t,-1),s=Tn(e,n,n+r,1);a&&s?(i.view=i.view.slice(0,a.index).concat(Ze(e,a.lineN,s.lineN)).concat(i.view.slice(s.index)),i.viewTo+=r):On(e)}var u=i.externalMeasured;u&&(n<u.lineN?u.lineN+=r:t<u.lineN+u.size&&(i.externalMeasured=null))}function Sn(e,t,n){e.curOp.viewChanged=!0;var r=e.display,i=e.display.externalMeasured;if(i&&t>=i.lineN&&t<i.lineN+i.size&&(r.externalMeasured=null),!(t<r.viewFrom||t>=r.viewTo)){var o=r.view[Wt(e,t)];if(null!=o.node){var l=o.changes||(o.changes=[]);-1==p(l,n)&&l.push(n)}}}function On(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function Tn(e,t,n,r){var i,o=Wt(e,t),l=e.display.view;if(!_o||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var a=e.display.viewFrom,s=0;s<o;s++)a+=l[s].size;if(a!=t){if(r>0){if(o==l.length-1)return null;i=a+l[o].size-t,o++}else i=a-t;t+=i,n+=i}for(;re(e.doc,n)!=n;){if(o==(r<0?0:l.length-1))return null;n+=r*l[o-(r<0?1:0)].size,o+=r}return{index:o,lineN:n}}function kn(e){for(var t=e.display.view,n=0,r=0;r<t.length;r++){var i=t[r];i.hidden||i.node&&!i.changes||++n}return n}function Dn(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,u(In,e))}function In(e){var t=e.doc;if(!(t.highlightFrontier>=e.display.viewTo)){var n=+new Date+e.options.workTime,r=Ae(e,t.highlightFrontier),i=[];t.iter(r.line,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(r.line>=e.display.viewFrom){var l=o.styles,a=o.text.length>e.options.maxHighlightLength?Ie(t.mode,r.state):null,s=Pe(e,o,r,!0);a&&(r.state=a),o.styles=s.styles;var u=o.styleClasses,c=s.classes;c?o.styleClasses=c:u&&(o.styleClasses=null);for(var d=!l||l.length!=o.styles.length||u!=c&&(!u||!c||u.bgClass!=c.bgClass||u.textClass!=c.textClass),p=0;!d&&p<l.length;++p)d=l[p]!=o.styles[p];d&&i.push(r.line),o.stateAfter=r.save(),r.nextLine()}else o.text.length<=e.options.maxHighlightLength&&Le(e,o.text,r),o.stateAfter=r.line%5==0?r.save():null,r.nextLine();if(+new Date>n)return Dn(e,e.options.workDelay),!0}),t.highlightFrontier=r.line,t.modeFrontier=Math.max(t.modeFrontier,r.line),i.length&&_n(e,function(){for(var t=0;t<i.length;t++)Sn(e,i[t],"text")})}}function Rn(e,n){var r=e.display,i=e.doc;if(n.editorIsHidden)return On(e),!1;if(!n.force&&n.visible.from>=r.viewFrom&&n.visible.to<=r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo)&&r.renderedView==r.view&&0==kn(e))return!1;rn(e)&&(On(e),n.dims=jt(e));var a=i.first+i.size,s=Math.max(n.visible.from-e.options.viewportMargin,i.first),u=Math.min(a,n.visible.to+e.options.viewportMargin);r.viewFrom<s&&s-r.viewFrom<20&&(s=Math.max(i.first,r.viewFrom)),r.viewTo>u&&r.viewTo-u<20&&(u=Math.min(a,r.viewTo)),_o&&(s=re(e.doc,s),u=ie(e.doc,u));var c=s!=r.viewFrom||u!=r.viewTo||r.lastWrapHeight!=n.wrapperHeight||r.lastWrapWidth!=n.wrapperWidth;!function(e,t,n){var r=e.display;0==r.view.length||t>=r.viewTo||n<=r.viewFrom?(r.view=Ze(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=Ze(e,t,r.viewFrom).concat(r.view):r.viewFrom<t&&(r.view=r.view.slice(Wt(e,t))),r.viewFrom=t,r.viewTo<n?r.view=r.view.concat(Ze(e,r.viewTo,n)):r.viewTo>n&&(r.view=r.view.slice(0,Wt(e,n)))),r.viewTo=n}(e,s,u),r.viewOffset=ae(S(e.doc,r.viewFrom)),e.display.mover.style.top=r.viewOffset+"px";var d=kn(e);if(!c&&0==d&&!n.force&&r.renderedView==r.view&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo))return!1;var f=function(e){if(e.hasFocus())return null;var t=l();if(!t||!o(e.display.lineDiv,t))return null;var n={activeElt:t};if(window.getSelection){var r=window.getSelection();r.anchorNode&&r.extend&&o(e.display.lineDiv,r.anchorNode)&&(n.anchorNode=r.anchorNode,n.anchorOffset=r.anchorOffset,n.focusNode=r.focusNode,n.focusOffset=r.focusOffset)}return n}(e);return d>4&&(r.lineDiv.style.display="none"),function(e,n,r){function i(t){var n=t.nextSibling;return Hi&&Xi&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),n}for(var o=e.display,l=e.options.lineNumbers,a=o.lineDiv,s=a.firstChild,u=o.view,c=o.viewFrom,d=0;d<u.length;d++){var f=u[d];if(f.hidden);else if(f.node&&f.node.parentNode==a){for(;s!=f.node;)s=i(s);var h=l&&null!=n&&n<=c&&f.lineNumber;f.changes&&(p(f.changes,"gutter")>-1&&(h=!1),Xe(e,f,c,r)),h&&(t(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(M(e.options,c)))),s=f.node.nextSibling}else{var m=rt(e,f,c,r);a.insertBefore(m,s)}c+=f.size}for(;s;)s=i(s)}(e,r.updateLineNumbers,n.dims),d>4&&(r.lineDiv.style.display=""),r.renderedView=r.view,function(e){if(e&&e.activeElt&&e.activeElt!=l()&&(e.activeElt.focus(),e.anchorNode&&o(document.body,e.anchorNode)&&o(document.body,e.focusNode))){var t=window.getSelection(),n=document.createRange();n.setEnd(e.anchorNode,e.anchorOffset),n.collapse(!1),t.removeAllRanges(),t.addRange(n),t.extend(e.focusNode,e.focusOffset)}}(f),t(r.cursorDiv),t(r.selectionDiv),r.gutters.style.height=r.sizer.style.minHeight=0,c&&(r.lastWrapHeight=n.wrapperHeight,r.lastWrapWidth=n.wrapperWidth,Dn(e,400)),r.updateLineNumbers=null,!0}function Mn(e,t){for(var n=t.viewport,r=!0;(r&&e.options.lineWrapping&&t.oldDisplayWidth!=pt(e)||(n&&null!=n.top&&(n={top:Math.min(e.doc.height+ut(e.display)-ft(e),n.top)}),t.visible=tn(e.display,e.doc,n),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&Rn(e,t);r=!1){Jt(e);var i=hn(e);qt(e),mn(e,i),An(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function Pn(e,t){var n=new $o(e,t);if(Rn(e,n)){Jt(e),Mn(e,n);var r=hn(e);qt(e),mn(e,r),An(e,r),n.finish()}}function Nn(e){e.display.sizer.style.marginLeft=e.display.gutters.offsetWidth+"px"}function An(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+dt(e)+"px"}function Ln(e){var n=e.display.gutters,i=e.options.gutters;t(n);for(var o=0;o<i.length;++o){var l=i[o],a=n.appendChild(r("div",null,"CodeMirror-gutter "+l));"CodeMirror-linenumbers"==l&&(e.display.lineGutter=a,a.style.width=(e.display.lineNumWidth||1)+"px")}n.style.display=o?"":"none",Nn(e)}function Fn(e){var t=p(e.gutters,"CodeMirror-linenumbers");-1==t&&e.lineNumbers?e.gutters=e.gutters.concat(["CodeMirror-linenumbers"]):t>-1&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}function jn(e){var t=e.wheelDeltaX,n=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==n&&e.detail&&e.axis==e.VERTICAL_AXIS?n=e.detail:null==n&&(n=e.wheelDelta),{x:t,y:n}}function Vn(e){var t=jn(e);return t.x*=Qo,t.y*=Qo,t}function zn(e,t){var n=jn(t),r=n.x,i=n.y,o=e.display,l=o.scroller,a=l.scrollHeight>l.clientHeight;if(r&&l.scrollWidth>l.clientWidth||i&&a){if(i&&Xi&&Hi)e:for(var s=t.target,u=o.view;s!=l;s=s.parentNode)for(var c=0;c<u.length;c++)if(u[c].node==s){e.display.currentWheelTarget=s;break e}if(r&&!Li&&!Ui&&null!=Qo)return i&&a&&dn(e,Math.max(0,l.scrollTop+i*Qo)),fn(e,Math.max(0,l.scrollLeft+r*Qo)),(!i||i&&a)&&be(t),void(o.wheelStartX=null);if(i&&null!=Qo){var d=i*Qo,p=e.doc.scrollTop,f=p+o.wrapper.clientHeight;d<0?p=Math.max(0,p+d-50):f=Math.min(e.doc.height,f+d+50),Pn(e,{top:p,bottom:f})}Zo<20&&(null==o.wheelStartX?(o.wheelStartX=l.scrollLeft,o.wheelStartY=l.scrollTop,o.wheelDX=r,o.wheelDY=i,setTimeout(function(){if(null!=o.wheelStartX){var e=l.scrollLeft-o.wheelStartX,t=l.scrollTop-o.wheelStartY,n=t&&o.wheelDY&&t/o.wheelDY||e&&o.wheelDX&&e/o.wheelDX;o.wheelStartX=o.wheelStartY=null,n&&(Qo=(Qo*Zo+n)/(Zo+1),++Zo)}},200)):(o.wheelDX+=r,o.wheelDY+=i))}}function Bn(e,t){var n=e[t];e.sort(function(e,t){return N(e.from(),t.from())}),t=p(e,n);for(var r=1;r<e.length;r++){var i=e[r],o=e[r-1];if(N(o.to(),i.from())>=0){var l=j(o.from(),i.from()),a=F(o.to(),i.to()),s=o.empty()?i.from()==i.head:o.from()==o.head;r<=t&&--t,e.splice(--r,2,new Xo(s?a:l,s?l:a))}}return new Yo(e,t)}function Hn(e,t){return new Yo([new Xo(e,t||e)],0)}function Wn(e){return e.text?P(e.from.line+e.text.length-1,m(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function qn(e,t){if(N(e,t.from)<0)return e;if(N(e,t.to)<=0)return Wn(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch;return e.line==t.to.line&&(r+=Wn(t).ch-t.to.ch),P(n,r)}function Un(e,t){for(var n=[],r=0;r<e.sel.ranges.length;r++){var i=e.sel.ranges[r];n.push(new Xo(qn(i.anchor,t),qn(i.head,t)))}return Bn(n,e.sel.primIndex)}function Gn(e,t,n){return e.line==t.line?P(n.line,e.ch-t.ch+n.ch):P(n.line+(e.line-t.line),e.ch)}function Kn(e){e.doc.mode=ke(e.options,e.doc.modeOption),$n(e)}function $n(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,Dn(e,100),e.state.modeGen++,e.curOp&&En(e)}function Zn(e,t){return 0==t.from.ch&&0==t.to.ch&&""==m(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function Qn(e,t,n,r){function i(e){return n?n[e]:null}function o(e,n,i){!function(e,t,r,i){e.text=n,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),K(e),$(e,r);var o=i?i(e):1;o!=e.height&&k(e,o)}(e,0,i,r),Qe(e,"change",e,t)}function l(e,t){for(var n=[],o=e;o<t;++o)n.push(new Fo(u[o],i(o),r));return n}var a=t.from,s=t.to,u=t.text,c=S(e,a.line),d=S(e,s.line),p=m(u),f=i(u.length-1),h=s.line-a.line;if(t.full)e.insert(0,l(0,u.length)),e.remove(u.length,e.size-u.length);else if(Zn(e,t)){var g=l(0,u.length-1);o(d,d.text,f),h&&e.remove(a.line,h),g.length&&e.insert(a.line,g)}else if(c==d)if(1==u.length)o(c,c.text.slice(0,a.ch)+p+c.text.slice(s.ch),f);else{var y=l(1,u.length-1);y.push(new Fo(p+c.text.slice(s.ch),f,r)),o(c,c.text.slice(0,a.ch)+u[0],i(0)),e.insert(a.line+1,y)}else if(1==u.length)o(c,c.text.slice(0,a.ch)+u[0]+d.text.slice(s.ch),i(0)),e.remove(a.line+1,h);else{o(c,c.text.slice(0,a.ch)+u[0],i(0)),o(d,p+d.text.slice(s.ch),f);var v=l(1,u.length-1);h>1&&e.remove(a.line+1,h-1),e.insert(a.line+1,v)}Qe(e,"change",e,t)}function Yn(e,t,n){function r(e,i,o){if(e.linked)for(var l=0;l<e.linked.length;++l){var a=e.linked[l];if(a.doc!=i){var s=o&&a.sharedHist;n&&!s||(t(a.doc,s),r(a.doc,e,s))}}}r(e,null,!0)}function Xn(e,t){if(t.cm)throw new Error("This document is already in use.");e.doc=t,t.cm=e,Bt(e),Kn(e),Jn(e),e.options.lineWrapping||ue(e),e.options.mode=t.modeOption,En(e)}function Jn(e){("rtl"==e.doc.direction?a:oo)(e.display.lineDiv,"CodeMirror-rtl")}function er(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function tr(e,t){var n={from:L(t.from),to:Wn(t),text:O(e,t.from,t.to)};return or(e,n,t.from.line,t.to.line+1),Yn(e,function(e){return or(e,n,t.from.line,t.to.line+1)},!0),n}function nr(e){for(;e.length&&m(e).ranges;)e.pop()}function rr(e,t,n,r){var i=e.history;i.undone.length=0;var o,l,a=+new Date;if((i.lastOp==r||i.lastOrigin==t.origin&&t.origin&&("+"==t.origin.charAt(0)&&e.cm&&i.lastModTime>a-e.cm.options.historyEventDelay||"*"==t.origin.charAt(0)))&&(o=function(e,t){return i.lastOp==r?(nr(e.done),m(e.done)):e.done.length&&!m(e.done).ranges?m(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),m(e.done)):void 0}(i)))l=m(o.changes),0==N(t.from,t.to)&&0==N(t.from,l.to)?l.to=Wn(t):o.changes.push(tr(e,t));else{var s=m(i.done);for(s&&s.ranges||ir(e.sel,i.done),o={changes:[tr(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(n),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=a,i.lastOp=i.lastSelOp=r,i.lastOrigin=i.lastSelOrigin=t.origin,l||he(e,"historyAdded")}function ir(e,t){var n=m(t);n&&n.ranges&&n.equals(e)||t.push(e)}function or(e,t,n,r){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,r),function(n){n.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=n.markedSpans),++o})}function lr(e){if(!e)return null;for(var t,n=0;n<e.length;++n)e[n].marker.explicitlyCleared?t||(t=e.slice(0,n)):t&&t.push(e[n]);return t?t.length?t:null:e}function ar(e,t){var n=function(t,n){var r=n["spans_"+e.id];if(!r)return null;for(var i=[],o=0;o<n.text.length;++o)i.push(lr(r[o]));return i}(0,t),r=U(e,t);if(!n)return r;if(!r)return n;for(var i=0;i<n.length;++i){var o=n[i],l=r[i];if(o&&l)e:for(var a=0;a<l.length;++a){for(var s=l[a],u=0;u<o.length;++u)if(o[u].marker==s.marker)continue e;o.push(s)}else l&&(n[i]=l)}return n}function sr(e,t,n){for(var r=[],i=0;i<e.length;++i){var o=e[i];if(o.ranges)r.push(n?Yo.prototype.deepCopy.call(o):o);else{var l=o.changes,a=[];r.push({changes:a});for(var s=0;s<l.length;++s){var u=l[s],c=void 0;if(a.push({from:u.from,to:u.to,text:u.text}),t)for(var d in u)(c=d.match(/^spans_(\d+)$/))&&p(t,Number(c[1]))>-1&&(m(a)[d]=u[d],delete u[d])}}}return r}function ur(e,t,n,r){if(r){var i=e.anchor;if(n){var o=N(t,i)<0;o!=N(n,i)<0?(i=t,t=n):o!=N(t,n)<0&&(t=n)}return new Xo(i,t)}return new Xo(n||t,t)}function cr(e,t,n,r,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),mr(e,new Yo([ur(e.sel.primary(),t,n,i)],0),r)}function dr(e,t,n){for(var r=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o<e.sel.ranges.length;o++)r[o]=ur(e.sel.ranges[o],t[o],null,i);mr(e,Bn(r,e.sel.primIndex),n)}function pr(e,t,n,r){var i=e.sel.ranges.slice(0);i[t]=n,mr(e,Bn(i,e.sel.primIndex),r)}function fr(e,t,n,r){mr(e,Hn(t,n),r)}function hr(e,t,n){var r=e.history.done,i=m(r);i&&i.ranges?(r[r.length-1]=t,gr(e,t,n)):mr(e,t,n)}function mr(e,t,n){gr(e,t,n),function(t,n,r,i){var o=e.history,l=i&&i.origin;r==o.lastSelOp||l&&o.lastSelOrigin==l&&(o.lastModTime==o.lastSelTime&&o.lastOrigin==l||function(e,t,n,r){var i=t.charAt(0);return"*"==i||"+"==i&&n.ranges.length==r.ranges.length&&n.somethingSelected()==r.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,l,m(o.done),n))?o.done[o.done.length-1]=n:ir(n,o.done),o.lastSelTime=+new Date,o.lastSelOrigin=l,o.lastSelOp=r,i&&!1!==i.clearRedo&&nr(o.undone)}(0,e.sel,e.cm?e.cm.curOp.id:NaN,n)}function gr(e,t,n){(ye(e,"beforeSelectionChange")||e.cm&&ye(e.cm,"beforeSelectionChange"))&&(t=function(e,t,r){var i={ranges:t.ranges,update:function(t){this.ranges=[];for(var n=0;n<t.length;n++)this.ranges[n]=new Xo(z(e,t[n].anchor),z(e,t[n].head))},origin:n&&n.origin};return he(e,"beforeSelectionChange",e,i),e.cm&&he(e.cm,"beforeSelectionChange",e.cm,i),i.ranges!=t.ranges?Bn(i.ranges,i.ranges.length-1):t}(e,t)),yr(e,br(e,t,n&&n.bias||(N(t.primary().head,e.sel.primary().head)<0?-1:1),!0)),n&&!1===n.scroll||!e.cm||an(e.cm)}function yr(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=e.cm.curOp.selectionChanged=!0,ge(e.cm)),Qe(e,"cursorActivity",e))}function vr(e){yr(e,br(e,e.sel,null,!1))}function br(e,t,n,r){for(var i,o=0;o<t.ranges.length;o++){var l=t.ranges[o],a=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],s=wr(e,l.anchor,a&&a.anchor,n,r),u=wr(e,l.head,a&&a.head,n,r);(i||s!=l.anchor||u!=l.head)&&(i||(i=t.ranges.slice(0,o)),i[o]=new Xo(s,u))}return i?Bn(i,t.primIndex):t}function _r(e,t,n,r,i){var o=S(e,t.line);if(o.markedSpans)for(var l=0;l<o.markedSpans.length;++l){var a=o.markedSpans[l],s=a.marker;if((null==a.from||(s.inclusiveLeft?a.from<=t.ch:a.from<t.ch))&&(null==a.to||(s.inclusiveRight?a.to>=t.ch:a.to>t.ch))){if(i&&(he(s,"beforeCursorEnter"),s.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(!s.atomic)continue;if(n){var u=s.find(r<0?1:-1),c=void 0;if((r<0?s.inclusiveRight:s.inclusiveLeft)&&(u=xr(e,u,-r,u&&u.line==t.line?o:null)),u&&u.line==t.line&&(c=N(u,n))&&(r<0?c<0:c>0))return _r(e,u,t,r,i)}var d=s.find(r<0?-1:1);return(r<0?s.inclusiveLeft:s.inclusiveRight)&&(d=xr(e,d,r,d.line==t.line?o:null)),d?_r(e,d,t,r,i):null}}return t}function wr(e,t,n,r,i){var o=r||1;return _r(e,t,n,o,i)||!i&&_r(e,t,n,o,!0)||_r(e,t,n,-o,i)||!i&&_r(e,t,n,-o,!0)||(e.cantEdit=!0,P(e.first,0))}function xr(e,t,n,r){return n<0&&0==t.ch?t.line>e.first?z(e,P(t.line-1)):null:n>0&&t.ch==(r||S(e,t.line)).text.length?t.line<e.first+e.size-1?P(t.line+1,0):null:new P(t.line,t.ch+n)}function Cr(e){e.setSelection(P(e.firstLine(),0),P(e.lastLine()),fo)}function Er(e,t,n){var r={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){return r.canceled=!0}};return n&&(r.update=function(t,n,i,o){t&&(r.from=z(e,t)),n&&(r.to=z(e,n)),i&&(r.text=i),void 0!==o&&(r.origin=o)}),he(e,"beforeChange",e,r),e.cm&&he(e.cm,"beforeChange",e.cm,r),r.canceled?null:{from:r.from,to:r.to,text:r.text,origin:r.origin}}function Sr(e,t,n){if(e.cm){if(!e.cm.curOp)return wn(e.cm,Sr)(e,t,n);if(e.cm.state.suppressEdits)return}if(!(ye(e,"beforeChange")||e.cm&&ye(e.cm,"beforeChange"))||(t=Er(e,t,!0))){var r=bo&&!n&&function(t,n,r){var i=null;if(e.iter(n.line,r.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var n=e.markedSpans[t].marker;!n.readOnly||i&&-1!=p(i,n)||(i||(i=[])).push(n)}}),!i)return null;for(var o=[{from:n,to:r}],l=0;l<i.length;++l)for(var a=i[l],s=a.find(0),u=0;u<o.length;++u){var c=o[u];if(!(N(c.to,s.from)<0||N(c.from,s.to)>0)){var d=[u,1],f=N(c.from,s.from),h=N(c.to,s.to);(f<0||!a.inclusiveLeft&&!f)&&d.push({from:c.from,to:s.from}),(h>0||!a.inclusiveRight&&!h)&&d.push({from:s.to,to:c.to}),o.splice.apply(o,d),u+=d.length-3}}return o}(0,t.from,t.to);if(r)for(var i=r.length-1;i>=0;--i)Or(e,{from:r[i].from,to:r[i].to,text:i?[""]:t.text,origin:t.origin});else Or(e,t)}}function Or(e,t){if(1!=t.text.length||""!=t.text[0]||0!=N(t.from,t.to)){var n=Un(e,t);rr(e,t,n,e.cm?e.cm.curOp.id:NaN),Dr(e,t,n,U(e,t));var r=[];Yn(e,function(e,n){n||-1!=p(r,e.history)||(Pr(e.history,t),r.push(e.history)),Dr(e,t,null,U(e,t))})}}function Tr(e,t,n){if(!e.cm||!e.cm.state.suppressEdits||n){for(var r,i=e.history,o=e.sel,l="undo"==t?i.done:i.undone,a="undo"==t?i.undone:i.done,s=0;s<l.length&&(r=l[s],n?!r.ranges||r.equals(e.sel):r.ranges);s++);if(s!=l.length){for(i.lastOrigin=i.lastSelOrigin=null;(r=l.pop()).ranges;){if(ir(r,a),n&&!r.equals(e.sel))return void mr(e,r,{clearRedo:!1});o=r}var u=[];ir(o,a),a.push({changes:u,generation:i.generation}),i.generation=r.generation||++i.maxGeneration;for(var c=ye(e,"beforeChange")||e.cm&&ye(e.cm,"beforeChange"),d=function(n){var i=r.changes[n];if(i.origin=t,c&&!Er(e,i,!1))return l.length=0,{};u.push(tr(e,i));var o=n?Un(e,i):m(l);Dr(e,i,o,ar(e,i)),!n&&e.cm&&e.cm.scrollIntoView({from:i.from,to:Wn(i)});var a=[];Yn(e,function(e,t){t||-1!=p(a,e.history)||(Pr(e.history,i),a.push(e.history)),Dr(e,i,null,ar(e,i))})},f=r.changes.length-1;f>=0;--f){var h=d(f);if(h)return h.v}}}}function kr(e,t){if(0!=t&&(e.first+=t,e.sel=new Yo(g(e.sel.ranges,function(e){return new Xo(P(e.anchor.line+t,e.anchor.ch),P(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){En(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;r<n.viewTo;r++)Sn(e.cm,r,"gutter")}}function Dr(e,t,n,r){if(e.cm&&!e.cm.curOp)return wn(e.cm,Dr)(e,t,n,r);if(t.to.line<e.first)kr(e,t.text.length-1-(t.to.line-t.from.line));else if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var i=t.text.length-1-(e.first-t.from.line);kr(e,i),t={from:P(e.first,0),to:P(t.to.line+i,t.to.ch),text:[m(t.text)],origin:t.origin}}var o=e.lastLine();t.to.line>o&&(t={from:t.from,to:P(o,S(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=O(e,t.from,t.to),n||(n=Un(e,t)),e.cm?function(e,t,n){var r=e.doc,i=e.display,o=t.from,l=t.to,a=!1,s=o.line;e.options.lineWrapping||(s=D(ne(S(r,o.line))),r.iter(s,l.line+1,function(e){if(e==i.maxLine)return a=!0,!0})),r.sel.contains(t.from,t.to)>-1&&ge(e),Qn(r,t,n,zt(e)),e.options.lineWrapping||(r.iter(s,o.line+t.text.length,function(e){var t=se(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,a=!1)}),a&&(e.curOp.updateMaxLine=!0)),function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontier<t-10)){for(var n=e.first,r=t-1;r>n;r--){var i=S(e,r).stateAfter;if(i&&(!(i instanceof No)||r+i.lookAhead<t)){n=r+1;break}}e.highlightFrontier=Math.min(e.highlightFrontier,n)}}(r,o.line),Dn(e,400);var u=t.text.length-(l.line-o.line)-1;t.full?En(e):o.line!=l.line||1!=t.text.length||Zn(e.doc,t)?En(e,o.line,l.line+1,u):Sn(e,o.line,"text");var c=ye(e,"changes"),d=ye(e,"change");if(d||c){var p={from:o,to:l,text:t.text,removed:t.removed,origin:t.origin};d&&Qe(e,"change",e,p),c&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(p)}e.display.selForContextMenu=null}(e.cm,t,r):Qn(e,t,r),gr(e,n,fo)}}function Ir(e,t,n,r,i){if(r||(r=n),N(r,n)<0){var o;n=(o=[r,n])[0],r=o[1]}"string"==typeof t&&(t=e.splitLines(t)),Sr(e,{from:n,to:r,text:t,origin:i})}function Rr(e,t,n,r){n<e.line?e.line+=r:t<e.line&&(e.line=t,e.ch=0)}function Mr(e,t,n,r){for(var i=0;i<e.length;++i){var o=e[i],l=!0;if(o.ranges){o.copied||((o=e[i]=o.deepCopy()).copied=!0);for(var a=0;a<o.ranges.length;a++)Rr(o.ranges[a].anchor,t,n,r),Rr(o.ranges[a].head,t,n,r)}else{for(var s=0;s<o.changes.length;++s){var u=o.changes[s];if(n<u.from.line)u.from=P(u.from.line+r,u.from.ch),u.to=P(u.to.line+r,u.to.ch);else if(t<=u.to.line){l=!1;break}}l||(e.splice(0,i+1),i=0)}}}function Pr(e,t){var n=t.from.line,r=t.to.line,i=t.text.length-(r-n)-1;Mr(e.done,n,r,i),Mr(e.undone,n,r,i)}function Nr(e,t,n,r){var i=t,o=t;return"number"==typeof t?o=S(e,V(e,t)):i=D(t),null==i?null:(r(o,i)&&e.cm&&Sn(e.cm,i,n),o)}function Ar(e){this.lines=e,this.parent=null;for(var t=0,n=0;n<e.length;++n)e[n].parent=this,t+=e[n].height;this.height=t}function Lr(e){this.children=e;for(var t=0,n=0,r=0;r<e.length;++r){var i=e[r];t+=i.chunkSize(),n+=i.height,i.parent=this}this.size=t,this.height=n,this.parent=null}function Fr(e,t,n){ae(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&ln(e,n)}function jr(e,t,n,r,o){if(r&&r.shared)return function(e,t,n,r,i){(r=c(r)).shared=!1;var o=[jr(e,t,n,r,i)],l=o[0],a=r.widgetNode;return Yn(e,function(e){a&&(r.widgetNode=a.cloneNode(!0)),o.push(jr(e,z(e,t),z(e,n),r,i));for(var s=0;s<e.linked.length;++s)if(e.linked[s].isParent)return;l=m(o)}),new nl(o,l)}(e,t,n,r,o);if(e.cm&&!e.cm.curOp)return wn(e.cm,jr)(e,t,n,r,o);var l=new tl(e,o),a=N(t,n);if(r&&c(r,l,!1),a>0||0==a&&!1!==l.clearWhenEmpty)return l;if(l.replacedWith&&(l.collapsed=!0,l.widgetNode=i("span",[l.replacedWith],"CodeMirror-widget"),r.handleMouseEvents||l.widgetNode.setAttribute("cm-ignore-events","true"),r.insertLeft&&(l.widgetNode.insertLeft=!0)),l.collapsed){if(te(e,t.line,t,n,l)||t.line!=n.line&&te(e,n.line,t,n,l))throw new Error("Inserting collapsed marker partially overlapping an existing one");_o=!0}l.addToHistory&&rr(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var s,u=t.line,d=e.cm;if(e.iter(u,n.line+1,function(e){d&&l.collapsed&&!d.options.lineWrapping&&ne(e)==d.display.maxLine&&(s=!0),l.collapsed&&u!=t.line&&k(e,0),function(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}(e,new H(l,u==t.line?t.ch:null,u==n.line?n.ch:null)),++u}),l.collapsed&&e.iter(t.line,n.line+1,function(t){oe(e,t)&&k(t,0)}),l.clearOnEnter&&Eo(l,"beforeCursorEnter",function(){return l.clear()}),l.readOnly&&(bo=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),l.collapsed&&(l.id=++el,l.atomic=!0),d){if(s&&(d.curOp.updateMaxLine=!0),l.collapsed)En(d,t.line,n.line+1);else if(l.className||l.title||l.startStyle||l.endStyle||l.css)for(var p=t.line;p<=n.line;p++)Sn(d,p,"text");l.atomic&&vr(d.doc),Qe(d,"markerAdded",d,l)}return l}function Vr(e){return e.findMarks(P(e.first,0),e.clipPos(P(e.lastLine())),function(e){return e.parent})}function zr(e){for(var t=function(t){var n=e[t],r=[n.primary.doc];Yn(n.primary.doc,function(e){return r.push(e)});for(var i=0;i<n.markers.length;i++){var o=n.markers[i];-1==p(r,o.doc)&&(o.parent=null,n.markers.splice(i--,1))}},n=0;n<e.length;n++)t(n)}function Br(e){var t=this;if(Hr(t),!me(t,e)&&!at(t.display,e)){be(e),zi&&(ol=+new Date);var n=Ht(t,e,!0),r=e.dataTransfer.files;if(n&&!t.isReadOnly())if(r&&r.length&&window.FileReader&&window.File)for(var i=r.length,o=Array(i),l=0,a=function(e,r){if(!t.options.allowDropFileTypes||-1!=p(t.options.allowDropFileTypes,e.type)){var a=new FileReader;a.onload=wn(t,function(){var e=a.result;if(/[\x00-\x08\x0e-\x1f]{2}/.test(e)&&(e=""),o[r]=e,++l==i){var s={from:n=z(t.doc,n),to:n,text:t.doc.splitLines(o.join(t.doc.lineSeparator())),origin:"paste"};Sr(t.doc,s),hr(t.doc,Hn(n,Wn(s)))}}),a.readAsText(e)}},s=0;s<i;++s)a(r[s],s);else{if(t.state.draggingText&&t.doc.sel.contains(n)>-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var u=e.dataTransfer.getData("Text");if(u){var c;if(t.state.draggingText&&!t.state.draggingText.copy&&(c=t.listSelections()),gr(t.doc,Hn(n,n)),c)for(var d=0;d<c.length;++d)Ir(t.doc,"",c[d].anchor,c[d].head,"drag");t.replaceSelection(u,"around","paste"),t.display.input.focus()}}catch(e){}}}}function Hr(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function Wr(e){if(document.getElementsByClassName)for(var t=document.getElementsByClassName("CodeMirror"),n=0;n<t.length;n++){var r=t[n].CodeMirror;r&&e(r)}}function qr(e){var t=e.display;t.lastWrapHeight==t.wrapper.clientHeight&&t.lastWrapWidth==t.wrapper.clientWidth||(t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize())}function Ur(e){var t=e.split(/-(?!$)/);e=t[t.length-1];for(var n,r,i,o,l=0;l<t.length-1;l++){var a=t[l];if(/^(cmd|meta|m)$/i.test(a))o=!0;else if(/^a(lt)?$/i.test(a))n=!0;else if(/^(c|ctrl|control)$/i.test(a))r=!0;else{if(!/^s(hift)?$/i.test(a))throw new Error("Unrecognized modifier name: "+a);i=!0}}return n&&(e="Alt-"+e),r&&(e="Ctrl-"+e),o&&(e="Cmd-"+e),i&&(e="Shift-"+e),e}function Gr(e){var t={};for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];if(/^(name|fallthrough|(de|at)tach)$/.test(n))continue;if("..."==r){delete e[n];continue}for(var i=g(n.split(" "),Ur),o=0;o<i.length;o++){var l=void 0,a=void 0;o==i.length-1?(a=i.join(" "),l=r):(a=i.slice(0,o+1).join(" "),l="...");var s=t[a];if(s){if(s!=l)throw new Error("Inconsistent bindings for "+a)}else t[a]=l}delete e[n]}for(var u in t)e[u]=t[u];return e}function Kr(e,t,n,r){var i=(t=Yr(t)).call?t.call(e,r):t[e];if(!1===i)return"nothing";if("..."===i)return"multi";if(null!=i&&n(i))return"handled";if(t.fallthrough){if("[object Array]"!=Object.prototype.toString.call(t.fallthrough))return Kr(e,t.fallthrough,n,r);for(var o=0;o<t.fallthrough.length;o++){var l=Kr(e,t.fallthrough[o],n,r);if(l)return l}}}function $r(e){var t="string"==typeof e?e:al[e.keyCode];return"Ctrl"==t||"Alt"==t||"Shift"==t||"Mod"==t}function Zr(e,t,n){var r=e;return t.altKey&&"Alt"!=r&&(e="Alt-"+e),(ro?t.metaKey:t.ctrlKey)&&"Ctrl"!=r&&(e="Ctrl-"+e),(ro?t.ctrlKey:t.metaKey)&&"Cmd"!=r&&(e="Cmd-"+e),!n&&t.shiftKey&&"Shift"!=r&&(e="Shift-"+e),e}function Qr(e,t){if(Ui&&34==e.keyCode&&e.char)return!1;var n=al[e.keyCode];return null!=n&&!e.altGraphKey&&Zr(n,e,t)}function Yr(e){return"string"==typeof e?dl[e]:e}function Xr(e,t){for(var n=e.doc.sel.ranges,r=[],i=0;i<n.length;i++){for(var o=t(n[i]);r.length&&N(o.from,m(r).to)<=0;){var l=r.pop();if(N(l.from,o.from)<0){o.from=l.from;break}}r.push(o)}_n(e,function(){for(var t=r.length-1;t>=0;t--)Ir(e.doc,"",r[t].from,r[t].to,"+delete");an(e)})}function Jr(e,t,n){var r=C(e.text,t+n,n);return r<0||r>e.text.length?null:r}function ei(e,t,n){var r=Jr(e,t.ch,n);return null==r?null:new P(t.line,r,n<0?"after":"before")}function ti(e,t,n,r,i){if(e){var o=de(n,t.doc.direction);if(o){var l,a=i<0?m(o):o[0],s=i<0==(1==a.level)?"after":"before";if(a.level>0||"rtl"==t.doc.direction){var u=yt(t,n),c=vt(t,u,l=i<0?n.text.length-1:0).top;l=E(function(e){return vt(t,u,e).top==c},i<0==(1==a.level)?a.from:a.to-1,l),"before"==s&&(l=Jr(n,l,1))}else l=i<0?a.to:a.from;return new P(r,l,s)}}return new P(r,i<0?n.text.length:0,i<0?"before":"after")}function ni(e,t){var n=S(e.doc,t),r=ne(n);return r!=n&&(t=D(r)),ti(!0,e,r,t,1)}function ri(e,t){var n=ni(e,t.line),r=S(e.doc,n.line),i=de(r,e.doc.direction);if(!i||0==i[0].level){var o=Math.max(0,r.text.search(/\S/));return P(n.line,t.line==n.line&&t.ch<=o&&t.ch?0:o,n.sticky)}return n}function ii(e,t,n){if("string"==typeof t&&!(t=pl[t]))return!1;e.display.input.ensurePolled();var r=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n&&(e.display.shift=!1),i=t(e)!=po}finally{e.display.shift=r,e.state.suppressEdits=!1}return i}function oi(e,t,n,r){var i=e.state.keySeq;if(i){if($r(t))return"handled";if(/\'$/.test(t)?e.state.keySeq=null:fl.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),li(e,i+" "+t,n,r))return!0}return li(e,t,n,r)}function li(e,t,n,r){var i=function(e,t,n){for(var r=0;r<e.state.keyMaps.length;r++){var i=Kr(t,e.state.keyMaps[r],n,e);if(i)return i}return e.options.extraKeys&&Kr(t,e.options.extraKeys,n,e)||Kr(t,e.options.keyMap,n,e)}(e,t,r);return"multi"==i&&(e.state.keySeq=t),"handled"==i&&Qe(e,"keyHandled",e,t,n),"handled"!=i&&"multi"!=i||(be(n),$t(e)),!!i}function ai(e,t){var n=Qr(t,!0);return!!n&&(t.shiftKey&&!e.state.keySeq?oi(e,"Shift-"+n,t,function(t){return ii(e,t,!0)})||oi(e,n,t,function(t){if("string"==typeof t?/^go[A-Z]/.test(t):t.motion)return ii(e,t)}):oi(e,n,t,function(t){return ii(e,t)}))}function si(e){if(this.curOp.focus=l(),!me(this,e)){zi&&Bi<11&&27==e.keyCode&&(e.returnValue=!1);var t=e.keyCode;this.display.shift=16==t||e.shiftKey;var n=ai(this,e);Ui&&(hl=n?t:null,!n&&88==t&&!ko&&(Xi?e.metaKey:e.ctrlKey)&&this.replaceSelection("",null,"cut")),18!=t||/\bCodeMirror-crosshair\b/.test(this.display.lineDiv.className)||function(e){function t(e){18!=e.keyCode&&e.altKey||(oo(n,"CodeMirror-crosshair"),fe(document,"keyup",t),fe(document,"mouseover",t))}var n=e.display.lineDiv;a(n,"CodeMirror-crosshair"),Eo(document,"keyup",t),Eo(document,"mouseover",t)}(this)}}function ui(e){16==e.keyCode&&(this.doc.sel.shift=!1),me(this,e)}function ci(e){if(!(at(this.display,e)||me(this,e)||e.ctrlKey&&!e.altKey||Xi&&e.metaKey)){var t=e.keyCode,n=e.charCode;if(Ui&&t==hl)return hl=null,void be(e);if(!Ui||e.which&&!(e.which<10)||!ai(this,e)){var r=String.fromCharCode(null==n?t:n);"\b"!=r&&(function(t,n,i){return oi(t,"'"+r+"'",e,function(e){return ii(t,e,!0)})}(this)||this.display.input.onKeyPress(e))}}}function di(e){var t=this.display;if(!(me(this,e)||t.activeTouch&&t.input.supportsTouch()))if(t.input.ensurePolled(),t.shift=e.shiftKey,at(t,e))Hi||(t.scroller.draggable=!1,setTimeout(function(){return t.scroller.draggable=!0},100));else if(!hi(this,e)){var n=Ht(this,e),r=Ee(e),i=n?function(e,t){var n=+new Date;return yl&&yl.compare(n,e,t)?(gl=yl=null,"triple"):gl&&gl.compare(n,e,t)?(yl=new ml(n,e,t),gl=null,"double"):(gl=new ml(n,e,t),yl=null,"single")}(n,r):"single";window.focus(),1==r&&this.state.selectingText&&this.state.selectingText(e),n&&function(e,t,n,o,l){var a="Click";return"double"==i?a="Double"+a:"triple"==i&&(a="Triple"+a),a=(1==r?"Left":2==r?"Middle":"Right")+a,oi(e,Zr(a,l),l,function(t){if("string"==typeof t&&(t=pl[t]),!t)return!1;var r=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),r=t(e,n)!=po}finally{e.state.suppressEdits=!1}return r})}(this,0,n,0,e)||(1==r?n?function(e,t,n,r){zi?setTimeout(u(Zt,e),0):e.curOp.focus=l();var i,o=function(e,t,n){var r=e.getOption("configureMouse"),i=r?r(e,t,n):{};if(null==i.unit){i.unit=(Ji?n.shiftKey&&n.metaKey:n.altKey)?"rectangle":"single"==t?"char":"double"==t?"word":"line"}return(null==i.extend||e.doc.extend)&&(i.extend=e.doc.extend||n.shiftKey),null==i.addNew&&(i.addNew=Xi?n.metaKey:n.ctrlKey),null==i.moveOnDrag&&(i.moveOnDrag=!(Xi?n.altKey:n.ctrlKey)),i}(e,n,r),a=e.doc.sel;e.options.dragDrop&&So&&!e.isReadOnly()&&"single"==n&&(i=a.contains(t))>-1&&(N((i=a.ranges[i]).from(),t)<0||t.xRel>0)&&(N(i.to(),t)>0||t.xRel<0)?function(e,t,n,r){var i=e.display,o=!1,l=wn(e,function(t){Hi&&(i.scroller.draggable=!1),e.state.draggingText=!1,fe(document,"mouseup",l),fe(document,"mousemove",a),fe(i.scroller,"dragstart",s),fe(i.scroller,"drop",l),o||(be(t),r.addNew||cr(e.doc,n,null,null,r.extend),Hi||zi&&9==Bi?setTimeout(function(){document.body.focus(),i.input.focus()},20):i.input.focus())}),a=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},s=function(){return o=!0};Hi&&(i.scroller.draggable=!0),e.state.draggingText=l,l.copy=!r.moveOnDrag,i.scroller.dragDrop&&i.scroller.dragDrop(),Eo(document,"mouseup",l),Eo(document,"mousemove",a),Eo(i.scroller,"dragstart",s),Eo(i.scroller,"drop",l),Qt(e),setTimeout(function(){return i.input.focus()},20)}(e,r,t,o):function(e,t,n,r){function i(t){var o=++v,h=Ht(e,t,!0,"rectangle"==r.unit);if(h)if(0!=N(h,g)){e.curOp.focus=l(),function(t){if(0!=N(g,t))if(g=t,"rectangle"==r.unit){for(var i=[],o=e.options.tabSize,l=d(S(s,n.line).text,n.ch,o),a=d(S(s,t.line).text,t.ch,o),h=Math.min(l,a),m=Math.max(l,a),y=Math.min(n.line,t.line),v=Math.min(e.lastLine(),Math.max(n.line,t.line));y<=v;y++){var b=S(s,y).text,_=f(b,h,o);h==m?i.push(new Xo(P(y,_),P(y,_))):b.length>_&&i.push(new Xo(P(y,_),P(y,f(b,m,o))))}i.length||i.push(new Xo(n,n)),mr(s,Bn(p.ranges.slice(0,c).concat(i),c),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var w,x=u,C=pi(e,t,r.unit),E=x.anchor;N(C.anchor,E)>0?(w=C.head,E=j(x.from(),C.anchor)):(w=C.anchor,E=F(x.to(),C.head));var O=p.ranges.slice(0);O[c]=function(e,t){var n=t.anchor,r=t.head,i=S(e.doc,n.line);if(0==N(n,r)&&n.sticky==r.sticky)return t;var o=de(i);if(!o)return t;var l=ce(o,n.ch,n.sticky),a=o[l];if(a.from!=n.ch&&a.to!=n.ch)return t;var s=l+(a.from==n.ch==(1!=a.level)?0:1);if(0==s||s==o.length)return t;var u;if(r.line!=n.line)u=(r.line-n.line)*("ltr"==e.doc.direction?1:-1)>0;else{var c=ce(o,r.ch,r.sticky),d=c-l||(r.ch-n.ch)*(1==a.level?-1:1);u=c==s-1||c==s?d<0:d>0}var p=o[s+(u?-1:0)],f=u==(1==p.level),h=f?p.from:p.to,m=f?"after":"before";return n.ch==h&&n.sticky==m?t:new Xo(new P(n.line,h,m),r)}(e,new Xo(z(s,E),w)),mr(s,Bn(O,c),ho)}}(h);var m=tn(a,s);(h.line>=m.to||h.line<m.from)&&setTimeout(wn(e,function(){v==o&&i(t)}),150)}else{var b=t.clientY<y.top?-20:t.clientY>y.bottom?20:0;b&&setTimeout(wn(e,function(){v==o&&(a.scroller.scrollTop+=b,i(t))}),50)}}function o(t){e.state.selectingText=!1,v=1/0,be(t),a.input.focus(),fe(document,"mousemove",b),fe(document,"mouseup",_),s.history.lastSelOrigin=null}var a=e.display,s=e.doc;be(t);var u,c,p=s.sel,h=p.ranges;if(r.addNew&&!r.extend?(c=s.sel.contains(n),u=c>-1?h[c]:new Xo(n,n)):(u=s.sel.primary(),c=s.sel.primIndex),"rectangle"==r.unit)r.addNew||(u=new Xo(n,n)),n=Ht(e,t,!0,!0),c=-1;else{var m=pi(e,n,r.unit);u=r.extend?ur(u,m.anchor,m.head,r.extend):m}r.addNew?-1==c?(c=h.length,mr(s,Bn(h.concat([u]),c),{scroll:!1,origin:"*mouse"})):h.length>1&&h[c].empty()&&"char"==r.unit&&!r.extend?(mr(s,Bn(h.slice(0,c).concat(h.slice(c+1)),0),{scroll:!1,origin:"*mouse"}),p=s.sel):pr(s,c,u,ho):(c=0,mr(s,new Yo([u],0),ho),p=s.sel);var g=n,y=a.wrapper.getBoundingClientRect(),v=0,b=wn(e,function(e){Ee(e)?i(e):o(e)}),_=wn(e,o);e.state.selectingText=_,Eo(document,"mousemove",b),Eo(document,"mouseup",_)}(e,r,t,o)}(this,n,i,e):Ce(e)==t.scroller&&be(e):2==r?(n&&cr(this.doc,n),setTimeout(function(){return t.input.focus()},20)):3==r&&(io?mi(this,e):Qt(this)))}}function pi(e,t,n){if("char"==n)return new Xo(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new Xo(P(t.line,0),z(e.doc,P(t.line+1,0)));var r=n(e,t);return new Xo(r.from,r.to)}function fi(e,t,n,r){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&be(t);var l=e.display,a=l.lineDiv.getBoundingClientRect();if(o>a.bottom||!ye(e,n))return we(t);o-=a.top-l.viewOffset;for(var s=0;s<e.options.gutters.length;++s){var u=l.gutters.childNodes[s];if(u&&u.getBoundingClientRect().right>=i)return he(e,n,e,I(e.doc,o),e.options.gutters[s],t),we(t)}}function hi(e,t){return fi(e,t,"gutterClick",!0)}function mi(e,t){at(e.display,t)||function(e,t){return!!ye(e,"gutterContextMenu")&&fi(e,t,"gutterContextMenu",!1)}(e,t)||me(e,t,"contextmenu")||e.display.input.onContextMenu(t)}function gi(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),xt(e)}function yi(e){Ln(e),En(e),nn(e)}function vi(e,t,n){if(!t!=!(n&&n!=vl)){var r=e.display.dragFunctions,i=t?Eo:fe;i(e.display.scroller,"dragstart",r.start),i(e.display.scroller,"dragenter",r.enter),i(e.display.scroller,"dragover",r.over),i(e.display.scroller,"dragleave",r.leave),i(e.display.scroller,"drop",r.drop)}}function bi(e){e.options.lineWrapping?(a(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(oo(e.display.wrapper,"CodeMirror-wrap"),ue(e)),Bt(e),En(e),xt(e),setTimeout(function(){return mn(e)},100)}function _i(e,t){var o=this;if(!(this instanceof _i))return new _i(e,t);this.options=t=t?c(t):{},c(bl,t,!1),Fn(t);var l=t.value;"string"==typeof l&&(l=new il(l,t.mode,null,t.lineSeparator,t.direction)),this.doc=l;var a=new _i.inputStyles[t.inputStyle](this),s=this.display=new function(e,t,n){this.input=n,this.scrollbarFiller=r("div",null,"CodeMirror-scrollbar-filler"),this.scrollbarFiller.setAttribute("cm-not-content","true"),this.gutterFiller=r("div",null,"CodeMirror-gutter-filler"),this.gutterFiller.setAttribute("cm-not-content","true"),this.lineDiv=i("div",null,"CodeMirror-code"),this.selectionDiv=r("div",null,null,"position: relative; z-index: 1"),this.cursorDiv=r("div",null,"CodeMirror-cursors"),this.measure=r("div",null,"CodeMirror-measure"),this.lineMeasure=r("div",null,"CodeMirror-measure"),this.lineSpace=i("div",[this.measure,this.lineMeasure,this.selectionDiv,this.cursorDiv,this.lineDiv],null,"position: relative; outline: none");var o=i("div",[this.lineSpace],"CodeMirror-lines");this.mover=r("div",[o],null,"position: relative"),this.sizer=r("div",[this.mover],"CodeMirror-sizer"),this.sizerWidth=null,this.heightForcer=r("div",null,null,"position: absolute; height: "+co+"px; width: 1px;"),this.gutters=r("div",null,"CodeMirror-gutters"),this.lineGutter=null,this.scroller=r("div",[this.sizer,this.heightForcer,this.gutters],"CodeMirror-scroll"),this.scroller.setAttribute("tabIndex","-1"),this.wrapper=r("div",[this.scrollbarFiller,this.gutterFiller,this.scroller],"CodeMirror"),zi&&Bi<8&&(this.gutters.style.zIndex=-1,this.scroller.style.paddingRight=0),Hi||Li&&Yi||(this.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(this.wrapper):e(this.wrapper)),this.viewFrom=this.viewTo=t.first,this.reportedViewFrom=this.reportedViewTo=t.first,this.view=[],this.renderedView=null,this.externalMeasured=null,this.viewOffset=0,this.lastWrapHeight=this.lastWrapWidth=0,this.updateLineNumbers=null,this.nativeBarWidth=this.barHeight=this.barWidth=0,this.scrollbarsClipped=!1,this.lineNumWidth=this.lineNumInnerWidth=this.lineNumChars=null,this.alignWidgets=!1,this.cachedCharWidth=this.cachedTextHeight=this.cachedPaddingH=null,this.maxLine=null,this.maxLineLength=0,this.maxLineChanged=!1,this.wheelDX=this.wheelDY=this.wheelStartX=this.wheelStartY=null,this.shift=!1,this.selForContextMenu=null,this.activeTouch=null,n.init(this)}(e,l,a);s.wrapper.CodeMirror=this,Ln(this),gi(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),yn(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new ao,keySeq:null,specialChars:null},t.autofocus&&!Yi&&s.input.focus(),zi&&Bi<11&&setTimeout(function(){return o.display.input.reset(!0)},20),function(e){function t(){o.activeTouch&&(l=setTimeout(function(){return o.activeTouch=null},1e3),(a=o.activeTouch).end=+new Date)}function i(e,t){if(null==t.left)return!0;var n=t.left-e.left,r=t.top-e.top;return n*n+r*r>400}var o=e.display;Eo(o.scroller,"mousedown",wn(e,di)),Eo(o.scroller,"dblclick",zi&&Bi<11?wn(e,function(t){if(!me(e,t)){var n=Ht(e,t);if(n&&!hi(e,t)&&!at(e.display,t)){be(t);var r=e.findWordAt(n);cr(e.doc,r.anchor,r.head)}}}):function(t){return me(e,t)||be(t)}),io||Eo(o.scroller,"contextmenu",function(t){return mi(e,t)});var l,a={end:0};Eo(o.scroller,"touchstart",function(t){if(!me(e,t)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(t)&&!hi(e,t)){o.input.ensurePolled(),clearTimeout(l);var n=+new Date;o.activeTouch={start:n,moved:!1,prev:n-a.end<=300?a:null},1==t.touches.length&&(o.activeTouch.left=t.touches[0].pageX,o.activeTouch.top=t.touches[0].pageY)}}),Eo(o.scroller,"touchmove",function(){o.activeTouch&&(o.activeTouch.moved=!0)}),Eo(o.scroller,"touchend",function(n){var r=o.activeTouch;if(r&&!at(o,n)&&null!=r.left&&!r.moved&&new Date-r.start<300){var l,a=e.coordsChar(o.activeTouch,"page");l=!r.prev||i(r,r.prev)?new Xo(a,a):!r.prev.prev||i(r,r.prev.prev)?e.findWordAt(a):new Xo(P(a.line,0),z(e.doc,P(a.line+1,0))),e.setSelection(l.anchor,l.head),e.focus(),be(n)}t()}),Eo(o.scroller,"touchcancel",t),Eo(o.scroller,"scroll",function(){o.scroller.clientHeight&&(dn(e,o.scroller.scrollTop),fn(e,o.scroller.scrollLeft,!0),he(e,"scroll",e))}),Eo(o.scroller,"mousewheel",function(t){return zn(e,t)}),Eo(o.scroller,"DOMMouseScroll",function(t){return zn(e,t)}),Eo(o.wrapper,"scroll",function(){return o.wrapper.scrollTop=o.wrapper.scrollLeft=0}),o.dragFunctions={enter:function(t){me(e,t)||xe(t)},over:function(t){me(e,t)||(function(e,i){var o=Ht(e,t);if(o){var l=document.createDocumentFragment();Gt(e,o,l),e.display.dragCursor||(e.display.dragCursor=r("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),n(e.display.dragCursor,l)}}(e),xe(t))},start:function(t){return function(e,t){if(zi&&(!e.state.draggingText||+new Date-ol<100))xe(t);else if(!me(e,t)&&!at(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!Gi)){var n=r("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",Ui&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),Ui&&n.parentNode.removeChild(n)}}(e,t)},drop:wn(e,Br),leave:function(t){me(e,t)||Hr(e)}};var s=o.input.getField();Eo(s,"keyup",function(t){return ui.call(e,t)}),Eo(s,"keydown",wn(e,si)),Eo(s,"keypress",wn(e,ci)),Eo(s,"focus",function(t){return Yt(e,t)}),Eo(s,"blur",function(t){return Xt(e,t)})}(this),ll||(function(){var e;Eo(window,"resize",function(){null==e&&(e=setTimeout(function(){e=null,Wr(qr)},100))}),Eo(window,"blur",function(){return Wr(Xt)})}(),ll=!0),vn(this),this.curOp.forceUpdate=!0,Xn(this,l),t.autofocus&&!Yi||this.hasFocus()?setTimeout(u(Yt,this),20):Xt(this);for(var d in _l)_l.hasOwnProperty(d)&&_l[d](o,t[d],vl);rn(this),t.finishInit&&t.finishInit(this);for(var p=0;p<wl.length;++p)wl[p](o);bn(this),Hi&&t.lineWrapping&&"optimizelegibility"==getComputedStyle(s.lineDiv).textRendering&&(s.lineDiv.style.textRendering="auto")}function wi(e,t,n,r){var i,o=e.doc;null==n&&(n="add"),"smart"==n&&(o.mode.indent?i=Ae(e,t).state:n="prev");var l=e.options.tabSize,a=S(o,t),s=d(a.text,null,l);a.stateAfter&&(a.stateAfter=null);var u,c=a.text.match(/^\s*/)[0];if(r||/\S/.test(a.text)){if("smart"==n&&((u=o.mode.indent(i,a.text.slice(c.length),a.text))==po||u>150)){if(!r)return;n="prev"}}else u=0,n="not";"prev"==n?u=t>o.first?d(S(o,t-1).text,null,l):0:"add"==n?u=s+e.options.indentUnit:"subtract"==n?u=s-e.options.indentUnit:"number"==typeof n&&(u=s+n),u=Math.max(0,u);var p="",f=0;if(e.options.indentWithTabs)for(var m=Math.floor(u/l);m;--m)f+=l,p+="\t";if(f<u&&(p+=h(u-f)),p!=c)return Ir(o,p,P(t,0),P(t,c.length),"+input"),a.stateAfter=null,!0;for(var g=0;g<o.sel.ranges.length;g++){var y=o.sel.ranges[g];if(y.head.line==t&&y.head.ch<c.length){var v=P(t,c.length);pr(o,g,new Xo(v,v));break}}}function xi(e){xl=e}function Ci(e,t,n,r,i){var o=e.doc;e.display.shift=!1,r||(r=o.sel);var l=e.state.pasteIncoming||"paste"==i,a=Oo(t),s=null;if(l&&r.ranges.length>1)if(xl&&xl.text.join("\n")==t){if(r.ranges.length%xl.text.length==0){s=[];for(var u=0;u<xl.text.length;u++)s.push(o.splitLines(xl.text[u]))}}else a.length==r.ranges.length&&e.options.pasteLinesPerSelection&&(s=g(a,function(e){return[e]}));for(var c,d=r.ranges.length-1;d>=0;d--){var p=r.ranges[d],f=p.from(),h=p.to();p.empty()&&(n&&n>0?f=P(f.line,f.ch-n):e.state.overwrite&&!l?h=P(h.line,Math.min(S(o,h.line).text.length,h.ch+m(a).length)):xl&&xl.lineWise&&xl.text.join("\n")==t&&(f=h=P(f.line,0))),c=e.curOp.updateInput;var y={from:f,to:h,text:s?s[d%s.length]:a,origin:i||(l?"paste":e.state.cutIncoming?"cut":"+input")};Sr(e.doc,y),Qe(e,"inputRead",e,y)}t&&!l&&Si(e,t),an(e),e.curOp.updateInput=c,e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function Ei(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");if(n)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||_n(t,function(){return Ci(t,n,0,null,"paste")}),!0}function Si(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var i=n.ranges[r];if(!(i.head.ch>100||r&&n.ranges[r-1].head.line==i.head.line)){var o=e.getModeAt(i.head),l=!1;if(o.electricChars){for(var a=0;a<o.electricChars.length;a++)if(t.indexOf(o.electricChars.charAt(a))>-1){l=wi(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(S(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=wi(e,i.head.line,"smart"));l&&Qe(e,"electricInput",e,i.head.line)}}}function Oi(e){for(var t=[],n=[],r=0;r<e.doc.sel.ranges.length;r++){var i=e.doc.sel.ranges[r].head.line,o={anchor:P(i,0),head:P(i+1,0)};n.push(o),t.push(e.getRange(o.anchor,o.head))}return{text:t,ranges:n}}function Ti(e,t){e.setAttribute("autocorrect","off"),e.setAttribute("autocapitalize","off"),e.setAttribute("spellcheck",!!t)}function ki(){var e=r("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),t=r("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return Hi?e.style.width="1000px":e.setAttribute("wrap","off"),Zi&&(e.style.border="1px solid black"),Ti(e),t}function Di(e,t,n,r,i){function o(r){var o;if(null==(o=i?function(e,t,n,r){var i=de(t,e.doc.direction);if(!i)return ei(t,n,r);n.ch>=t.text.length?(n.ch=t.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var o=ce(i,n.ch,n.sticky),l=i[o];if("ltr"==e.doc.direction&&l.level%2==0&&(r>0?l.to>n.ch:l.from<n.ch))return ei(t,n,r);var a,s=function(e,n){return Jr(t,e instanceof P?e.ch:e,n)},u=function(n){return e.options.lineWrapping?(a=a||yt(e,t),Nt(e,t,a,n)):{begin:0,end:t.text.length}},c=u("before"==n.sticky?s(n,-1):n.ch);if("rtl"==e.doc.direction||1==l.level){var d=1==l.level==r<0,p=s(n,d?1:-1);if(null!=p&&(d?p<=l.to&&p<=c.end:p>=l.from&&p>=c.begin))return new P(n.line,p,d?"before":"after")}var f=function(e,t,r){for(var o=function(e,t){return t?new P(n.line,s(e,1),"before"):new P(n.line,e,"after")};e>=0&&e<i.length;e+=t){var l=i[e],a=t>0==(1!=l.level),u=a?r.begin:s(r.end,-1);if(l.from<=u&&u<l.to)return o(u,a);if(u=a?l.from:s(l.to,-1),r.begin<=u&&u<r.end)return o(u,a)}},h=f(o+r,r,c);if(h)return h;var m=r>0?c.end:s(c.begin,-1);return null==m||r>0&&m==t.text.length||!(h=f(r>0?0:i.length-1,r,u(m)))?null:h}(e.cm,s,t,n):ei(s,t,n))){if(r||!function(){var r=t.line+n;return!(r<e.first||r>=e.first+e.size)&&(t=new P(r,t.ch,t.sticky),s=S(e,r))}())return!1;t=ti(i,e.cm,s,t.line,n)}else t=o;return!0}var l=t,a=n,s=S(e,t.line);if("char"==r)o();else if("column"==r)o(!0);else if("word"==r||"group"==r)for(var u=null,c="group"==r,d=e.cm&&e.cm.getHelper(t,"wordChars"),p=!0;!(n<0)||o(!p);p=!1){var f=s.text.charAt(t.ch)||"\n",h=_(f,d)?"w":c&&"\n"==f?"n":!c||/\s/.test(f)?null:"p";if(!c||p||h||(h="s"),u&&u!=h){n<0&&(n=1,o(),t.sticky="after");break}if(h&&(u=h),n>0&&!o(!p))break}var m=wr(e,t,l,a,!0);return A(l,m)&&(m.hitSide=!0),m}function Ii(e,t,n,r){var i,o=e.doc,l=t.left;if("page"==r){var a=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),s=Math.max(a-.5*Lt(e.display),3);i=(n>0?t.bottom:t.top)+n*s}else"line"==r&&(i=n>0?t.bottom+3:t.top-3);for(var u;(u=Mt(e,l,i)).outside;){if(n<0?i<=0:i>=o.height){u.hitSide=!0;break}i+=5*n}return u}function Ri(e,t){var n=gt(e,t.line);if(!n||n.hidden)return null;var r=S(e.doc,t.line),i=ht(n,r,t.line),o=de(r,e.doc.direction),l="left";o&&(l=ce(o,t.ch)%2?"right":"left");var a=bt(i.map,t.ch,l);return a.offset="right"==a.collapse?a.end:a.start,a}function Mi(e,t){return t&&(e.bad=!0),e}function Pi(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return Mi(e.clipPos(P(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var l=e.display.view[i];if(l.node==r)return function(e,t,n){function r(t,n,r){for(var i=-1;i<(d?d.length:0);i++)for(var o=i<0?c.map:d[i],l=0;l<o.length;l+=3){var a=o[l+2];if(a==t||a==n){var s=D(i<0?e.line:e.rest[i]),u=o[l]+r;return(r<0||a!=t)&&(u=o[l+(r?1:0)]),P(s,u)}}}var i=e.text.firstChild,l=!1;if(!t||!o(i,t))return Mi(P(D(e.line),0),!0);if(t==i&&(l=!0,t=i.childNodes[n],n=0,!t)){var a=e.rest?m(e.rest):e.line;return Mi(P(D(a),a.text.length),l)}var s=3==t.nodeType?t:null,u=t;for(s||1!=t.childNodes.length||3!=t.firstChild.nodeType||(s=t.firstChild,n&&(n=s.nodeValue.length));u.parentNode!=i;)u=u.parentNode;var c=e.measure,d=c.maps,p=r(s,u,n);if(p)return Mi(p,l);for(var f=u.nextSibling,h=s?s.nodeValue.length-n:0;f;f=f.nextSibling){if(p=r(f,f.firstChild,0))return Mi(P(p.line,p.ch-h),l);h+=f.textContent.length}for(var g=u.previousSibling,y=n;g;g=g.previousSibling){if(p=r(g,g.firstChild,-1))return Mi(P(p.line,p.ch+y),l);y+=g.textContent.length}}(l,t,n)}}var Ni=navigator.userAgent,Ai=navigator.platform,Li=/gecko\/\d/i.test(Ni),Fi=/MSIE \d/.test(Ni),ji=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(Ni),Vi=/Edge\/(\d+)/.exec(Ni),zi=Fi||ji||Vi,Bi=zi&&(Fi?document.documentMode||6:+(Vi||ji)[1]),Hi=!Vi&&/WebKit\//.test(Ni),Wi=Hi&&/Qt\/\d+\.\d+/.test(Ni),qi=!Vi&&/Chrome\//.test(Ni),Ui=/Opera\//.test(Ni),Gi=/Apple Computer/.test(navigator.vendor),Ki=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(Ni),$i=/PhantomJS/.test(Ni),Zi=!Vi&&/AppleWebKit/.test(Ni)&&/Mobile\/\w+/.test(Ni),Qi=/Android/.test(Ni),Yi=Zi||Qi||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(Ni),Xi=Zi||/Mac/.test(Ai),Ji=/\bCrOS\b/.test(Ni),eo=/win/i.test(Ai),to=Ui&&Ni.match(/Version\/(\d*\.\d*)/);to&&(to=Number(to[1])),to&&to>=15&&(Ui=!1,Hi=!0);var no,ro=Xi&&(Wi||Ui&&(null==to||to<12.11)),io=Li||zi&&Bi>=9,oo=function(t,n){var r=t.className,i=e(n).exec(r);if(i){var o=r.slice(i.index+i[0].length);t.className=r.slice(0,i.index)+(o?i[1]+o:"")}};no=document.createRange?function(e,t,n,r){var i=document.createRange();return i.setEnd(r||e,n),i.setStart(e,t),i}:function(e,t,n){var r=document.body.createTextRange();try{r.moveToElementText(e.parentNode)}catch(e){return r}return r.collapse(!0),r.moveEnd("character",n),r.moveStart("character",t),r};var lo=function(e){e.select()};Zi?lo=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:zi&&(lo=function(e){try{e.select()}catch(e){}});var ao=function(){this.id=null};ao.prototype.set=function(e,t){clearTimeout(this.id),this.id=setTimeout(t,e)};var so,uo,co=30,po={toString:function(){return"CodeMirror.Pass"}},fo={scroll:!1},ho={origin:"*mouse"},mo={origin:"+move"},go=[""],yo=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,vo=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/,bo=!1,_o=!1,wo=null,xo=function(){function e(e){return e<=247?n.charAt(e):1424<=e&&e<=1524?"R":1536<=e&&e<=1785?r.charAt(e-1536):1774<=e&&e<=2220?"r":8192<=e&&e<=8203?"w":8204==e?"b":"L"}function t(e,t,n){this.level=e,this.from=t,this.to=n}var n="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",r="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111",i=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,o=/[stwN]/,l=/[LRr]/,a=/[Lb1n]/,s=/[1n]/;return function(n,r){var u="ltr"==r?"L":"R";if(0==n.length||"ltr"==r&&!i.test(n))return!1;for(var c=n.length,d=[],p=0;p<c;++p)d.push(e(n.charCodeAt(p)));for(var f=0,h=u;f<c;++f){var g=d[f];"m"==g?d[f]=h:h=g}for(var y=0,v=u;y<c;++y){var b=d[y];"1"==b&&"r"==v?d[y]="n":l.test(b)&&(v=b,"r"==b&&(d[y]="R"))}for(var _=1,w=d[0];_<c-1;++_){var x=d[_];"+"==x&&"1"==w&&"1"==d[_+1]?d[_]="1":","!=x||w!=d[_+1]||"1"!=w&&"n"!=w||(d[_]=w),w=x}for(var C=0;C<c;++C){var E=d[C];if(","==E)d[C]="N";else if("%"==E){var S=void 0;for(S=C+1;S<c&&"%"==d[S];++S);for(var O=C&&"!"==d[C-1]||S<c&&"1"==d[S]?"1":"N",T=C;T<S;++T)d[T]=O;C=S-1}}for(var k=0,D=u;k<c;++k){var I=d[k];"L"==D&&"1"==I?d[k]="L":l.test(I)&&(D=I)}for(var R=0;R<c;++R)if(o.test(d[R])){var M=void 0;for(M=R+1;M<c&&o.test(d[M]);++M);for(var P="L"==(R?d[R-1]:u),N=P==("L"==(M<c?d[M]:u))?P?"L":"R":u,A=R;A<M;++A)d[A]=N;R=M-1}for(var L,F=[],j=0;j<c;)if(a.test(d[j])){var V=j;for(++j;j<c&&a.test(d[j]);++j);F.push(new t(0,V,j))}else{var z=j,B=F.length;for(++j;j<c&&"L"!=d[j];++j);for(var H=z;H<j;)if(s.test(d[H])){z<H&&F.splice(B,0,new t(1,z,H));var W=H;for(++H;H<j&&s.test(d[H]);++H);F.splice(B,0,new t(2,W,H)),z=H}else++H;z<j&&F.splice(B,0,new t(1,z,j))}return"ltr"==r&&(1==F[0].level&&(L=n.match(/^\s+/))&&(F[0].from=L[0].length,F.unshift(new t(0,0,L[0].length))),1==m(F).level&&(L=n.match(/\s+$/))&&(m(F).to-=L[0].length,F.push(new t(0,c-L[0].length,c)))),"rtl"==r?F.reverse():F}}(),Co=[],Eo=function(e,t,n){if(e.addEventListener)e.addEventListener(t,n,!1);else if(e.attachEvent)e.attachEvent("on"+t,n);else{var r=e._handlers||(e._handlers={});r[t]=(r[t]||Co).concat(n)}},So=function(){if(zi&&Bi<9)return!1;var e=r("div");return"draggable"in e||"dragDrop"in e}(),Oo=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,n=[],r=e.length;t<=r;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),l=o.indexOf("\r");-1!=l?(n.push(o.slice(0,l)),t+=l+1):(n.push(o),t=i+1)}return n}:function(e){return e.split(/\r\n?|\n/)},To=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},ko=function(){var e=r("div");return"oncopy"in e||(e.setAttribute("oncopy","return;"),"function"==typeof e.oncopy)}(),Do=null,Io={},Ro={},Mo={},Po=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};Po.prototype.eol=function(){return this.pos>=this.string.length},Po.prototype.sol=function(){return this.pos==this.lineStart},Po.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Po.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},Po.prototype.eat=function(e){var t=this.string.charAt(this.pos);if("string"==typeof e?t==e:t&&(e.test?e.test(t):e(t)))return++this.pos,t},Po.prototype.eatWhile=function(e){for(var t=this.pos;this.eat(e););return this.pos>t},Po.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Po.prototype.skipToEnd=function(){this.pos=this.string.length},Po.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Po.prototype.backUp=function(e){this.pos-=e},Po.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=d(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?d(this.string,this.lineStart,this.tabSize):0)},Po.prototype.indentation=function(){return d(this.string,null,this.tabSize)-(this.lineStart?d(this.string,this.lineStart,this.tabSize):0)},Po.prototype.match=function(e,t,n){if("string"!=typeof e){var r=this.string.slice(this.pos).match(e);return r&&r.index>0?null:(r&&!1!==t&&(this.pos+=r[0].length),r)}var i=function(e){return n?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},Po.prototype.current=function(){return this.string.slice(this.start,this.pos)},Po.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Po.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Po.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var No=function(e,t){this.state=e,this.lookAhead=t},Ao=function(e,t,n,r){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=r||0,this.baseTokens=null,this.baseTokenPos=1};Ao.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},Ao.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},Ao.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},Ao.fromSaved=function(e,t,n){return t instanceof No?new Ao(e,Ie(e.mode,t.state),n,t.lookAhead):new Ao(e,Ie(e.mode,t),n)},Ao.prototype.save=function(e){var t=!1!==e?Ie(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new No(t,this.maxLookAhead):t};var Lo=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n},Fo=function(e,t,n){this.text=e,$(this,t),this.height=n?n(this):1};Fo.prototype.lineNo=function(){return D(this)},ve(Fo);var jo,Vo={},zo={},Bo=null,Ho=null,Wo={left:0,right:0,top:0,bottom:0},qo=function(e,t,n){this.cm=n;var i=this.vert=r("div",[r("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),o=this.horiz=r("div",[r("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");e(i),e(o),Eo(i,"scroll",function(){i.clientHeight&&t(i.scrollTop,"vertical")}),Eo(o,"scroll",function(){o.clientWidth&&t(o.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,zi&&Bi<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};qo.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,r=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?r+"px":"0";var i=e.viewHeight-(t?r:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?r+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(n?r:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==r&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?r:0,bottom:t?r:0}},qo.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},qo.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},qo.prototype.zeroWidthHack=function(){this.horiz.style.height=this.vert.style.width=Xi&&!Ki?"12px":"18px",this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new ao,this.disableVert=new ao},qo.prototype.enableZeroWidthBar=function(e,t,n){function r(){var i=e.getBoundingClientRect();("vert"==n?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.pointerEvents="none":t.set(1e3,r)}e.style.pointerEvents="auto",t.set(1e3,r)},qo.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Uo=function(){};Uo.prototype.update=function(){return{bottom:0,right:0}},Uo.prototype.setScrollLeft=function(){},Uo.prototype.setScrollTop=function(){},Uo.prototype.clear=function(){};var Go={native:qo,null:Uo},Ko=0,$o=function(e,t,n){var r=e.display;this.viewport=t,this.visible=tn(r,e.doc,t),this.editorIsHidden=!r.wrapper.offsetWidth,this.wrapperHeight=r.wrapper.clientHeight,this.wrapperWidth=r.wrapper.clientWidth,this.oldDisplayWidth=pt(e),this.force=n,this.dims=jt(e),this.events=[]};$o.prototype.signal=function(e,t){ye(e,t)&&this.events.push(arguments)},$o.prototype.finish=function(){for(var e=0;e<this.events.length;e++)he.apply(null,this.events[e])};var Zo=0,Qo=null;zi?Qo=-.53:Li?Qo=15:qi?Qo=-.7:Gi&&(Qo=-1/3);var Yo=function(e,t){this.ranges=e,this.primIndex=t};Yo.prototype.primary=function(){return this.ranges[this.primIndex]},Yo.prototype.equals=function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var n=this.ranges[t],r=e.ranges[t];if(!A(n.anchor,r.anchor)||!A(n.head,r.head))return!1}return!0},Yo.prototype.deepCopy=function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new Xo(L(this.ranges[t].anchor),L(this.ranges[t].head));return new Yo(e,this.primIndex)},Yo.prototype.somethingSelected=function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},Yo.prototype.contains=function(e,t){t||(t=e);for(var n=0;n<this.ranges.length;n++){var r=this.ranges[n];if(N(t,r.from())>=0&&N(e,r.to())<=0)return n}return-1};var Xo=function(e,t){this.anchor=e,this.head=t};Xo.prototype.from=function(){return j(this.anchor,this.head)},Xo.prototype.to=function(){return F(this.anchor,this.head)},Xo.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},Ar.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var n=e,r=e+t;n<r;++n){var i=this.lines[n];this.height-=i.height,He(i),Qe(i,"delete")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,n){this.height+=n,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var r=0;r<t.length;++r)t[r].parent=this},iterN:function(e,t,n){for(var r=e+t;e<r;++e)if(n(this.lines[e]))return!0}},Lr.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var n=0;n<this.children.length;++n){var r=this.children[n],i=r.chunkSize();if(e<i){var o=Math.min(t,i-e),l=r.height;if(r.removeInner(e,o),this.height-=l-r.height,i==o&&(this.children.splice(n--,1),r.parent=null),0==(t-=o))break;e=0}else e-=i}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof Ar))){var a=[];this.collapse(a),this.children=[new Ar(a)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,n){this.size+=t.length,this.height+=n;for(var r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(e<=o){if(i.insertInner(e,t,n),i.lines&&i.lines.length>50){for(var l=i.lines.length%25+25,a=l;a<i.lines.length;){var s=new Ar(i.lines.slice(a,a+=25));i.height-=s.height,this.children.splice(++r,0,s),s.parent=this}i.lines=i.lines.slice(0,l),this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=new Lr(e.children.splice(e.children.length-5,5));if(e.parent){e.size-=t.size,e.height-=t.height;var n=p(e.parent.children,e);e.parent.children.splice(n+1,0,t)}else{var r=new Lr(e.children);r.parent=e,e.children=[r,t],e=r}t.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(e<o){var l=Math.min(t,o-e);if(i.iterN(e,l,n))return!0;if(0==(t-=l))break;e=0}else e-=o}}};var Jo=function(e,t,n){if(n)for(var r in n)n.hasOwnProperty(r)&&(this[r]=n[r]);this.doc=e,this.node=t};Jo.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,n=this.line,r=D(n);if(null!=r&&t){for(var i=0;i<t.length;++i)t[i]==this&&t.splice(i--,1);t.length||(n.widgets=null);var o=lt(this);k(n,Math.max(0,n.height-o)),e&&(_n(e,function(){Fr(e,n,-o),Sn(e,r,"widget")}),Qe(e,"lineWidgetCleared",e,this,r))}},Jo.prototype.changed=function(){var e=this,t=this.height,n=this.doc.cm,r=this.line;this.height=null;var i=lt(this)-t;i&&(k(r,r.height+i),n&&_n(n,function(){n.curOp.forceUpdate=!0,Fr(n,r,i),Qe(n,"lineWidgetChanged",n,e,D(r))}))},ve(Jo);var el=0,tl=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++el};tl.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&vn(e),ye(this,"clear")){var n=this.find();n&&Qe(this,"clear",n.from,n.to)}for(var r=null,i=null,o=0;o<this.lines.length;++o){var l=this.lines[o],a=W(l.markedSpans,this);e&&!this.collapsed?Sn(e,D(l),"text"):e&&(null!=a.to&&(i=D(l)),null!=a.from&&(r=D(l))),l.markedSpans=q(l.markedSpans,a),null==a.from&&this.collapsed&&!oe(this.doc,l)&&e&&k(l,Lt(e.display))}if(e&&this.collapsed&&!e.options.lineWrapping)for(var s=0;s<this.lines.length;++s){var u=ne(this.lines[s]),c=se(u);c>e.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=c,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&En(e,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&vr(e.doc)),e&&Qe(e,"markerCleared",e,this,r,i),t&&bn(e),this.parent&&this.parent.clear()}},tl.prototype.find=function(e,t){null==e&&"bookmark"==this.type&&(e=1);for(var n,r,i=0;i<this.lines.length;++i){var o=this.lines[i],l=W(o.markedSpans,this);if(null!=l.from&&(n=P(t?o:D(o),l.from),-1==e))return n;if(null!=l.to&&(r=P(t?o:D(o),l.to),1==e))return r}return n&&{from:n,to:r}},tl.prototype.changed=function(){var e=this,t=this.find(-1,!0),n=this,r=this.doc.cm;t&&r&&_n(r,function(){var i=t.line,o=D(t.line),l=gt(r,o);if(l&&(_t(l),r.curOp.selectionChanged=r.curOp.forceUpdate=!0),r.curOp.updateMaxLine=!0,!oe(n.doc,i)&&null!=n.height){var a=n.height;n.height=null;var s=lt(n)-a;s&&k(i,i.height+s)}Qe(r,"markerChanged",r,e)})},tl.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=p(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},tl.prototype.detachLine=function(e){if(this.lines.splice(p(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}},ve(tl);var nl=function(e,t){this.markers=e,this.primary=t;for(var n=0;n<e.length;++n)e[n].parent=this};nl.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();Qe(this,"clear")}},nl.prototype.find=function(e,t){return this.primary.find(e,t)},ve(nl);var rl=0,il=function(e,t,n,r,i){if(!(this instanceof il))return new il(e,t,n,r,i);null==n&&(n=0),Lr.call(this,[new Ar([new Fo("",null)])]),this.first=n,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=n;var o=P(n,0);this.sel=Hn(o),this.history=new er(null),this.id=++rl,this.modeOption=t,this.lineSep=r,this.direction="rtl"==i?"rtl":"ltr",this.extend=!1,"string"==typeof e&&(e=this.splitLines(e)),Qn(this,{from:o,to:o,text:e}),mr(this,Hn(o),fo)};il.prototype=v(Lr.prototype,{constructor:il,iter:function(e,t,n){n?this.iterN(e-this.first,t-e,n):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var n=0,r=0;r<t.length;++r)n+=t[r].height;this.insertInner(e-this.first,t,n)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=T(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:Cn(function(e){var t=P(this.first,0),n=this.first+this.size-1;Sr(this,{from:t,to:P(n,S(this,n).text.length),text:this.splitLines(e),origin:"setValue",full:!0},!0),this.cm&&sn(this.cm,0,0),mr(this,Hn(t),fo)}),replaceRange:function(e,t,n,r){Ir(this,e,t=z(this,t),n=n?z(this,n):t,r)},getRange:function(e,t,n){var r=O(this,z(this,e),z(this,t));return!1===n?r:r.join(n||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){if(R(this,e))return S(this,e)},getLineNumber:function(e){return D(e)},getLineHandleVisualStart:function(e){return"number"==typeof e&&(e=S(this,e)),ne(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return z(this,e)},getCursor:function(e){var t=this.sel.primary();return null==e||"head"==e?t.head:"anchor"==e?t.anchor:"end"==e||"to"==e||!1===e?t.to():t.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Cn(function(e,t,n){fr(this,z(this,"number"==typeof e?P(e,t||0):e),null,n)}),setSelection:Cn(function(e,t,n){fr(this,z(this,e),z(this,t||e),n)}),extendSelection:Cn(function(e,t,n){cr(this,z(this,e),t&&z(this,t),n)}),extendSelections:Cn(function(e,t){dr(this,B(this,e),t)}),extendSelectionsBy:Cn(function(e,t){dr(this,B(this,g(this.sel.ranges,e)),t)}),setSelections:Cn(function(e,t,n){if(e.length){for(var r=[],i=0;i<e.length;i++)r[i]=new Xo(z(this,e[i].anchor),z(this,e[i].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),mr(this,Bn(r,t),n)}}),addSelection:Cn(function(e,t,n){var r=this.sel.ranges.slice(0);r.push(new Xo(z(this,e),z(this,t||e))),mr(this,Bn(r,r.length-1),n)}),getSelection:function(e){for(var t,n=this.sel.ranges,r=0;r<n.length;r++){var i=O(this,n[r].from(),n[r].to());t=t?t.concat(i):i}return!1===e?t:t.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],n=this.sel.ranges,r=0;r<n.length;r++){var i=O(this,n[r].from(),n[r].to());!1!==e&&(i=i.join(e||this.lineSeparator())),t[r]=i}return t},replaceSelection:function(e,t,n){for(var r=[],i=0;i<this.sel.ranges.length;i++)r[i]=e;this.replaceSelections(r,t,n||"+input")},replaceSelections:Cn(function(e,t,n){for(var r=[],i=this.sel,o=0;o<i.ranges.length;o++){var l=i.ranges[o];r[o]={from:l.from(),to:l.to(),text:this.splitLines(e[o]),origin:n}}for(var a=t&&"end"!=t&&function(e,t,n){for(var r=[],i=P(e.first,0),o=i,l=0;l<t.length;l++){var a=t[l],s=Gn(a.from,i,o),u=Gn(Wn(a),i,o);if(i=a.to,o=u,"around"==n){var c=e.sel.ranges[l],d=N(c.head,c.anchor)<0;r[l]=new Xo(d?u:s,d?s:u)}else r[l]=new Xo(s,s)}return new Yo(r,e.sel.primIndex)}(this,r,t),s=r.length-1;s>=0;s--)Sr(this,r[s]);a?hr(this,a):this.cm&&an(this.cm)}),undo:Cn(function(){Tr(this,"undo")}),redo:Cn(function(){Tr(this,"redo")}),undoSelection:Cn(function(){Tr(this,"undo",!0)}),redoSelection:Cn(function(){Tr(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r<e.done.length;r++)e.done[r].ranges||++t;for(var i=0;i<e.undone.length;i++)e.undone[i].ranges||++n;return{undo:t,redo:n}},clearHistory:function(){this.history=new er(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:sr(this.history.done),undone:sr(this.history.undone)}},setHistory:function(e){var t=this.history=new er(this.history.maxGeneration);t.done=sr(e.done.slice(0),null,!0),t.undone=sr(e.undone.slice(0),null,!0)},setGutterMarker:Cn(function(e,t,n){return Nr(this,e,"gutter",function(e){var r=e.gutterMarkers||(e.gutterMarkers={});return r[t]=n,!n&&w(r)&&(e.gutterMarkers=null),!0})}),clearGutter:Cn(function(e){var t=this;this.iter(function(n){n.gutterMarkers&&n.gutterMarkers[e]&&Nr(t,n,"gutter",function(){return n.gutterMarkers[e]=null,w(n.gutterMarkers)&&(n.gutterMarkers=null),!0})})}),lineInfo:function(e){var t;if("number"==typeof e){if(!R(this,e))return null;if(t=e,!(e=S(this,e)))return null}else if(null==(t=D(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:Cn(function(t,n,r){return Nr(this,t,"gutter"==n?"gutter":"class",function(t){var i="text"==n?"textClass":"background"==n?"bgClass":"gutter"==n?"gutterClass":"wrapClass";if(t[i]){if(e(r).test(t[i]))return!1;t[i]+=" "+r}else t[i]=r;return!0})}),removeLineClass:Cn(function(t,n,r){return Nr(this,t,"gutter"==n?"gutter":"class",function(t){var i="text"==n?"textClass":"background"==n?"bgClass":"gutter"==n?"gutterClass":"wrapClass",o=t[i];if(!o)return!1;if(null==r)t[i]=null;else{var l=o.match(e(r));if(!l)return!1;var a=l.index+l[0].length;t[i]=o.slice(0,l.index)+(l.index&&a!=o.length?" ":"")+o.slice(a)||null}return!0})}),addLineWidget:Cn(function(e,t,n){return function(e,r,i,o){var l=new Jo(e,t,n),a=e.cm;return a&&l.noHScroll&&(a.display.alignWidgets=!0),Nr(e,r,"widget",function(t){var n=t.widgets||(t.widgets=[]);if(null==l.insertAt?n.push(l):n.splice(Math.min(n.length-1,Math.max(0,l.insertAt)),0,l),l.line=t,a&&!oe(e,t)){var r=ae(t)<e.scrollTop;k(t,t.height+lt(l)),r&&ln(a,l.height),a.curOp.forceUpdate=!0}return!0}),Qe(a,"lineWidgetAdded",a,l,"number"==typeof r?r:D(r)),l}(this,e)}),removeLineWidget:function(e){e.clear()},markText:function(e,t,n){return jr(this,z(this,e),z(this,t),n,n&&n.type||"range")},setBookmark:function(e,t){var n={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return e=z(this,e),jr(this,e,e,n,"bookmark")},findMarksAt:function(e){var t=[],n=S(this,(e=z(this,e)).line).markedSpans;if(n)for(var r=0;r<n.length;++r){var i=n[r];(null==i.from||i.from<=e.ch)&&(null==i.to||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,n){e=z(this,e),t=z(this,t);var r=[],i=e.line;return this.iter(e.line,t.line+1,function(o){var l=o.markedSpans;if(l)for(var a=0;a<l.length;a++){var s=l[a];null!=s.to&&i==e.line&&e.ch>=s.to||null==s.from&&i!=e.line||null!=s.from&&i==t.line&&s.from>=t.ch||n&&!n(s.marker)||r.push(s.marker.parent||s.marker)}++i}),r},getAllMarks:function(){var e=[];return this.iter(function(t){var n=t.markedSpans;if(n)for(var r=0;r<n.length;++r)null!=n[r].from&&e.push(n[r].marker)}),e},posFromIndex:function(e){var t,n=this.first,r=this.lineSeparator().length;return this.iter(function(i){var o=i.text.length+r;if(o>e)return t=e,!0;e-=o,++n}),z(this,P(n,t))},indexFromPos:function(e){var t=(e=z(this,e)).ch;if(e.line<this.first||e.ch<0)return 0;var n=this.lineSeparator().length;return this.iter(this.first,e.line,function(e){t+=e.text.length+n}),t},copy:function(e){var t=new il(T(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,n=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<n&&(n=e.to);var r=new il(T(this,t,n),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(r.history=this.history),(this.linked||(this.linked=[])).push({doc:r,sharedHist:e.sharedHist}),r.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n],i=r.find(),o=e.clipPos(i.from),l=e.clipPos(i.to);if(N(o,l)){var a=jr(e,o,l,r.primary,r.primary.type);r.markers.push(a),a.parent=r}}}(r,Vr(this)),r},unlinkDoc:function(e){if(e instanceof _i&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t)if(this.linked[t].doc==e){this.linked.splice(t,1),e.unlinkDoc(this),zr(Vr(this));break}if(e.history==this.history){var n=[e.id];Yn(e,function(e){return n.push(e.id)},!0),e.history=new er(null),e.history.done=sr(this.history.done,n),e.history.undone=sr(this.history.undone,n)}},iterLinkedDocs:function(e){Yn(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):Oo(e)},lineSeparator:function(){return this.lineSep||"\n"},setDirection:Cn(function(e){"rtl"!=e&&(e="ltr"),e!=this.direction&&(this.direction=e,this.iter(function(e){return e.order=null}),this.cm&&function(e){_n(e,function(){Jn(e),En(e)})}(this.cm))})}),il.prototype.eachLine=il.prototype.iter;for(var ol=0,ll=!1,al={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",127:"Delete",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},sl=0;sl<10;sl++)al[sl+48]=al[sl+96]=String(sl);for(var ul=65;ul<=90;ul++)al[ul]=String.fromCharCode(ul);for(var cl=1;cl<=12;cl++)al[cl+111]=al[cl+63235]="F"+cl;var dl={};dl.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},dl.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},dl.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},dl.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},dl.default=Xi?dl.macDefault:dl.pcDefault;var pl={selectAll:Cr,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),fo)},killLine:function(e){return Xr(e,function(t){if(t.empty()){var n=S(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line<e.lastLine()?{from:t.head,to:P(t.head.line+1,0)}:{from:t.head,to:P(t.head.line,n)}}return{from:t.from(),to:t.to()}})},deleteLine:function(e){return Xr(e,function(t){return{from:P(t.from().line,0),to:z(e.doc,P(t.to().line+1,0))}})},delLineLeft:function(e){return Xr(e,function(e){return{from:P(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(e){return Xr(e,function(t){var n=e.charCoords(t.head,"div").top+5;return{from:e.coordsChar({left:0,top:n},"div"),to:t.from()}})},delWrappedLineRight:function(e){return Xr(e,function(t){var n=e.charCoords(t.head,"div").top+5,r=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},"div");return{from:t.from(),to:r}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(P(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(P(e.lastLine()))},goLineStart:function(e){return e.extendSelectionsBy(function(t){return ni(e,t.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(e){return e.extendSelectionsBy(function(t){return ri(e,t.head)},{origin:"+move",bias:1})},goLineEnd:function(e){return e.extendSelectionsBy(function(t){return function(e,t){var n=S(e.doc,t),r=function(e){for(var t;t=ee(e);)e=t.find(1,!0).line;return e}(n);return r!=n&&(t=D(r)),ti(!0,e,n,t,-1)}(e,t.head.line)},{origin:"+move",bias:-1})},goLineRight:function(e){return e.extendSelectionsBy(function(t){var n=e.cursorCoords(t.head,"div").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},"div")},mo)},goLineLeft:function(e){return e.extendSelectionsBy(function(t){var n=e.cursorCoords(t.head,"div").top+5;return e.coordsChar({left:0,top:n},"div")},mo)},goLineLeftSmart:function(e){return e.extendSelectionsBy(function(t){var n=e.cursorCoords(t.head,"div").top+5,r=e.coordsChar({left:0,top:n},"div");return r.ch<e.getLine(r.line).search(/\S/)?ri(e,t.head):r},mo)},goLineUp:function(e){return e.moveV(-1,"line")},goLineDown:function(e){return e.moveV(1,"line")},goPageUp:function(e){return e.moveV(-1,"page")},goPageDown:function(e){return e.moveV(1,"page")},goCharLeft:function(e){return e.moveH(-1,"char")},goCharRight:function(e){return e.moveH(1,"char")},goColumnLeft:function(e){return e.moveH(-1,"column")},goColumnRight:function(e){return e.moveH(1,"column")},goWordLeft:function(e){return e.moveH(-1,"word")},goGroupRight:function(e){return e.moveH(1,"group")},goGroupLeft:function(e){return e.moveH(-1,"group")},goWordRight:function(e){return e.moveH(1,"word")},delCharBefore:function(e){return e.deleteH(-1,"char")},delCharAfter:function(e){return e.deleteH(1,"char")},delWordBefore:function(e){return e.deleteH(-1,"word")},delWordAfter:function(e){return e.deleteH(1,"word")},delGroupBefore:function(e){return e.deleteH(-1,"group")},delGroupAfter:function(e){return e.deleteH(1,"group")},indentAuto:function(e){return e.indentSelection("smart")},indentMore:function(e){return e.indentSelection("add")},indentLess:function(e){return e.indentSelection("subtract")},insertTab:function(e){return e.replaceSelection("\t")},insertSoftTab:function(e){for(var t=[],n=e.listSelections(),r=e.options.tabSize,i=0;i<n.length;i++){var o=n[i].from(),l=d(e.getLine(o.line),o.ch,r);t.push(h(r-l%r))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection("add"):e.execCommand("insertTab")},transposeChars:function(e){return _n(e,function(){for(var t=e.listSelections(),n=[],r=0;r<t.length;r++)if(t[r].empty()){var i=t[r].head,o=S(e.doc,i.line).text;if(o)if(i.ch==o.length&&(i=new P(i.line,i.ch-1)),i.ch>0)i=new P(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),P(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var l=S(e.doc,i.line-1).text;l&&(i=new P(i.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),P(i.line-1,l.length-1),i,"+transpose"))}n.push(new Xo(i,i))}e.setSelections(n)})},newlineAndIndent:function(e){return _n(e,function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,"+input");t=e.listSelections();for(var r=0;r<t.length;r++)e.indentLine(t[r].from().line,null,!0);an(e)})},openLine:function(e){return e.replaceSelection("\n","start")},toggleOverwrite:function(e){return e.toggleOverwrite()}},fl=new ao,hl=null,ml=function(e,t,n){this.time=e,this.pos=t,this.button=n};ml.prototype.compare=function(e,t,n){return this.time+400>e&&0==N(t,this.pos)&&n==this.button};var gl,yl,vl={toString:function(){return"CodeMirror.Init"}},bl={},_l={};_i.defaults=bl,_i.optionHandlers=_l;var wl=[];_i.defineInitHook=function(e){return wl.push(e)};var xl=null,Cl=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new ao,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};Cl.prototype.init=function(e){function t(e){if(!me(i,e)){if(i.somethingSelected())xi({lineWise:!1,text:i.getSelections()}),"cut"==e.type&&i.replaceSelection("",null,"cut");else{if(!i.options.lineWiseCopyCut)return;var t=Oi(i);xi({lineWise:!0,text:t.text}),"cut"==e.type&&i.operation(function(){i.setSelections(t.ranges,0,fo),i.replaceSelection("",null,"cut")})}if(e.clipboardData){e.clipboardData.clearData();var n=xl.text.join("\n");if(e.clipboardData.setData("Text",n),e.clipboardData.getData("Text")==n)return void e.preventDefault()}var l=ki(),a=l.firstChild;i.display.lineSpace.insertBefore(l,i.display.lineSpace.firstChild),a.value=xl.text.join("\n");var s=document.activeElement;lo(a),setTimeout(function(){i.display.lineSpace.removeChild(l),s.focus(),s==o&&r.showPrimarySelection()},50)}}var n=this,r=this,i=r.cm,o=r.div=e.lineDiv;Ti(o,i.options.spellcheck),Eo(o,"paste",function(e){me(i,e)||Ei(e,i)||Bi<=11&&setTimeout(wn(i,function(){return n.updateFromDOM()}),20)}),Eo(o,"compositionstart",function(e){n.composing={data:e.data,done:!1}}),Eo(o,"compositionupdate",function(e){n.composing||(n.composing={data:e.data,done:!1})}),Eo(o,"compositionend",function(e){n.composing&&(e.data!=n.composing.data&&n.readFromDOMSoon(),n.composing.done=!0)}),Eo(o,"touchstart",function(){return r.forceCompositionEnd()}),Eo(o,"input",function(){n.composing||n.readFromDOMSoon()}),Eo(o,"copy",t),Eo(o,"cut",t)},Cl.prototype.prepareSelection=function(){var e=Ut(this.cm,!1);return e.focus=this.cm.state.focused,e},Cl.prototype.showSelection=function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},Cl.prototype.showPrimarySelection=function(){var e=window.getSelection(),t=this.cm,n=t.doc.sel.primary(),r=n.from(),i=n.to();if(t.display.viewTo==t.display.viewFrom||r.line>=t.display.viewTo||i.line<t.display.viewFrom)e.removeAllRanges();else{var o=Pi(t,e.anchorNode,e.anchorOffset),l=Pi(t,e.focusNode,e.focusOffset);if(!o||o.bad||!l||l.bad||0!=N(j(o,l),r)||0!=N(F(o,l),i)){var a=t.display.view,s=r.line>=t.display.viewFrom&&Ri(t,r)||{node:a[0].measure.map[2],offset:0},u=i.line<t.display.viewTo&&Ri(t,i);if(!u){var c=a[a.length-1].measure,d=c.maps?c.maps[c.maps.length-1]:c.map;u={node:d[d.length-1],offset:d[d.length-2]-d[d.length-3]}}if(s&&u){var p,f=e.rangeCount&&e.getRangeAt(0);try{p=no(s.node,s.offset,u.offset,u.node)}catch(e){}p&&(!Li&&t.state.focused?(e.collapse(s.node,s.offset),p.collapsed||(e.removeAllRanges(),e.addRange(p))):(e.removeAllRanges(),e.addRange(p)),f&&null==e.anchorNode?e.addRange(f):Li&&this.startGracePeriod()),this.rememberSelection()}else e.removeAllRanges()}}},Cl.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged=!0})},20)},Cl.prototype.showMultipleSelections=function(e){n(this.cm.display.cursorDiv,e.cursors),n(this.cm.display.selectionDiv,e.selection)},Cl.prototype.rememberSelection=function(){var e=window.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},Cl.prototype.selectionInEditor=function(){var e=window.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return o(this.div,t)},Cl.prototype.focus=function(){"nocursor"!=this.cm.options.readOnly&&(this.selectionInEditor()||this.showSelection(this.prepareSelection(),!0),this.div.focus())},Cl.prototype.blur=function(){this.div.blur()},Cl.prototype.getField=function(){return this.div},Cl.prototype.supportsTouch=function(){return!0},Cl.prototype.receivedFocus=function(){function e(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,e))}var t=this;this.selectionInEditor()?this.pollSelection():_n(this.cm,function(){return t.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,e)},Cl.prototype.selectionChanged=function(){var e=window.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},Cl.prototype.pollSelection=function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e=window.getSelection(),t=this.cm;if(Qi&&qi&&this.cm.options.gutters.length&&function(t){for(var n=e.anchorNode;n;n=n.parentNode)if(/CodeMirror-gutter-wrapper/.test(n.className))return!0;return!1}())return this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var n=Pi(t,e.anchorNode,e.anchorOffset),r=Pi(t,e.focusNode,e.focusOffset);n&&r&&_n(t,function(){mr(t.doc,Hn(n,r),fo),(n.bad||r.bad)&&(t.curOp.selectionChanged=!0)})}}},Cl.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e=this.cm,t=e.display,n=e.doc.sel.primary(),r=n.from(),i=n.to();if(0==r.ch&&r.line>e.firstLine()&&(r=P(r.line-1,S(e.doc,r.line-1).length)),i.ch==S(e.doc,i.line).text.length&&i.line<e.lastLine()&&(i=P(i.line+1,0)),r.line<t.viewFrom||i.line>t.viewTo-1)return!1;var o,l,a;r.line==t.viewFrom||0==(o=Wt(e,r.line))?(l=D(t.view[0].line),a=t.view[0].node):(l=D(t.view[o].line),a=t.view[o-1].node.nextSibling);var s,u,c=Wt(e,i.line);if(c==t.view.length-1?(s=t.viewTo-1,u=t.lineDiv.lastChild):(s=D(t.view[c+1].line)-1,u=t.view[c+1].node.previousSibling),!a)return!1;for(var d=e.doc.splitLines(function(e,t,n,r,i){function o(){u&&(s+=c,u=!1)}function l(e){e&&(o(),s+=e)}function a(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(null!=n)return void l(n||t.textContent.replace(/\u200b/g,""));var s,d=t.getAttribute("cm-marker");if(d){var p=e.findMarks(P(r,0),P(i+1,0),function(e){return function(t){return t.id==e}}(+d));return void(p.length&&(s=p[0].find(0))&&l(O(e.doc,s.from,s.to).join(c)))}if("false"==t.getAttribute("contenteditable"))return;var f=/^(pre|div|p)$/i.test(t.nodeName);f&&o();for(var h=0;h<t.childNodes.length;h++)a(t.childNodes[h]);f&&(u=!0)}else 3==t.nodeType&&l(t.nodeValue)}for(var s="",u=!1,c=e.doc.lineSeparator();a(t),t!=n;)t=t.nextSibling;return s}(e,a,u,l,s)),p=O(e.doc,P(l,0),P(s,S(e.doc,s).text.length));d.length>1&&p.length>1;)if(m(d)==m(p))d.pop(),p.pop(),s--;else{if(d[0]!=p[0])break;d.shift(),p.shift(),l++}for(var f=0,h=0,g=d[0],y=p[0],v=Math.min(g.length,y.length);f<v&&g.charCodeAt(f)==y.charCodeAt(f);)++f;for(var b=m(d),_=m(p),w=Math.min(b.length-(1==d.length?f:0),_.length-(1==p.length?f:0));h<w&&b.charCodeAt(b.length-h-1)==_.charCodeAt(_.length-h-1);)++h;if(1==d.length&&1==p.length&&l==r.line)for(;f&&f>r.ch&&b.charCodeAt(b.length-h-1)==_.charCodeAt(_.length-h-1);)f--,h++;d[d.length-1]=b.slice(0,b.length-h).replace(/^\u200b+/,""),d[0]=d[0].slice(f).replace(/\u200b+$/,"");var x=P(l,f),C=P(s,p.length?m(p).length-h:0);return d.length>1||d[0]||N(x,C)?(Ir(e.doc,d,x,C,"+input"),!0):void 0},Cl.prototype.ensurePolled=function(){this.forceCompositionEnd()},Cl.prototype.reset=function(){this.forceCompositionEnd()},Cl.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Cl.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},Cl.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||_n(this.cm,function(){return En(e.cm)})},Cl.prototype.setUneditable=function(e){e.contentEditable="false"},Cl.prototype.onKeyPress=function(e){0!=e.charCode&&(e.preventDefault(),this.cm.isReadOnly()||wn(this.cm,Ci)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Cl.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Cl.prototype.onContextMenu=function(){},Cl.prototype.resetPosition=function(){},Cl.prototype.needsContentAttribute=!0;var El=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new ao,this.hasSelection=!1,this.composing=null};El.prototype.init=function(e){function t(e){if(!me(i,e)){if(i.somethingSelected())xi({lineWise:!1,text:i.getSelections()});else{if(!i.options.lineWiseCopyCut)return;var t=Oi(i);xi({lineWise:!0,text:t.text}),"cut"==e.type?i.setSelections(t.ranges,null,fo):(r.prevInput="",l.value=t.text.join("\n"),lo(l))}"cut"==e.type&&(i.state.cutIncoming=!0)}}var n=this,r=this,i=this.cm,o=this.wrapper=ki(),l=this.textarea=o.firstChild;e.wrapper.insertBefore(o,e.wrapper.firstChild),Zi&&(l.style.width="0px"),Eo(l,"input",function(){zi&&Bi>=9&&n.hasSelection&&(n.hasSelection=null),r.poll()}),Eo(l,"paste",function(e){me(i,e)||Ei(e,i)||(i.state.pasteIncoming=!0,r.fastPoll())}),Eo(l,"cut",t),Eo(l,"copy",t),Eo(e.scroller,"paste",function(t){at(e,t)||me(i,t)||(i.state.pasteIncoming=!0,r.focus())}),Eo(e.lineSpace,"selectstart",function(t){at(e,t)||be(t)}),Eo(l,"compositionstart",function(){var e=i.getCursor("from");r.composing&&r.composing.range.clear(),r.composing={start:e,range:i.markText(e,i.getCursor("to"),{className:"CodeMirror-composing"})}}),Eo(l,"compositionend",function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)})},El.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,r=Ut(e);if(e.options.moveInputWithCursor){var i=Dt(e,n.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+l.top-o.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+l.left-o.left))}return r},El.prototype.showSelection=function(e){var t=this.cm.display;n(t.cursorDiv,e.cursors),n(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},El.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var n=t.getSelection();this.textarea.value=n,t.state.focused&&lo(this.textarea),zi&&Bi>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value="",zi&&Bi>=9&&(this.hasSelection=null))}},El.prototype.getField=function(){return this.textarea},El.prototype.supportsTouch=function(){return!1},El.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!Yi||l()!=this.textarea))try{this.textarea.focus()}catch(e){}},El.prototype.blur=function(){this.textarea.blur()},El.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},El.prototype.receivedFocus=function(){this.slowPoll()},El.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},El.prototype.fastPoll=function(){function e(){n.poll()||t?(n.pollingFast=!1,n.slowPoll()):(t=!0,n.polling.set(60,e))}var t=!1,n=this;n.pollingFast=!0,n.polling.set(20,e)},El.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||!t.state.focused||To(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=n.value;if(i==r&&!t.somethingSelected())return!1;if(zi&&Bi>=9&&this.hasSelection===i||Xi&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||r||(r="\u200b"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var l=0,a=Math.min(r.length,i.length);l<a&&r.charCodeAt(l)==i.charCodeAt(l);)++l;return _n(t,function(){Ci(t,i.slice(l),r.length-l,null,e.composing?"*compose":null),i.length>1e3||i.indexOf("\n")>-1?n.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},El.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},El.prototype.onKeyPress=function(){zi&&Bi>=9&&(this.hasSelection=null),this.fastPoll()},El.prototype.onContextMenu=function(e){function t(){if(null!=l.selectionStart){var e=i.somethingSelected(),t="\u200b"+(e?l.value:"");l.value="\u21da",l.value=t,r.prevInput=e?"":"\u200b",l.selectionStart=1,l.selectionEnd=t.length,o.selForContextMenu=i.doc.sel}}function n(){if(r.contextMenuPending=!1,r.wrapper.style.cssText=c,l.style.cssText=u,zi&&Bi<9&&o.scrollbars.setScrollTop(o.scroller.scrollTop=s),null!=l.selectionStart){(!zi||zi&&Bi<9)&&t();var e=0,n=function(){o.selForContextMenu==i.doc.sel&&0==l.selectionStart&&l.selectionEnd>0&&"\u200b"==r.prevInput?wn(i,Cr)(i):e++<10?o.detectingSelectAll=setTimeout(n,500):(o.selForContextMenu=null,o.input.reset())};o.detectingSelectAll=setTimeout(n,200)}}var r=this,i=r.cm,o=i.display,l=r.textarea,a=Ht(i,e),s=o.scroller.scrollTop;if(a&&!Ui){i.options.resetSelectionOnContextMenu&&-1==i.doc.sel.contains(a)&&wn(i,mr)(i.doc,Hn(a),fo);var u=l.style.cssText,c=r.wrapper.style.cssText;r.wrapper.style.cssText="position: absolute";var d=r.wrapper.getBoundingClientRect();l.style.cssText="position: absolute; width: 30px; height: 30px;\n      top: "+(e.clientY-d.top-5)+"px; left: "+(e.clientX-d.left-5)+"px;\n      z-index: 1000; background: "+(zi?"rgba(255, 255, 255, .05)":"transparent")+";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";var p;if(Hi&&(p=window.scrollY),o.input.focus(),Hi&&window.scrollTo(null,p),o.input.reset(),i.somethingSelected()||(l.value=r.prevInput=" "),r.contextMenuPending=!0,o.selForContextMenu=i.doc.sel,clearTimeout(o.detectingSelectAll),zi&&Bi>=9&&t(),io){xe(e);var f=function(){fe(window,"mouseup",f),setTimeout(n,20)};Eo(window,"mouseup",f)}else setTimeout(n,50)}},El.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e},El.prototype.setUneditable=function(){},El.prototype.needsContentAttribute=!1,function(e){function t(t,r,i,o){e.defaults[t]=r,i&&(n[t]=o?function(e,t,n){n!=vl&&i(e,t,n)}:i)}var n=e.optionHandlers;e.defineOption=t,e.Init=vl,t("value","",function(e,t){return e.setValue(t)},!0),t("mode",null,function(e,t){e.doc.modeOption=t,Kn(e)},!0),t("indentUnit",2,Kn,!0),t("indentWithTabs",!1),t("smartIndent",!0),t("tabSize",4,function(e){$n(e),xt(e),En(e)},!0),t("lineSeparator",null,function(e,t){if(e.doc.lineSep=t,t){var n=[],r=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,n.push(P(r,o))}r++});for(var i=n.length-1;i>=0;i--)Ir(e.doc,t,n[i],P(n[i].line,n[i].ch+t.length))}}),t("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),n!=vl&&e.refresh()}),t("specialCharPlaceholder",Ue,function(e){return e.refresh()},!0),t("electricChars",!0),t("inputStyle",Yi?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),t("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),t("rtlMoveVisually",!eo),t("wholeLineUpdateBefore",!0),t("theme","default",function(e){gi(e),yi(e)},!0),t("keyMap","default",function(e,t,n){var r=Yr(t),i=n!=vl&&Yr(n);i&&i.detach&&i.detach(e,r),r.attach&&r.attach(e,i||null)}),t("extraKeys",null),t("configureMouse",null),t("lineWrapping",!1,bi,!0),t("gutters",[],function(e){Fn(e.options),yi(e)},!0),t("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?Vt(e.display)+"px":"0",e.refresh()},!0),t("coverGutterNextToScrollbar",!1,function(e){return mn(e)},!0),t("scrollbarStyle","native",function(e){yn(e),mn(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),t("lineNumbers",!1,function(e){Fn(e.options),yi(e)},!0),t("firstLineNumber",1,yi,!0),t("lineNumberFormatter",function(e){return e},yi,!0),t("showCursorWhenSelecting",!1,qt,!0),t("resetSelectionOnContextMenu",!0),t("lineWiseCopyCut",!0),t("pasteLinesPerSelection",!0),t("readOnly",!1,function(e,t){"nocursor"==t&&(Xt(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),t("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),t("dragDrop",!0,vi),t("allowDropFileTypes",null),t("cursorBlinkRate",530),t("cursorScrollMargin",0),t("cursorHeight",1,qt,!0),t("singleCursorHeightPerLine",!0,qt,!0),t("workTime",100),t("workDelay",100),t("flattenSpans",!0,$n,!0),t("addModeClass",!1,$n,!0),t("pollInterval",100),t("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),t("historyEventDelay",1250),t("viewportMargin",10,function(e){return e.refresh()},!0),t("maxHighlightLength",1e4,$n,!0),t("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),t("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),t("autofocus",null),t("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0)}(_i),function(e){var t=e.optionHandlers,n=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,n){var r=this.options,i=r[e];r[e]==n&&"mode"!=e||(r[e]=n,t.hasOwnProperty(e)&&wn(this,t[e])(this,n,i),he(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Yr(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;n<t.length;++n)if(t[n]==e||t[n].name==e)return t.splice(n,1),!0},addOverlay:xn(function(t,n){var r=t.token?t:e.getMode(this.options,t);if(r.startState)throw new Error("Overlays may not be stateful.");!function(e,t,n){for(var r=0,i=n(t);r<e.length&&n(e[r])<=i;)r++;e.splice(r,0,t)}(this.state.overlays,{mode:r,modeSpec:t,opaque:n&&n.opaque,priority:n&&n.priority||0},function(e){return e.priority}),this.state.modeGen++,En(this)}),removeOverlay:xn(function(e){for(var t=this.state.overlays,n=0;n<t.length;++n){var r=t[n].modeSpec;if(r==e||"string"==typeof e&&r.name==e)return t.splice(n,1),this.state.modeGen++,void En(this)}}),indentLine:xn(function(e,t,n){"string"!=typeof t&&"number"!=typeof t&&(t=null==t?this.options.smartIndent?"smart":"prev":t?"add":"subtract"),R(this.doc,e)&&wi(this,e,t,n)}),indentSelection:xn(function(e){for(var t=this.doc.sel.ranges,n=-1,r=0;r<t.length;r++){var i=t[r];if(i.empty())i.head.line>n&&(wi(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex&&an(this));else{var o=i.from(),l=i.to(),a=Math.max(n,o.line);n=Math.min(this.lastLine(),l.line-(l.ch?0:1))+1;for(var s=a;s<n;++s)wi(this,s,e);var u=this.doc.sel.ranges;0==o.ch&&t.length==u.length&&u[r].from().ch>0&&pr(this.doc,r,new Xo(o,u[r].to()),fo)}}}),getTokenAt:function(e,t){return Ve(this,e,t)},getLineTokens:function(e,t){return Ve(this,P(e),t,!0)},getTokenTypeAt:function(e){e=z(this.doc,e);var t,n=Ne(this,S(this.doc,e.line)),r=0,i=(n.length-1)/2,o=e.ch;if(0==o)t=n[2];else for(;;){var l=r+i>>1;if((l?n[2*l-1]:0)>=o)i=l;else{if(!(n[2*l+1]<o)){t=n[2*l+2];break}r=l+1}}var a=t?t.indexOf("overlay "):-1;return a<0?t:0==a?null:t.slice(0,a-1)},getModeAt:function(t){var n=this.doc.mode;return n.innerMode?e.innerMode(n,this.getTokenAt(t).state).mode:n},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var r=[];if(!n.hasOwnProperty(t))return r;var i=n[t],o=this.getModeAt(e);if("string"==typeof o[t])i[o[t]]&&r.push(i[o[t]]);else if(o[t])for(var l=0;l<o[t].length;l++){var a=i[o[t][l]];a&&r.push(a)}else o.helperType&&i[o.helperType]?r.push(i[o.helperType]):i[o.name]&&r.push(i[o.name]);for(var s=0;s<i._global.length;s++){var u=i._global[s];u.pred(o,this)&&-1==p(r,u.val)&&r.push(u.val)}return r},getStateAfter:function(e,t){var n=this.doc;return e=V(n,null==e?n.first+n.size-1:e),Ae(this,e+1,t).state},cursorCoords:function(e,t){var n,r=this.doc.sel.primary();return n=null==e?r.head:"object"==typeof e?z(this.doc,e):e?r.from():r.to(),Dt(this,n,t||"page")},charCoords:function(e,t){return kt(this,z(this.doc,e),t||"page")},coordsChar:function(e,t){return e=Tt(this,e,t||"page"),Mt(this,e.left,e.top)},lineAtHeight:function(e,t){return e=Tt(this,{top:e,left:0},t||"page").top,I(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,n){var r,i=!1;if("number"==typeof e){var o=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:e>o&&(e=o,i=!0),r=S(this.doc,e)}else r=e;return Ot(this,r,{top:0,left:0},t||"page",n||i).top+(i?this.doc.height-ae(r):0)},defaultTextHeight:function(){return Lt(this.display)},defaultCharWidth:function(){return Ft(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,i){var o=this.display,l=(e=Dt(this,z(this.doc,e))).bottom,a=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),o.sizer.appendChild(t),"over"==r)l=e.top;else if("above"==r||"near"==r){var s=Math.max(o.wrapper.clientHeight,this.doc.height),u=Math.max(o.sizer.clientWidth,o.lineSpace.clientWidth);("above"==r||e.bottom+t.offsetHeight>s)&&e.top>t.offsetHeight?l=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=s&&(l=e.bottom),a+t.offsetWidth>u&&(a=u-t.offsetWidth)}t.style.top=l+"px",t.style.left=t.style.right="","right"==i?(a=o.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?a=0:"middle"==i&&(a=(o.sizer.clientWidth-t.offsetWidth)/2),t.style.left=a+"px"),n&&function(e,n){var r=on(e,{left:a,top:l,right:a+t.offsetWidth,bottom:l+t.offsetHeight});null!=r.scrollTop&&dn(e,r.scrollTop),null!=r.scrollLeft&&fn(e,r.scrollLeft)}(this)},triggerOnKeyDown:xn(si),triggerOnKeyPress:xn(ci),triggerOnKeyUp:ui,triggerOnMouseDown:xn(di),execCommand:function(e){if(pl.hasOwnProperty(e))return pl[e].call(null,this)},triggerElectric:xn(function(e){Si(this,e)}),findPosH:function(e,t,n,r){var i=1;t<0&&(i=-1,t=-t);for(var o=z(this.doc,e),l=0;l<t&&!(o=Di(this.doc,o,i,n,r)).hitSide;++l);return o},moveH:xn(function(e,t){var n=this;this.extendSelectionsBy(function(r){return n.display.shift||n.doc.extend||r.empty()?Di(n.doc,r.head,e,t,n.options.rtlMoveVisually):e<0?r.from():r.to()},mo)}),deleteH:xn(function(e,t){var n=this.doc;this.doc.sel.somethingSelected()?n.replaceSelection("",null,"+delete"):Xr(this,function(r){var i=Di(n,r.head,e,t,!1);return e<0?{from:i,to:r.head}:{from:r.head,to:i}})}),findPosV:function(e,t,n,r){var i=1,o=r;t<0&&(i=-1,t=-t);for(var l=z(this.doc,e),a=0;a<t;++a){var s=Dt(this,l,"div");if(null==o?o=s.left:s.left=o,(l=Ii(this,s,i,n)).hitSide)break}return l},moveV:xn(function(e,t){var n=this,r=this.doc,i=[],o=!this.display.shift&&!r.extend&&r.sel.somethingSelected();if(r.extendSelectionsBy(function(l){if(o)return e<0?l.from():l.to();var a=Dt(n,l.head,"div");null!=l.goalColumn&&(a.left=l.goalColumn),i.push(a.left);var s=Ii(n,a,e,t);return"page"==t&&l==r.sel.primary()&&ln(n,kt(n,s,"div").top-a.top),s},mo),i.length)for(var l=0;l<r.sel.ranges.length;l++)r.sel.ranges[l].goalColumn=i[l]}),findWordAt:function(e){var t=S(this.doc,e.line).text,n=e.ch,r=e.ch;if(t){var i=this.getHelper(e,"wordChars");"before"!=e.sticky&&r!=t.length||!n?++r:--n;for(var o=t.charAt(n),l=_(o,i)?function(e){return _(e,i)}:/\s/.test(o)?function(e){return/\s/.test(e)}:function(e){return!/\s/.test(e)&&!_(e)};n>0&&l(t.charAt(n-1));)--n;for(;r<t.length&&l(t.charAt(r));)++r}return new Xo(P(e.line,n),P(e.line,r))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?a(this.display.cursorDiv,"CodeMirror-overwrite"):oo(this.display.cursorDiv,"CodeMirror-overwrite"),he(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==l()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:xn(function(e,t){sn(this,e,t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-dt(this)-this.display.barHeight,width:e.scrollWidth-dt(this)-this.display.barWidth,clientHeight:ft(this),clientWidth:pt(this)}},scrollIntoView:xn(function(e,t){null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):"number"==typeof e?e={from:P(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line?function(e,t){un(e),e.curOp.scrollToPos=t}(this,e):cn(this,e.from,e.to,e.margin)}),setSize:xn(function(e,t){var n=this,r=function(e){return"number"==typeof e||/^\d+$/.test(String(e))?e+"px":e};null!=e&&(this.display.wrapper.style.width=r(e)),null!=t&&(this.display.wrapper.style.height=r(t)),this.options.lineWrapping&&wt(this);var i=this.display.viewFrom;this.doc.iter(i,this.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){Sn(n,i,"widget");break}++i}),this.curOp.forceUpdate=!0,he(this,"refresh",this)}),operation:function(e){return _n(this,e)},startOperation:function(){return vn(this)},endOperation:function(){return bn(this)},refresh:xn(function(){var e=this.display.cachedTextHeight;En(this),this.curOp.forceUpdate=!0,xt(this),sn(this,this.doc.scrollLeft,this.doc.scrollTop),Nn(this),(null==e||Math.abs(e-Lt(this.display))>.5)&&Bt(this),he(this,"refresh",this)}),swapDoc:xn(function(e){var t=this.doc;return t.cm=null,Xn(this,e),xt(this),this.display.input.reset(),sn(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,Qe(this,"swapDoc",this,t),t}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},ve(e),e.registerHelper=function(t,r,i){n.hasOwnProperty(t)||(n[t]=e[t]={_global:[]}),n[t][r]=i},e.registerGlobalHelper=function(t,r,i,o){e.registerHelper(t,r,o),n[t]._global.push({pred:i,val:o})}}(_i);var Sl="iter insert remove copy getEditor constructor".split(" ");for(var Ol in il.prototype)il.prototype.hasOwnProperty(Ol)&&p(Sl,Ol)<0&&(_i.prototype[Ol]=function(e){return function(){return e.apply(this.doc,arguments)}}(il.prototype[Ol]));return ve(il),_i.inputStyles={textarea:El,contenteditable:Cl},_i.defineMode=function(e){_i.defaults.mode||"null"==e||(_i.defaults.mode=e),function(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Io[e]=t}.apply(this,arguments)},_i.defineMIME=function(e,t){Ro[e]=t},_i.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),_i.defineMIME("text/plain","null"),_i.defineExtension=function(e,t){_i.prototype[e]=t},_i.defineDocExtension=function(e,t){il.prototype[e]=t},_i.fromTextArea=function(e,t){function n(){e.value=s.getValue()}if(t=t?c(t):{},t.value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var r=l();t.autofocus=r==e||null!=e.getAttribute("autofocus")&&r==document.body}var i;if(e.form&&(Eo(e.form,"submit",n),!t.leaveSubmitMethodAlone)){var o=e.form;i=o.submit;try{var a=o.submit=function(){n(),o.submit=i,o.submit(),o.submit=a}}catch(e){}}t.finishInit=function(t){t.save=n,t.getTextArea=function(){return e},t.toTextArea=function(){t.toTextArea=isNaN,n(),e.parentNode.removeChild(t.getWrapperElement()),e.style.display="",e.form&&(fe(e.form,"submit",n),"function"==typeof e.form.submit&&(e.form.submit=i))}},e.style.display="none";var s=_i(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return s},function(e){e.off=fe,e.on=Eo,e.wheelEventPixels=Vn,e.Doc=il,e.splitLines=Oo,e.countColumn=d,e.findColumn=f,e.isWordChar=b,e.Pass=po,e.signal=he,e.Line=Fo,e.changeEnd=Wn,e.scrollbarModel=Go,e.Pos=P,e.cmpPos=N,e.modes=Io,e.mimeModes=Ro,e.resolveMode=Te,e.getMode=ke,e.modeExtensions=Mo,e.extendMode=De,e.copyState=Ie,e.startState=Me,e.innerMode=Re,e.commands=pl,e.keyMap=dl,e.keyName=Qr,e.isModifierKey=$r,e.lookupKey=Kr,e.normalizeKeyMap=Gr,e.StringStream=Po,e.SharedTextMarker=nl,e.TextMarker=tl,e.LineWidget=Jo,e.e_preventDefault=be,e.e_stopPropagation=_e,e.e_stop=xe,e.addClass=a,e.contains=o,e.rmClass=oo,e.keyNames=al}(_i),_i.version="5.32.0",_i}()},ozyc:function(e,t,n){"use strict";t.a=function(e,t){return void 0===t&&(t=0),Object(r.b)(e,t)(this)};var r=n("YRqN")},"p/bR":function(e,t,n){var r=n("pa70"),i=n("ULWX"),o=n("KpI+"),l=n("+pQw"),a=n("rppw"),s=n("fC8q"),u={},c={};(t=e.exports=function(e,t,n,d,p){var f,h,m,g,y=p?function(){return e}:s(e),v=r(n,d,t?2:1),b=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(o(y)){for(f=a(e.length);f>b;b++)if((g=t?v(l(h=e[b])[0],h[1]):v(e[b]))===u||g===c)return g}else for(m=y.call(e);!(h=m.next()).done;)if((g=i(m,v,h.value,t))===u||g===c)return g}).BREAK=u,t.RETURN=c},pBmS:function(e,t,n){var r=n("lfBE");e.exports=function(e,t,n){for(var i in t)r(e,i,t[i],n);return e}},pQo2:function(e,t,n){"use strict";var r=n("6Xbx").__decorate,i=n("6Xbx").__metadata,o=n("6Xbx").__param;Object.defineProperty(t,"__esModule",{value:!0});var l=n("LMZF"),a=n("Un6q"),s=n("0nO6"),u=n("/zAi"),c=n("Rs3a"),d=n("/zAi"),p=n("4cOY"),f=n("P0cP"),h=function(){function e(){this.onClick=new l.EventEmitter}return e.prototype.handleClick=function(e){this.onClick.emit(e)},e}();r([l.Input(),i("design:type",Boolean)],h.prototype,"checked",void 0),r([l.Output(),i("design:type",l.EventEmitter)],h.prototype,"onClick",void 0),h=r([l.Component({selector:"p-dtRadioButton",template:'\n        <div class="ui-radiobutton ui-widget">\n            <div class="ui-helper-hidden-accessible">\n                <input type="radio" [checked]="checked">\n            </div>\n            <div class="ui-radiobutton-box ui-widget ui-radiobutton-relative ui-state-default" (click)="handleClick($event)"\n                        (mouseenter)="hover=true" (mouseleave)="hover=false"\n                        [ngClass]="{\'ui-state-hover\':hover,\'ui-state-active\':checked}">\n                <span class="ui-radiobutton-icon ui-clickable" [ngClass]="{\'fa fa-circle\':checked}"></span>\n            </div>\n        </div>\n    '})],h),t.DTRadioButton=h;var m=function(){function e(){this.onChange=new l.EventEmitter}return e.prototype.handleClick=function(e){this.disabled||this.onChange.emit({originalEvent:e,checked:!this.checked})},e}();r([l.Input(),i("design:type",Boolean)],m.prototype,"checked",void 0),r([l.Input(),i("design:type",Boolean)],m.prototype,"disabled",void 0),r([l.Output(),i("design:type",l.EventEmitter)],m.prototype,"onChange",void 0),m=r([l.Component({selector:"p-dtCheckbox",template:'\n        <div class="ui-chkbox ui-widget">\n            <div class="ui-helper-hidden-accessible">\n                <input type="checkbox" [checked]="checked">\n            </div>\n            <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default" (click)="handleClick($event)"\n                        (mouseover)="hover=true" (mouseout)="hover=false"\n                        [ngClass]="{\'ui-state-hover\':hover&&!disabled,\'ui-state-active\':checked&&!disabled,\'ui-state-disabled\':disabled}">\n                <span class="ui-chkbox-icon ui-clickable" [ngClass]="{\'fa fa-check\':checked}"></span>\n            </div>\n        </div>\n    '})],m),t.DTCheckbox=m;var g=function(){function e(e){this.viewContainer=e}return e.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.template,{$implicit:this.rowData,rowIndex:this.rowIndex})},e.prototype.ngOnDestroy=function(){this.view.destroy()},e}();r([l.Input(),i("design:type",l.TemplateRef)],g.prototype,"template",void 0),r([l.Input(),i("design:type",Object)],g.prototype,"rowData",void 0),r([l.Input(),i("design:type",Object)],g.prototype,"rowIndex",void 0),g=r([l.Component({selector:"p-rowExpansionLoader",template:""})],g),t.RowExpansionLoader=g;var y=function(e){this.dt=e};r([l.Input("pColumnHeaders"),i("design:type",Array)],y.prototype,"columns",void 0),y=r([l.Component({selector:"[pColumnHeaders]",template:'\n        <ng-template ngFor let-col [ngForOf]="columns" let-lastCol="last">\n            <th #headerCell [attr.id]="col.colId" [ngStyle]="col.headerStyle||col.style" [class]="col.headerStyleClass||col.styleClass" (click)="dt.sort($event,col)" [attr.colspan]="col.colspan" [attr.rowspan]="col.rowspan"\n                [ngClass]="{\'ui-state-default ui-unselectable-text\':true, \'ui-sortable-column\': col.sortable, \'ui-state-active\': dt.isSorted(col), \'ui-resizable-column\': dt.resizableColumns, \'ui-selection-column\':col.selectionMode,\n                            \'ui-helper-hidden\': col.hidden}"\n                (dragstart)="dt.onColumnDragStart($event)" (dragleave)="dt.onColumnDragleave($event)" (drop)="dt.onColumnDrop($event)" (mousedown)="dt.onHeaderMousedown($event,headerCell)"\n                [attr.tabindex]="col.sortable ? tabindex : null" (keydown)="dt.onHeaderKeydown($event,col)"\n                [attr.scope]="col.scope||(col.colspan ? \'colgroup\' : \'col\')">\n                <span class="ui-column-resizer ui-clickable" *ngIf="dt.resizableColumns && ((dt.columnResizeMode == \'fit\' && !lastCol) || dt.columnResizeMode == \'expand\')" (mousedown)="dt.initColumnResize($event)"></span>\n                <span class="ui-column-title" *ngIf="!col.selectionMode&&!col.headerTemplate">{{col.header}}</span>\n                <span class="ui-column-title" *ngIf="col.headerTemplate">\n                    <p-columnHeaderTemplateLoader [column]="col"></p-columnHeaderTemplateLoader>\n                </span>\n                <span class="ui-sortable-column-icon fa fa-fw fa-sort" *ngIf="col.sortable"\n                     [ngClass]="{\'fa-sort-desc\': (dt.getSortOrder(col) == -1),\'fa-sort-asc\': (dt.getSortOrder(col) == 1)}"></span>\n                <input [attr.type]="col.filterType" class="ui-column-filter ui-inputtext ui-widget ui-state-default ui-corner-all" [attr.maxlength]="col.filterMaxlength" [attr.placeholder]="col.filterPlaceholder" *ngIf="col.filter&&!col.filterTemplate" [value]="dt.filters[col.filterField||col.field] ? dt.filters[col.filterField||col.field].value : \'\'"\n                    (click)="dt.onFilterInputClick($event)" (input)="dt.onFilterKeyup($event.target.value, col.filterField||col.field, col.filterMatchMode)"/>\n                <p-columnFilterTemplateLoader [column]="col" *ngIf="col.filter&&col.filterTemplate"></p-columnFilterTemplateLoader>\n                <p-dtCheckbox *ngIf="col.selectionMode==\'multiple\' && dt.showHeaderCheckbox === true" (onChange)="dt.toggleRowsWithCheckbox($event)" [checked]="dt.allSelected" [disabled]="dt.isEmpty()"></p-dtCheckbox>\n            </th>\n        </ng-template>\n    '}),o(0,l.Inject(l.forwardRef(function(){return w})))],y),t.ColumnHeaders=y;var v=function(e){this.dt=e};r([l.Input("pColumnFooters"),i("design:type",Array)],v.prototype,"columns",void 0),v=r([l.Component({selector:"[pColumnFooters]",template:'\n        <td *ngFor="let col of columns" [ngStyle]="col.footerStyle||col.style" [class]="col.footerStyleClass||col.styleClass"\n            [attr.colspan]="col.colspan" [attr.rowspan]="col.rowspan"\n            [ngClass]="{\'ui-state-default\':true, \'ui-helper-hidden\': col.hidden}">\n            <span class="ui-column-footer" *ngIf="!col.footerTemplate">{{col.footer}}</span>\n            <span class="ui-column-footer" *ngIf="col.footerTemplate">\n                <p-columnFooterTemplateLoader [column]="col"></p-columnFooterTemplateLoader>\n            </span>\n        </td>\n    '}),o(0,l.Inject(l.forwardRef(function(){return w})))],v),t.ColumnFooters=v;var b=function(){function e(e){this.dt=e}return e.prototype.visibleColumns=function(){return this.columns?this.columns.filter(function(e){return!e.hidden}):[]},e}();r([l.Input("pTableBody"),i("design:type",Array)],b.prototype,"columns",void 0),r([l.Input(),i("design:type",Array)],b.prototype,"data",void 0),b=r([l.Component({selector:"[pTableBody]",template:'\n        <ng-template ngFor let-rowData [ngForOf]="data" let-even="even" let-odd="odd" let-rowIndex="index" [ngForTrackBy]="dt.rowTrackBy">\n            <tr #rowGroupElement class="ui-widget-header ui-rowgroup-header"\n                *ngIf="dt.rowGroupMode==\'subheader\' && (rowIndex === 0||(dt.resolveFieldData(rowData,dt.groupField) !== dt.resolveFieldData(dt.dataToRender[rowIndex - 1], dt.groupField)))"\n                (click)="dt.onRowGroupClick($event)" [ngStyle]="{\'cursor\': dt.sortableRowGroup ? \'pointer\' : \'auto\'}">\n                <td [attr.colspan]="dt.visibleColumns().length">\n                    <a href="#" *ngIf="dt.expandableRowGroups" (click)="dt.toggleRowGroup($event,rowData)">\n                        <span class="fa fa-fw" [ngClass]="dt.isRowGroupExpanded(rowData) ? dt.expandedIcon : dt.collapsedIcon"></span>\n                    </a>\n                    <span class="ui-rowgroup-header-name">\n                        <p-templateLoader [template]="dt.rowGroupHeaderTemplate" [data]="rowData"></p-templateLoader>\n                    </span>\n                </td>\n            </tr>\n            <tr #rowElement *ngIf="!dt.expandableRowGroups||dt.isRowGroupExpanded(rowData)"\n                    (click)="dt.handleRowClick($event, rowData, rowIndex)" (dblclick)="dt.rowDblclick($event,rowData)" (contextmenu)="dt.onRowRightClick($event,rowData)" (touchend)="dt.handleRowTouchEnd($event)"\n                    [ngClass]="[even&&dt.rowGroupMode!=\'rowspan\'? \'ui-datatable-even\':\'\',\n                                odd&&dt.rowGroupMode!=\'rowspan\'?\'ui-datatable-odd\':\'\',\n                                dt.isSelected(rowData)? \'ui-state-highlight\': \'\',\n                                dt.isRowExpanded(rowData) ? \'ui-expanded-row\': \'\',\n                                dt.getRowStyleClass(rowData,rowIndex)]">\n                <ng-template ngFor let-col [ngForOf]="columns" let-colIndex="index">\n                    <td #cell *ngIf="!dt.rowGroupMode || (dt.rowGroupMode == \'subheader\') ||\n                        (dt.rowGroupMode==\'rowspan\' && ((dt.sortField==col.field && dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].index == rowIndex) || (dt.sortField!=col.field)))"\n                        [ngStyle]="col.bodyStyle||col.style" [class]="col.bodyStyleClass||col.styleClass" (click)="dt.switchCellToEditMode(cell,col,rowData)"\n                        [ngClass]="{\'ui-editable-column\':col.editable,\'ui-selection-column\':col.selectionMode, \'ui-helper-hidden\': col.hidden}"\n                        [attr.rowspan]="(dt.rowGroupMode==\'rowspan\' && dt.sortField == col.field && dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].index == rowIndex) ? dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].size : null">\n                        <span class="ui-column-title" *ngIf="dt.responsive">{{col.header}}</span>\n                        <span class="ui-cell-data" *ngIf="!col.bodyTemplate && !col.expander && !col.selectionMode">{{dt.resolveFieldData(rowData,col.field)}}</span>\n                        <span class="ui-cell-data" *ngIf="col.bodyTemplate">\n                            <p-columnBodyTemplateLoader [column]="col" [rowData]="rowData" [rowIndex]="rowIndex + dt.first"></p-columnBodyTemplateLoader>\n                        </span>\n                        <div class="ui-cell-editor" *ngIf="col.editable">\n                            <input *ngIf="!col.editorTemplate" type="text" [(ngModel)]="rowData[col.field]"\n                                (keydown)="dt.onCellEditorKeydown($event, col, rowData, rowIndex)" (blur)="dt.onCellEditorBlur($event, col, rowData, rowIndex)"\n                                (input)="dt.onCellEditorInput($event, col, rowData, rowIndex)" (change)="dt.onCellEditorChange($event, col, rowData, rowIndex)"\n                                class="ui-inputtext ui-widget ui-state-default ui-corner-all"/>\n                            <a *ngIf="col.editorTemplate" class="ui-cell-editor-proxy-focus" href="#" (focus)="dt.onCustomEditorFocusPrev($event, colIndex)"></a>\n                            <p-columnEditorTemplateLoader *ngIf="col.editorTemplate" [column]="col" [rowData]="rowData" [rowIndex]="rowIndex"></p-columnEditorTemplateLoader>\n                            <a *ngIf="col.editorTemplate" class="ui-cell-editor-proxy-focus" href="#" (focus)="dt.onCustomEditorFocusNext($event, colIndex)"></a>\n                        </div>\n                        <a href="#" *ngIf="col.expander" (click)="dt.toggleRow(rowData,$event)">\n                            <span class="ui-row-toggler fa fa-fw ui-clickable" [ngClass]="dt.isRowExpanded(rowData) ? dt.expandedIcon : dt.collapsedIcon"></span>\n                        </a>\n                        <p-dtRadioButton *ngIf="col.selectionMode==\'single\'" (onClick)="dt.selectRowWithRadio($event, rowData)" [checked]="dt.isSelected(rowData)"></p-dtRadioButton>\n                        <p-dtCheckbox *ngIf="col.selectionMode==\'multiple\'" (onChange)="dt.toggleRowWithCheckbox($event,rowData)" [checked]="dt.isSelected(rowData)"></p-dtCheckbox>\n                    </td>\n                </ng-template>\n            </tr>\n            <tr *ngIf="dt.expandableRows && dt.isRowExpanded(rowData)" class="ui-expanded-row-content">\n                <td [attr.colspan]="dt.visibleColumns().length">\n                    <p-rowExpansionLoader [rowData]="rowData" [rowIndex]="rowIndex" [template]="dt.rowExpansionTemplate"></p-rowExpansionLoader>\n                </td>\n            </tr>\n            <tr class="ui-widget-header ui-rowgroup-footer" *ngIf="dt.rowGroupFooterTemplate && dt.rowGroupMode==\'subheader\' && ((rowIndex === dt.dataToRender.length - 1)||(dt.resolveFieldData(rowData,dt.groupField) !== dt.resolveFieldData(dt.dataToRender[rowIndex + 1],dt.groupField))) && (!dt.expandableRowGroups || dt.isRowGroupExpanded(rowData))">\n                <p-templateLoader class="ui-helper-hidden" [data]="rowData" [template]="dt.rowGroupFooterTemplate"></p-templateLoader>\n            </tr>\n        </ng-template>\n\n        <tr *ngIf="dt.isEmpty()" class="ui-widget-content ui-datatable-emptymessage-row" [style.visibility]="dt.loading ? \'hidden\' : \'visible\'">\n            <td [attr.colspan]="dt.visibleColumns().length" class="ui-datatable-emptymessage">\n                <span *ngIf="!dt.emptyMessageTemplate">{{dt.emptyMessage}}</span>\n                <p-templateLoader [template]="dt.emptyMessageTemplate"></p-templateLoader>\n            </td>\n        </tr>\n    '}),o(0,l.Inject(l.forwardRef(function(){return w})))],b),t.TableBody=b;var _=function(){function e(e,t,n,r,i){this.dt=e,this.domHandler=t,this.el=n,this.renderer=r,this.zone=i,this.onVirtualScroll=new l.EventEmitter}return e.prototype.ngAfterViewInit=function(){this.initScrolling()},e.prototype.ngAfterViewChecked=function(){var e=this;if(this.virtualScroll&&!this.rowHeight){var t=this.domHandler.findSingle(this.scrollTable,"tr.ui-widget-content:not(.ui-datatable-emptymessage-row)");t&&(this.rowHeight=this.domHandler.getOuterHeight(t))}this.frozen||this.zone.runOutsideAngular(function(){setTimeout(function(){e.alignScrollBar()},1)})},e.prototype.initScrolling=function(){var e=this;this.scrollHeader=this.scrollHeaderViewChild.nativeElement,this.scrollHeaderBox=this.scrollHeaderBoxViewChild.nativeElement,this.scrollBody=this.scrollBodyViewChild.nativeElement,this.scrollTable=this.scrollTableViewChild.nativeElement,this.scrollTableWrapper=this.scrollTableWrapperViewChild.nativeElement,this.scrollFooter=this.scrollFooterViewChild?this.scrollFooterViewChild.nativeElement:null,this.scrollFooterBox=this.scrollFooterBoxViewChild?this.scrollFooterBoxViewChild.nativeElement:null,this.setScrollHeight(),this.frozen||this.zone.runOutsideAngular(function(){e.scrollHeader.addEventListener("scroll",e.onHeaderScroll.bind(e)),e.scrollBody.addEventListener("scroll",e.onBodyScroll.bind(e))}),this.frozen?this.scrollBody.style.paddingBottom=this.domHandler.calculateScrollbarWidth()+"px":this.alignScrollBar()},e.prototype.onBodyScroll=function(e){var t=this,n=this.el.nativeElement.previousElementSibling;if(n)var r=this.domHandler.findSingle(n,".ui-datatable-scrollable-body");if(this.scrollHeaderBox.style.marginLeft=-1*this.scrollBody.scrollLeft+"px",this.scrollFooterBox&&(this.scrollFooterBox.style.marginLeft=-1*this.scrollBody.scrollLeft+"px"),r&&(r.scrollTop=this.scrollBody.scrollTop),this.virtualScroll){var i=this.domHandler.getOuterHeight(this.scrollBody),o=this.domHandler.getOuterHeight(this.scrollTable),l=this.rowHeight*this.dt.rows,a=this.domHandler.getOuterHeight(this.scrollTableWrapper)/l||1;if(this.scrollBody.scrollTop+i>parseFloat(this.scrollTable.style.top)+o||this.scrollBody.scrollTop<parseFloat(this.scrollTable.style.top)){var s=Math.floor(this.scrollBody.scrollTop*a/this.scrollBody.scrollHeight)+1;this.onVirtualScroll.emit({page:s,callback:function(){t.scrollTable.style.top=(s-1)*l+"px"}})}}},e.prototype.setScrollHeight=function(){if(this.dt.scrollHeight)if(-1!==this.dt.scrollHeight.indexOf("%")){this.scrollBody.style.visibility="hidden",this.scrollBody.style.height="100px";var e=this.domHandler.getOuterHeight(this.dt.el.nativeElement.children[0]),t=this.domHandler.getOuterHeight(this.dt.el.nativeElement.parentElement)*parseInt(this.dt.scrollHeight)/100-(e-100);this.scrollBody.style.height="auto",this.scrollBody.style.maxHeight=t+"px",this.scrollBody.style.visibility="visible"}else this.scrollBody.style.maxHeight=this.dt.scrollHeight},e.prototype.onHeaderScroll=function(e){this.scrollHeader.scrollLeft=0},e.prototype.hasVerticalOverflow=function(){return this.domHandler.getOuterHeight(this.scrollTable)>this.domHandler.getOuterHeight(this.scrollBody)},e.prototype.alignScrollBar=function(){var e=this.hasVerticalOverflow()?this.domHandler.calculateScrollbarWidth():0;this.scrollHeaderBox.style.marginRight=e+"px",this.scrollFooterBox&&(this.scrollFooterBox.style.marginRight=e+"px")},e.prototype.ngOnDestroy=function(){this.scrollHeader.removeEventListener("scroll",this.onHeaderScroll),this.scrollBody.removeEventListener("scroll",this.onBodyScroll)},e}();r([l.Input("pScrollableView"),i("design:type",Array)],_.prototype,"columns",void 0),r([l.Input(),i("design:type",d.HeaderColumnGroup)],_.prototype,"headerColumnGroup",void 0),r([l.Input(),i("design:type",d.HeaderColumnGroup)],_.prototype,"footerColumnGroup",void 0),r([l.ViewChild("scrollHeader"),i("design:type",l.ElementRef)],_.prototype,"scrollHeaderViewChild",void 0),r([l.ViewChild("scrollHeaderBox"),i("design:type",l.ElementRef)],_.prototype,"scrollHeaderBoxViewChild",void 0),r([l.ViewChild("scrollBody"),i("design:type",l.ElementRef)],_.prototype,"scrollBodyViewChild",void 0),r([l.ViewChild("scrollTable"),i("design:type",l.ElementRef)],_.prototype,"scrollTableViewChild",void 0),r([l.ViewChild("scrollTableWrapper"),i("design:type",l.ElementRef)],_.prototype,"scrollTableWrapperViewChild",void 0),r([l.ViewChild("scrollFooter"),i("design:type",l.ElementRef)],_.prototype,"scrollFooterViewChild",void 0),r([l.ViewChild("scrollFooterBox"),i("design:type",l.ElementRef)],_.prototype,"scrollFooterBoxViewChild",void 0),r([l.Input(),i("design:type",Boolean)],_.prototype,"frozen",void 0),r([l.Input(),i("design:type",String)],_.prototype,"width",void 0),r([l.Input(),i("design:type",Boolean)],_.prototype,"virtualScroll",void 0),r([l.Output(),i("design:type",l.EventEmitter)],_.prototype,"onVirtualScroll",void 0),_=r([l.Component({selector:"[pScrollableView]",template:'\n        <div #scrollHeader class="ui-widget-header ui-datatable-scrollable-header" [ngStyle]="{\'width\': width}">\n            <div #scrollHeaderBox  class="ui-datatable-scrollable-header-box">\n                <table [ngClass]="dt.tableStyleClass" [ngStyle]="dt.tableStyle">\n                    <thead class="ui-datatable-thead">\n                        <tr *ngIf="!headerColumnGroup" class="ui-state-default" [pColumnHeaders]="columns"></tr>\n                        <ng-template [ngIf]="headerColumnGroup">\n                            <tr *ngFor="let headerRow of headerColumnGroup.rows" class="ui-state-default" [pColumnHeaders]="headerRow.columns"></tr>\n                        </ng-template>\n                    </thead>\n                    <tbody *ngIf="dt.frozenValue" [ngClass]="{\'ui-datatable-data ui-widget-content\': true, \'ui-datatable-hoverable-rows\': (dt.rowHover||dt.selectionMode)}" [pTableBody]="columns" [data]="dt.frozenValue"></tbody>\n                </table>\n            </div>\n        </div>\n        <div #scrollBody class="ui-datatable-scrollable-body" [ngStyle]="{\'width\': width}">\n            <div #scrollTableWrapper class="ui-datatable-scrollable-table-wrapper" style="position:relative">\n                <table #scrollTable [class]="dt.tableStyleClass" [ngStyle]="dt.tableStyle" [ngClass]="{\'ui-datatable-virtual-table\':virtualScroll}" style="top:0px">\n                    <colgroup class="ui-datatable-scrollable-colgroup">\n                        <col *ngFor="let col of columns" [ngStyle]="col.headerStyle||col.style" [ngClass]="{\'ui-helper-hidden\': col.hidden}"/>\n                    </colgroup>\n                    <tbody [ngClass]="{\'ui-datatable-data ui-widget-content\': true, \'ui-datatable-hoverable-rows\': (dt.rowHover||dt.selectionMode)}" [pTableBody]="columns" [data]="dt.dataToRender"></tbody>\n                </table>\n            </div>\n        </div>\n        <div #scrollFooter class="ui-widget-header ui-datatable-scrollable-footer" [ngStyle]="{\'width\': width}" *ngIf="dt.hasFooter()">\n            <div #scrollFooterBox  class="ui-datatable-scrollable-footer-box">\n                <table [ngClass]="dt.tableStyleClass" [ngStyle]="dt.tableStyle">\n                    <tfoot class="ui-datatable-tfoot">\n                        <tr *ngIf="!footerColumnGroup" [pColumnFooters]="columns" class="ui-state-default"></tr>\n                        <ng-template [ngIf]="footerColumnGroup">\n                            <tr *ngFor="let footerRow of footerColumnGroup.rows" class="ui-state-default" [pColumnFooters]="footerRow.columns"></tr>\n                        </ng-template>\n                    </tfoot>\n                </table>\n            </div>\n        </div>\n    '}),o(0,l.Inject(l.forwardRef(function(){return w})))],_),t.ScrollableView=_;var w=function(){function e(e,t,n,r,i,o,a){this.el=e,this.domHandler=t,this.differs=n,this.renderer=r,this.changeDetector=i,this.objectUtils=o,this.zone=a,this.pageLinks=5,this.selectionChange=new l.EventEmitter,this.showHeaderCheckbox=!0,this.onRowClick=new l.EventEmitter,this.onRowSelect=new l.EventEmitter,this.onRowUnselect=new l.EventEmitter,this.onRowDblclick=new l.EventEmitter,this.onHeaderCheckboxToggle=new l.EventEmitter,this.onContextMenuSelect=new l.EventEmitter,this.filterDelay=300,this.onLazyLoad=new l.EventEmitter,this.columnResizeMode="fit",this.onColResize=new l.EventEmitter,this.onColReorder=new l.EventEmitter,this.sortMode="single",this.defaultSortOrder=1,this.csvSeparator=",",this.exportFilename="download",this.emptyMessage="No records found",this.paginatorPosition="bottom",this.alwaysShowPaginator=!0,this.metaKeySelection=!0,this.rowTrackBy=function(e,t){return t},this.immutable=!0,this.compareSelectionBy="deepEquals",this.onEditInit=new l.EventEmitter,this.onEditComplete=new l.EventEmitter,this.onEdit=new l.EventEmitter,this.onEditCancel=new l.EventEmitter,this.onPage=new l.EventEmitter,this.onSort=new l.EventEmitter,this.onFilter=new l.EventEmitter,this.rowExpandMode="multiple",this.expandedIcon="fa-chevron-circle-down",this.collapsedIcon="fa-chevron-circle-right",this.tabindex=1,this.sortableRowGroup=!0,this.filters={},this.loadingIcon="fa-circle-o-notch",this.virtualScrollDelay=500,this.rowGroupExpandMode="multiple",this.valueChange=new l.EventEmitter,this.firstChange=new l.EventEmitter,this.onRowExpand=new l.EventEmitter,this.onRowCollapse=new l.EventEmitter,this.onRowGroupExpand=new l.EventEmitter,this.onRowGroupCollapse=new l.EventEmitter,this.page=0,this.columnsChanged=!1,this._first=0,this._sortOrder=1,this.filterConstraints={startsWith:function(e,t){if(void 0===t||null===t||""===t.trim())return!0;if(void 0===e||null===e)return!1;var n=t.toLowerCase();return e.toString().toLowerCase().slice(0,n.length)===n},contains:function(e,t){return void 0===t||null===t||"string"==typeof t&&""===t.trim()||void 0!==e&&null!==e&&-1!==e.toString().toLowerCase().indexOf(t.toLowerCase())},endsWith:function(e,t){if(void 0===t||null===t||""===t.trim())return!0;if(void 0===e||null===e)return!1;var n=t.toString().toLowerCase();return-1!==e.toString().toLowerCase().indexOf(n,e.toString().length-n.length)},equals:function(e,t){return void 0===t||null===t||"string"==typeof t&&""===t.trim()||void 0!==e&&null!==e&&e.toString().toLowerCase()==t.toString().toLowerCase()},notEquals:function(e,t){return!(void 0===t||null===t||"string"==typeof t&&""===t.trim()||void 0!==e&&null!==e&&e.toString().toLowerCase()==t.toString().toLowerCase())},in:function(e,t){if(void 0===t||null===t||0===t.length)return!0;if(void 0===e||null===e)return!1;for(var n=0;n<t.length;n++)if(t[n]===e)return!0;return!1}},this.differ=n.find([]).create(null)}return e.prototype.ngOnInit=function(){this.lazy&&this.onLazyLoad.emit(this.createLazyLoadMetadata())},e.prototype.ngAfterContentInit=function(){var e=this;this.initColumns(),this.initColumnGroups(),this.columnsSubscription=this.cols.changes.subscribe(function(t){e.initColumns(),e.changeDetector.markForCheck()}),this.templates.forEach(function(t){switch(t.getType()){case"rowexpansion":e.rowExpansionTemplate=t.template;break;case"rowgroupheader":e.rowGroupHeaderTemplate=t.template;break;case"rowgroupfooter":e.rowGroupFooterTemplate=t.template;break;case"emptymessage":e.emptyMessageTemplate=t.template}})},e.prototype.ngAfterViewChecked=function(){if(this.columnsChanged&&this.el.nativeElement.offsetParent&&(this.resizableColumns&&this.initResizableColumns(),this.reorderableColumns&&this.initColumnReordering(),this.columnsChanged=!1),this.totalRecordsChanged&&this.virtualScroll&&this.virtualScrollableTableWrapper&&this.virtualScrollableTableWrapper.offsetParent){var e=this.domHandler.findSingle(this.virtualScrollableTableWrapper,"tr.ui-widget-content"),t=this.domHandler.getOuterHeight(e);this.virtualTableHeight=this._totalRecords*t,this.virtualScrollableTableWrapper.style.height=this.virtualTableHeight+"px",this.totalRecordsChanged=!1}},e.prototype.ngAfterViewInit=function(){var e=this;this.globalFilter&&(this.globalFilterFunction=this.renderer.listen(this.globalFilter,"keyup",function(){e.filterTimeout&&clearTimeout(e.filterTimeout),e.filterTimeout=setTimeout(function(){e._filter(),e.filterTimeout=null},e.filterDelay)})),this.virtualScrollableTableWrapper=this.domHandler.findSingle(this.el.nativeElement,"div.ui-datatable-scrollable-table-wrapper"),this.initialized=!0},Object.defineProperty(e.prototype,"multiSortMeta",{get:function(){return this._multiSortMeta},set:function(e){this._multiSortMeta=e,"multiple"===this.sortMode&&this.sortMultiple()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"sortField",{get:function(){return this._sortField},set:function(e){this._sortField=e,"single"===this.sortMode&&this.sortSingle()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"sortOrder",{get:function(){return this._sortOrder},set:function(e){this._sortOrder=e,"single"===this.sortMode&&this.sortSingle()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this._value},set:function(e){this.immutable?(this._value=e?e.slice():null,this.handleDataChange()):this._value=e,this.valueChange.emit(this.value)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"first",{get:function(){return this._first},set:function(e){var t=this.initialized&&this._first!==e;this._first=e,t&&this.paginate()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"totalRecords",{get:function(){return this._totalRecords},set:function(e){this._totalRecords=e,this.totalRecordsChanged=!0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"selection",{get:function(){return this._selection},set:function(e){if(this._selection=e,this.dataKey&&!this.preventSelectionKeysPropagation&&(this.selectionKeys={},this._selection))if(Array.isArray(this._selection))for(var t=0,n=this._selection;t<n.length;t++){var r=n[t];this.selectionKeys[String(this.objectUtils.resolveFieldData(r,this.dataKey))]=1}else this.selectionKeys[String(this.objectUtils.resolveFieldData(this._selection,this.dataKey))]=1;this.preventSelectionKeysPropagation=!1},enumerable:!0,configurable:!0}),e.prototype.ngDoCheck=function(){this.immutable||this.differ.diff(this.value)&&this.handleDataChange()},e.prototype.handleDataChange=function(){var e=this;this.paginator&&this.updatePaginator(),this.virtualScroll&&this.virtualScrollCallback&&this.virtualScrollCallback(),this.lazy||(this.hasFilter()&&this._filter(),this.preventSortPropagation?this.preventSortPropagation=!1:(this.sortField||this.multiSortMeta)&&(!this.sortColumn&&this.columns&&(this.sortColumn=this.columns.find(function(t){return t.field===e.sortField&&"custom"===t.sortable})),"single"==this.sortMode?this.sortSingle():"multiple"==this.sortMode&&this.sortMultiple())),this.updateDataToRender(this.filteredValue||this.value)},e.prototype.initColumns=function(){this.columns=this.cols.toArray(),this.initScrollableColumns(),this.columnsChanged=!0},e.prototype.initScrollableColumns=function(){this.scrollableColumns=[],this.frozenColumns=[];for(var e=0,t=this.columns;e<t.length;e++){var n=t[e];n.frozen?this.frozenColumns.push(n):this.scrollableColumns.push(n)}},e.prototype.initColumnGroups=function(){for(var e=this.headerColumnGroups.toArray(),t=this.footerColumnGroups.toArray(),n=0,r=e;n<r.length;n++)(l=r[n]).frozen?this.frozenHeaderColumnGroup=l:this.scrollableHeaderColumnGroup=l;for(var i=0,o=t;i<o.length;i++){var l;(l=o[i]).frozen?this.frozenFooterColumnGroup=l:this.scrollableFooterColumnGroup=l}},e.prototype.resolveFieldData=function(e,t){return this.objectUtils.resolveFieldData(e,t)},e.prototype.updateRowGroupMetadata=function(){if(this.rowGroupMetadata={},this.dataToRender)for(var e=0;e<this.dataToRender.length;e++){var t=this.resolveFieldData(this.dataToRender[e],this.sortField);0==e?this.rowGroupMetadata[t]={index:0,size:1}:t===this.resolveFieldData(this.dataToRender[e-1],this.sortField)?this.rowGroupMetadata[t].size++:this.rowGroupMetadata[t]={index:e,size:1}}},e.prototype.updatePaginator=function(){if(this.updateTotalRecords(),this.totalRecords&&this.first>=this.totalRecords){var e=Math.ceil(this.totalRecords/this.rows);this._first=Math.max((e-1)*this.rows,0)}},e.prototype.updateTotalRecords=function(){this.totalRecords=this.lazy?this.totalRecords:this.value?this.value.length:0},e.prototype.onPageChange=function(e){this._first=e.first,this.firstChange.emit(this.first),this.rows=e.rows,this.paginate()},e.prototype.paginate=function(){this.lazy?this.onLazyLoad.emit(this.createLazyLoadMetadata()):this.updateDataToRender(this.filteredValue||this.value),this.onPage.emit({first:this.first,rows:this.rows})},e.prototype.updateDataToRender=function(e){if((this.paginator||this.virtualScroll)&&e){this.dataToRender=[];for(var t=this.lazy?0:this.first,n=this.virtualScroll?this.first+2*this.rows:t+this.rows,r=t;r<n&&!(r>=e.length);r++)this.dataToRender.push(e[r])}else this.dataToRender=e;this.rowGroupMode&&this.updateRowGroupMetadata()},e.prototype.onVirtualScroll=function(e){var t=this;this._first=(e.page-1)*this.rows,this.virtualScrollCallback=e.callback,this.zone.run(function(){t.virtualScrollTimer&&clearTimeout(t.virtualScrollTimer),t.virtualScrollTimer=setTimeout(function(){t.lazy?t.onLazyLoad.emit(t.createLazyLoadMetadata()):t.updateDataToRender(t.filteredValue||t.value)},t.virtualScrollDelay)})},e.prototype.onHeaderKeydown=function(e,t){13==e.keyCode&&(this.sort(e,t),e.preventDefault())},e.prototype.onHeaderMousedown=function(e,t){this.reorderableColumns&&("INPUT"!==e.target.nodeName?t.draggable=!0:"INPUT"===e.target.nodeName&&(t.draggable=!1))},e.prototype.sort=function(e,t){if(t.sortable){var n=e.target.nodeName;if("TH"==n&&this.domHandler.hasClass(e.target,"ui-sortable-column")||("SPAN"==n||"DIV"==n)&&!this.domHandler.hasClass(e.target,"ui-clickable")){this.immutable||(this.preventSortPropagation=!0);var r=t.sortField||t.field;this._sortOrder=this.sortField===r?-1*this.sortOrder:this.defaultSortOrder,this._sortField=r,this.sortColumn=t,"multiple"==this.sortMode&&(this.multiSortMeta&&(e.metaKey||e.ctrlKey)||(this._multiSortMeta=[]),this.addSortMeta({field:this.sortField,order:this.sortOrder})),this.lazy?(this._first=0,this.onLazyLoad.emit(this.createLazyLoadMetadata())):"multiple"==this.sortMode?this.sortMultiple():this.sortSingle(),this.onSort.emit({field:this.sortField,order:this.sortOrder,multisortmeta:this.multiSortMeta})}this.updateDataToRender(this.filteredValue||this.value)}},e.prototype.sortSingle=function(){var e=this;this.value&&(this.sortColumn&&"custom"===this.sortColumn.sortable?(this.preventSortPropagation=!0,this.sortColumn.sortFunction.emit({field:this.sortField,order:this.sortOrder})):this.value.sort(function(t,n){var r=e.resolveFieldData(t,e.sortField),i=e.resolveFieldData(n,e.sortField),o=null;return o=null==r&&null!=i?-1:null!=r&&null==i?1:null==r&&null==i?0:"string"==typeof r&&"string"==typeof i?r.localeCompare(i):r<i?-1:r>i?1:0,e.sortOrder*o}),this._first=0,this.hasFilter()&&this._filter())},e.prototype.sortMultiple=function(){var e=this;this.value&&(this.value.sort(function(t,n){return e.multisortField(t,n,e.multiSortMeta,0)}),this.hasFilter()&&this._filter())},e.prototype.multisortField=function(e,t,n,r){var i=this.resolveFieldData(e,n[r].field),o=this.resolveFieldData(t,n[r].field),l=null;if("string"==typeof i||i instanceof String){if(i.localeCompare&&i!=o)return n[r].order*i.localeCompare(o)}else l=i<o?-1:1;return i==o?n.length-1>r?this.multisortField(e,t,n,r+1):0:n[r].order*l},e.prototype.addSortMeta=function(e){for(var t=-1,n=0;n<this.multiSortMeta.length;n++)if(this.multiSortMeta[n].field===e.field){t=n;break}t>=0?this.multiSortMeta[t]=e:this.multiSortMeta.push(e)},e.prototype.isSorted=function(e){if(!e.sortable)return!1;var t=e.sortField||e.field;if("single"===this.sortMode)return this.sortField&&t===this.sortField;if("multiple"===this.sortMode){var n=!1;if(this.multiSortMeta)for(var r=0;r<this.multiSortMeta.length;r++)if(this.multiSortMeta[r].field==t){n=!0;break}return n}},e.prototype.getSortOrder=function(e){var t=0,n=e.sortField||e.field;if("single"===this.sortMode)this.sortField&&n===this.sortField&&(t=this.sortOrder);else if("multiple"===this.sortMode&&this.multiSortMeta)for(var r=0;r<this.multiSortMeta.length;r++)if(this.multiSortMeta[r].field==n){t=this.multiSortMeta[r].order;break}return t},e.prototype.onRowGroupClick=function(e){if(this.rowGroupToggleClick)this.rowGroupToggleClick=!1;else if(this.sortableRowGroup){var t=e.target.nodeName;("TD"==t||"SPAN"==t&&!this.domHandler.hasClass(e.target,"ui-clickable"))&&(this.sortField!=this.groupField?(this._sortField=this.groupField,this.sortSingle()):(this._sortOrder=-1*this.sortOrder,this.sortSingle()))}},e.prototype.clearSelectionRange=function(){var e,t;this.rangeRowIndex>this.anchorRowIndex?(e=this.anchorRowIndex,t=this.rangeRowIndex):this.rangeRowIndex<this.anchorRowIndex?(e=this.rangeRowIndex,t=this.anchorRowIndex):(e=this.rangeRowIndex,t=this.rangeRowIndex);for(var n=function(e){var t=r.dataToRender[e],n=r.findIndexInSelection(t);r._selection=r.selection.filter(function(e,t){return t!=n});var i=r.dataKey?String(r.resolveFieldData(t,r.dataKey)):null;i&&delete r.selectionKeys[i],r.onRowUnselect.emit({originalEvent:event,data:t,type:"row"})},r=this,i=e;i<=t;i++)n(i)},e.prototype.selectRange=function(e){var t,n;this.anchorRowIndex>e?(t=e,n=this.anchorRowIndex):this.anchorRowIndex<e?(t=this.anchorRowIndex,n=e):(t=e,n=e);for(var r=t;r<=n;r++){var i=this.dataToRender[r];this._selection=this.selection.concat([i]),this.selectionChange.emit(this.selection);var o=this.dataKey?String(this.resolveFieldData(i,this.dataKey)):null;o&&(this.selectionKeys[o]=1),this.onRowSelect.emit({originalEvent:event,data:i,type:"row"})}},e.prototype.handleRowClick=function(e,t,n){if(this.preventRowClickPropagation)this.preventRowClickPropagation=!1;else{var r=e.target.nodeName;if("INPUT"!=r&&"BUTTON"!=r&&"A"!=r&&!this.domHandler.hasClass(e.target,"ui-clickable")){if(this.onRowClick.next({originalEvent:e,data:t}),this.selectionMode){if(this.isMultipleSelectionMode()&&e.shiftKey&&null!=this.anchorRowIndex)this.domHandler.clearSelection(),null!=this.rangeRowIndex&&this.clearSelectionRange(),this.rangeRowIndex=n,this.selectRange(n);else{var i=this.isSelected(t),o=!this.rowTouched&&this.metaKeySelection,l=this.dataKey?String(this.resolveFieldData(t,this.dataKey)):null;if(this.anchorRowIndex=n,this.rangeRowIndex=n,o){var a=e.metaKey||e.ctrlKey;if(i&&a){if(this.isSingleSelectionMode())this._selection=null,this.selectionKeys={},this.selectionChange.emit(null);else{var s=this.findIndexInSelection(t);this._selection=this.selection.filter(function(e,t){return t!=s}),this.selectionChange.emit(this.selection),l&&delete this.selectionKeys[l]}this.onRowUnselect.emit({originalEvent:e,data:t,type:"row"})}else this.isSingleSelectionMode()?(this._selection=t,this.selectionChange.emit(t),l&&(this.selectionKeys={},this.selectionKeys[l]=1)):this.isMultipleSelectionMode()&&(a?this._selection=this.selection||[]:(this._selection=[],this.selectionKeys={}),this._selection=this.selection.concat([t]),this.selectionChange.emit(this.selection),l&&(this.selectionKeys[l]=1)),this.onRowSelect.emit({originalEvent:e,data:t,type:"row"})}else if(this.isSingleSelectionMode())i?(this._selection=null,this.selectionKeys={},this.onRowUnselect.emit({originalEvent:e,data:t,type:"row"})):(this._selection=t,this.onRowSelect.emit({originalEvent:e,data:t,type:"row"}),l&&(this.selectionKeys={},this.selectionKeys[l]=1));else if(i){var u=this.findIndexInSelection(t);this._selection=this.selection.filter(function(e,t){return t!=u}),this.selectionChange.emit(this.selection),this.onRowUnselect.emit({originalEvent:e,data:t,type:"row"}),l&&delete this.selectionKeys[l]}else this._selection=(this.selection||[]).concat([t]),this.selectionChange.emit(this.selection),this.onRowSelect.emit({originalEvent:e,data:t,type:"row"}),l&&(this.selectionKeys[l]=1)}this.preventSelectionKeysPropagation=!0}this.rowTouched=!1}}},e.prototype.handleRowTouchEnd=function(e){this.rowTouched=!0},e.prototype.selectRowWithRadio=function(e,t){this.selection!=t?(this._selection=t,this.selectionChange.emit(this.selection),this.onRowSelect.emit({originalEvent:e,data:t,type:"radiobutton"}),this.dataKey&&(this.selectionKeys={},this.selectionKeys[String(this.resolveFieldData(t,this.dataKey))]=1)):(this._selection=null,this.selectionChange.emit(this.selection),this.onRowUnselect.emit({originalEvent:e,data:t,type:"radiobutton"})),this.preventSelectionKeysPropagation=!0,this.preventRowClickPropagation=!0},e.prototype.toggleRowWithCheckbox=function(e,t){var n=this.findIndexInSelection(t);this.selection=this.selection||[];var r=this.dataKey?String(this.resolveFieldData(t,this.dataKey)):null;-1!=n?(this._selection=this.selection.filter(function(e,t){return t!=n}),this.selectionChange.emit(this.selection),this.onRowUnselect.emit({originalEvent:e,data:t,type:"checkbox"}),r&&delete this.selectionKeys[r]):(this._selection=this.selection.concat([t]),this.selectionChange.emit(this.selection),this.onRowSelect.emit({originalEvent:e,data:t,type:"checkbox"}),r&&(this.selectionKeys[r]=1)),this.preventSelectionKeysPropagation=!0,this.preventRowClickPropagation=!0},e.prototype.toggleRowsWithCheckbox=function(e){this.selection=e.checked?this.headerCheckboxToggleAllPages?this.value.slice():this.dataToRender.slice():[],this.selectionChange.emit(this.selection),this.onHeaderCheckboxToggle.emit({originalEvent:e,checked:e.checked})},e.prototype.onRowRightClick=function(e,t){if(this.contextMenu){var n=-1!=this.findIndexInSelection(t);this.dataKey&&String(this.resolveFieldData(t,this.dataKey)),n||(this.isSingleSelectionMode()?(this.selection=t,this.selectionChange.emit(t)):this.isMultipleSelectionMode()&&(this.selection=[t],this.selectionChange.emit(this.selection)),this.dataKey&&(this.selectionKeys[String(this.resolveFieldData(t,this.dataKey))]=1,this.preventSelectionKeysPropagation=!0)),this.contextMenu.show(e),this.onContextMenuSelect.emit({originalEvent:e,data:t})}},e.prototype.rowDblclick=function(e,t){this.onRowDblclick.emit({originalEvent:e,data:t})},e.prototype.isSingleSelectionMode=function(){return"single"===this.selectionMode},e.prototype.isMultipleSelectionMode=function(){return"multiple"===this.selectionMode},e.prototype.findIndexInSelection=function(e){var t=-1;if(this.selection)for(var n=0;n<this.selection.length;n++)if(this.equals(e,this.selection[n])){t=n;break}return t},e.prototype.isSelected=function(e){return!(!e||!this.selection)&&(this.dataKey?void 0!==this.selectionKeys[this.objectUtils.resolveFieldData(e,this.dataKey)]:this.selection instanceof Array?this.findIndexInSelection(e)>-1:this.equals(e,this.selection))},e.prototype.equals=function(e,t){return"equals"===this.compareSelectionBy?e===t:this.objectUtils.equals(e,t,this.dataKey)},Object.defineProperty(e.prototype,"allSelected",{get:function(){if(this.headerCheckboxToggleAllPages)return this.selection&&this.value&&this.selection.length===this.value.length;var e=!0;if(this.dataToRender&&this.selection&&this.dataToRender.length<=this.selection.length){for(var t=0,n=this.dataToRender;t<n.length;t++)if(!this.isSelected(n[t])){e=!1;break}}else e=!1;return e},enumerable:!0,configurable:!0}),e.prototype.onFilterKeyup=function(e,t,n){var r=this;this.filterTimeout&&clearTimeout(this.filterTimeout),this.filterTimeout=setTimeout(function(){r.filter(e,t,n),r.filterTimeout=null},this.filterDelay)},e.prototype.filter=function(e,t,n){this.isFilterBlank(e)?this.filters[t]&&delete this.filters[t]:this.filters[t]={value:e,matchMode:n},this._filter()},e.prototype.isFilterBlank=function(e){return null===e||void 0===e||"string"==typeof e&&0==e.trim().length||e instanceof Array&&0==e.length},e.prototype._filter=function(){if(this._first=0,this.lazy)this.onLazyLoad.emit(this.createLazyLoadMetadata());else{if(!this.value||!this.columns)return;this.filteredValue=[];for(var e=0;e<this.value.length;e++){for(var t=!0,n=!1,r=0;r<this.columns.length;r++){var i=this.columns[r],o=this.filters[i.filterField||i.field];if(o){var l=o.value,a=o.matchMode||"startsWith",s=this.resolveFieldData(this.value[e],i.filterField||i.field);if((0,this.filterConstraints[a])(s,l)||(t=!1),!t)break}i.excludeGlobalFilter||!this.globalFilter||n||(n=this.filterConstraints.contains(this.resolveFieldData(this.value[e],i.filterField||i.field),this.globalFilter.value))}var u=t;this.globalFilter&&(u=t&&n),u&&this.filteredValue.push(this.value[e])}this.filteredValue.length===this.value.length&&(this.filteredValue=null),this.paginator&&(this.totalRecords=this.filteredValue?this.filteredValue.length:this.value?this.value.length:0),this.updateDataToRender(this.filteredValue||this.value)}this.onFilter.emit({filters:this.filters,filteredValue:this.filteredValue||this.value})},e.prototype.hasFilter=function(){var e=!0;for(var t in this.filters)if(this.filters.hasOwnProperty(t)){e=!1;break}return!e||this.globalFilter&&this.globalFilter.value&&this.globalFilter.value.trim().length},e.prototype.onFilterInputClick=function(e){e.stopPropagation()},e.prototype.switchCellToEditMode=function(e,t,n){var r=this;if(!this.selectionMode&&this.editable&&t.editable&&(this.editorClick=!0,this.bindDocumentEditListener(),e!=this.editingCell)){this.editingCell&&0==this.domHandler.find(this.editingCell,".ng-invalid.ng-dirty").length&&this.domHandler.removeClass(this.editingCell,"ui-cell-editing"),this.editingCell=e,this.onEditInit.emit({column:t,data:n}),this.domHandler.addClass(e,"ui-cell-editing");var i=this.domHandler.findSingle(e,".ui-cell-editor input");i&&setTimeout(function(){return r.domHandler.invokeElementMethod(i,"focus")},50)}},e.prototype.switchCellToViewMode=function(e){this.editingCell=null;var t=this.findCell(e);this.domHandler.removeClass(t,"ui-cell-editing"),this.unbindDocumentEditListener()},e.prototype.closeCell=function(){this.editingCell&&(this.domHandler.removeClass(this.editingCell,"ui-cell-editing"),this.editingCell=null,this.unbindDocumentEditListener())},e.prototype.bindDocumentEditListener=function(){var e=this;this.documentEditListener||(this.documentEditListener=this.renderer.listen("document","click",function(t){e.editorClick||e.closeCell(),e.editorClick=!1}))},e.prototype.unbindDocumentEditListener=function(){this.documentEditListener&&(this.documentEditListener(),this.documentEditListener=null)},e.prototype.onCellEditorKeydown=function(e,t,n,r){this.editable&&(13==e.keyCode?0==this.domHandler.find(this.editingCell,".ng-invalid.ng-dirty").length&&(this.switchCellToViewMode(e.target),e.preventDefault()):27==e.keyCode?(this.switchCellToViewMode(e.target),e.preventDefault()):9==e.keyCode&&(e.shiftKey?this.moveToPreviousCell(e):this.moveToNextCell(e)))},e.prototype.onCellEditorInput=function(e,t,n,r){this.editable&&this.onEdit.emit({originalEvent:e,column:t,data:n,index:r})},e.prototype.onCellEditorChange=function(e,t,n,r){this.editable&&(this.editChanged=!0,this.onEditComplete.emit({column:t,data:n,index:r}))},e.prototype.onCellEditorBlur=function(e,t,n,r){this.editable&&(this.editChanged?this.editChanged=!1:this.onEditCancel.emit({column:t,data:n,index:r}))},e.prototype.moveToPreviousCell=function(e){var t=this.findCell(e.target),n=this.findPreviousEditableColumn(t);n&&(this.domHandler.invokeElementMethod(n,"click"),e.preventDefault())},e.prototype.moveToNextCell=function(e){var t=this.findCell(e.target),n=this.findNextEditableColumn(t);n&&(this.domHandler.invokeElementMethod(n,"click"),e.preventDefault())},e.prototype.findPreviousEditableColumn=function(e){var t=e.previousElementSibling;if(!t){var n=e.parentElement.previousElementSibling;n&&(t=n.lastElementChild)}return t?this.domHandler.hasClass(t,"ui-editable-column")?t:this.findPreviousEditableColumn(t):null},e.prototype.findNextEditableColumn=function(e){var t=e.nextElementSibling;if(!t){var n=e.parentElement.nextElementSibling;n&&(t=n.firstElementChild)}return t?this.domHandler.hasClass(t,"ui-editable-column")?t:this.findNextEditableColumn(t):null},e.prototype.onCustomEditorFocusPrev=function(e){this.moveToPreviousCell(e)},e.prototype.onCustomEditorFocusNext=function(e){this.moveToNextCell(e)},e.prototype.findCell=function(e){if(e){for(var t=e;t&&"TD"!=t.tagName;)t=t.parentElement;return t}return null},e.prototype.initResizableColumns=function(){this.tbody=this.domHandler.findSingle(this.el.nativeElement,"tbody.ui-datatable-data"),this.resizerHelper=this.domHandler.findSingle(this.el.nativeElement,"div.ui-column-resizer-helper"),this.fixColumnWidths()},e.prototype.onDocumentMouseMove=function(e){this.columnResizing&&this.onColumnResize(e)},e.prototype.onDocumentMouseUp=function(e){this.columnResizing&&(this.columnResizing=!1,this.onColumnResizeEnd(e))},e.prototype.bindColumnResizeEvents=function(){var e=this;this.zone.runOutsideAngular(function(){window.document.addEventListener("mousemove",e.onDocumentMouseMove.bind(e))}),this.documentColumnResizeEndListener=this.renderer.listen("document","mouseup",function(t){e.columnResizing&&(e.columnResizing=!1,e.onColumnResizeEnd(t))})},e.prototype.unbindColumnResizeEvents=function(){window.document.removeEventListener("mousemove",this.onDocumentMouseMove),this.documentColumnResizeEndListener&&(this.documentColumnResizeEndListener(),this.documentColumnResizeEndListener=null)},e.prototype.initColumnResize=function(e){this.bindColumnResizeEvents();var t=this.el.nativeElement.children[0],n=this.domHandler.getOffset(t).left;this.resizeColumn=e.target.parentElement,this.columnResizing=!0,this.lastResizerHelperX=e.pageX-n+t.scrollLeft},e.prototype.onColumnResize=function(e){var t=this.el.nativeElement.children[0],n=this.domHandler.getOffset(t).left;this.domHandler.addClass(t,"ui-unselectable-text"),this.resizerHelper.style.height=t.offsetHeight+"px",this.resizerHelper.style.top="0px",this.resizerHelper.style.left=e.pageX-n+t.scrollLeft+"px",this.resizerHelper.style.display="block"},e.prototype.onColumnResizeEnd=function(e){var t=this.resizerHelper.offsetLeft-this.lastResizerHelperX,n=this.resizeColumn.offsetWidth,r=n+t,i=this.resizeColumn.style.minWidth||15;if(n+t>parseInt(i)){if("fit"===this.columnResizeMode){var o=this.resizeColumn.nextElementSibling,l=o.offsetWidth-t;if(r>15&&l>15&&(this.resizeColumn.style.width=r+"px",o&&(o.style.width=l+"px"),this.scrollable)){var a=this.domHandler.findSingle(this.el.nativeElement,"colgroup.ui-datatable-scrollable-colgroup"),s=this.domHandler.index(this.resizeColumn);a.children[s].style.width=r+"px",o&&(a.children[s+1].style.width=l+"px")}}else if("expand"===this.columnResizeMode){this.tbody.parentElement.style.width=this.tbody.parentElement.offsetWidth+t+"px",this.resizeColumn.style.width=r+"px";var u=this.tbody.parentElement.style.width;this.scrollable?(this.domHandler.findSingle(this.el.nativeElement,".ui-datatable-scrollable-header-box").children[0].style.width=u,a=this.domHandler.findSingle(this.el.nativeElement,"colgroup.ui-datatable-scrollable-colgroup"),s=this.domHandler.index(this.resizeColumn),a.children[s].style.width=r+"px"):this.el.nativeElement.children[0].style.width=u}this.onColResize.emit({element:this.resizeColumn,delta:t})}this.resizerHelper.style.display="none",this.resizeColumn=null,this.domHandler.removeClass(this.el.nativeElement.children[0],"ui-unselectable-text"),this.unbindColumnResizeEvents()},e.prototype.fixColumnWidths=function(){for(var e,t=this.domHandler.find(this.el.nativeElement,"th.ui-resizable-column"),n=0;n<t.length;n++)t[n].style.width=t[n].offsetWidth+"px";if(this.scrollable&&(e=this.domHandler.findSingle(this.el.nativeElement,"colgroup.ui-datatable-scrollable-colgroup").children))for(n=0;n<t.length;n++)e[n].style.width=t[n].offsetWidth+"px"},e.prototype.onColumnDragStart=function(e){var t=this;this.columnResizing?e.preventDefault():(this.draggedColumn=this.findParentHeader(e.target),e.dataTransfer.setData("text","b"),this.zone.runOutsideAngular(function(){window.document.addEventListener("dragover",t.onColumnDragover.bind(t))}))},e.prototype.onColumnDragover=function(e){var t=this.findParentHeader(e.target);if(this.reorderableColumns&&this.draggedColumn&&t){e.preventDefault();var n=this.domHandler.getOffset(this.el.nativeElement.children[0]),r=this.domHandler.getOffset(t);if(this.draggedColumn!=t){var i=r.left-n.left,o=r.left+t.offsetWidth/2;this.reorderIndicatorUp.style.top=r.top-n.top-(this.iconHeight-1)+"px",this.reorderIndicatorDown.style.top=r.top-n.top+t.offsetHeight+"px",e.pageX>o?(this.reorderIndicatorUp.style.left=i+t.offsetWidth-Math.ceil(this.iconWidth/2)+"px",this.reorderIndicatorDown.style.left=i+t.offsetWidth-Math.ceil(this.iconWidth/2)+"px",this.dropPosition=1):(this.reorderIndicatorUp.style.left=i-Math.ceil(this.iconWidth/2)+"px",this.reorderIndicatorDown.style.left=i-Math.ceil(this.iconWidth/2)+"px",this.dropPosition=-1),this.reorderIndicatorUp.style.display="block",this.reorderIndicatorDown.style.display="block"}else e.dataTransfer.dropEffect="none"}},e.prototype.onColumnDragleave=function(e){this.reorderableColumns&&this.draggedColumn&&(e.preventDefault(),this.reorderIndicatorUp.style.display="none",this.reorderIndicatorDown.style.display="none",window.document.removeEventListener("dragover",this.onColumnDragover))},e.prototype.onColumnDrop=function(e){if(e.preventDefault(),this.draggedColumn){var t=this.domHandler.index(this.draggedColumn),n=this.domHandler.index(this.findParentHeader(e.target)),r=t!=n;r&&(n-t==1&&-1===this.dropPosition||t-n==1&&1===this.dropPosition)&&(r=!1),r&&(this.objectUtils.reorderArray(this.columns,t,n),this.scrollable&&this.initScrollableColumns(),this.onColReorder.emit({dragIndex:t,dropIndex:n,columns:this.columns})),this.reorderIndicatorUp.style.display="none",this.reorderIndicatorDown.style.display="none",this.draggedColumn.draggable=!1,this.draggedColumn=null,this.dropPosition=null}},e.prototype.initColumnReordering=function(){this.reorderIndicatorUp=this.domHandler.findSingle(this.el.nativeElement.children[0],"span.ui-datatable-reorder-indicator-up"),this.reorderIndicatorDown=this.domHandler.findSingle(this.el.nativeElement.children[0],"span.ui-datatable-reorder-indicator-down"),this.iconWidth=this.domHandler.getHiddenElementOuterWidth(this.reorderIndicatorUp),this.iconHeight=this.domHandler.getHiddenElementOuterHeight(this.reorderIndicatorUp)},e.prototype.findParentHeader=function(e){if("TH"==e.nodeName)return e;for(var t=e.parentElement;"TH"!=t.nodeName&&(t=t.parentElement););return t},e.prototype.hasFooter=function(){if(this.footerColumnGroups.first)return!0;if(this.columns)for(var e=0;e<this.columns.length;e++)if(this.columns[e].footer||this.columns[e].footerTemplate)return!0;return!1},e.prototype.isEmpty=function(){return!this.dataToRender||0==this.dataToRender.length},e.prototype.createLazyLoadMetadata=function(){return{first:this.first,rows:this.virtualScroll?2*this.rows:this.rows,sortField:this.sortField,sortOrder:this.sortOrder,filters:this.filters,globalFilter:this.globalFilter?this.globalFilter.value:null,multiSortMeta:this.multiSortMeta}},e.prototype.toggleRow=function(e,t){this.expandedRows||(this.expandedRows=[]);var n=this.findExpandedRowIndex(e);-1!=n?(this.expandedRows.splice(n,1),this.onRowCollapse.emit({originalEvent:t,data:e})):("single"===this.rowExpandMode&&(this.expandedRows=[]),this.expandedRows.push(e),this.onRowExpand.emit({originalEvent:t,data:e})),t&&t.preventDefault()},e.prototype.findExpandedRowIndex=function(e){var t=-1;if(this.expandedRows)for(var n=0;n<this.expandedRows.length;n++)if(this.expandedRows[n]==e){t=n;break}return t},e.prototype.isRowExpanded=function(e){return-1!=this.findExpandedRowIndex(e)},e.prototype.findExpandedRowGroupIndex=function(e){var t=-1;if(this.expandedRowsGroups&&this.expandedRowsGroups.length)for(var n=0;n<this.expandedRowsGroups.length;n++){var r=this.expandedRowsGroups[n];if(this.resolveFieldData(e,this.groupField)===r){t=n;break}}return t},e.prototype.isRowGroupExpanded=function(e){return-1!=this.findExpandedRowGroupIndex(e)},e.prototype.toggleRowGroup=function(e,t){this.expandedRowsGroups||(this.expandedRowsGroups=[]),this.rowGroupToggleClick=!0;var n=this.findExpandedRowGroupIndex(t),r=this.resolveFieldData(t,this.groupField);n>=0?(this.expandedRowsGroups.splice(n,1),this.onRowGroupCollapse.emit({originalEvent:e,group:r})):("single"===this.rowGroupExpandMode&&(this.expandedRowsGroups=[]),this.expandedRowsGroups.push(r),this.onRowGroupExpand.emit({originalEvent:e,group:r})),e.preventDefault()},e.prototype.reset=function(){this._sortField=null,this._sortOrder=1,this.filteredValue=null,this.filters={},this._first=0,this.firstChange.emit(this._first),this.updateTotalRecords(),this.lazy?this.onLazyLoad.emit(this.createLazyLoadMetadata()):this.updateDataToRender(this.value)},e.prototype.exportCSV=function(e){var t=this,n=this.filteredValue||this.value,r="\ufeff";e&&e.selectionOnly&&(n=this.selection||[]);for(var i=0;i<this.columns.length;i++){var o=this.columns[i];o.exportable&&o.field&&(r+='"'+(o.header||o.field)+'"',i<this.columns.length-1&&(r+=this.csvSeparator))}n.forEach(function(e,n){r+="\n";for(var i=0;i<t.columns.length;i++){var o=t.columns[i];o.exportable&&o.field&&(r+='"'+t.resolveFieldData(e,o.field)+'"',i<t.columns.length-1&&(r+=t.csvSeparator))}});var l=new Blob([r],{type:"text/csv;charset=utf-8;"});if(window.navigator.msSaveOrOpenBlob)navigator.msSaveOrOpenBlob(l,this.exportFilename+".csv");else{var a=document.createElement("a");a.style.display="none",document.body.appendChild(a),void 0!==a.download?(a.setAttribute("href",URL.createObjectURL(l)),a.setAttribute("download",this.exportFilename+".csv"),a.click()):(r="data:text/csv;charset=utf-8,"+r,window.open(encodeURI(r))),document.body.removeChild(a)}},e.prototype.getBlockableElement=function(){return this.el.nativeElement.children[0]},e.prototype.getRowStyleClass=function(e,t){var n="ui-widget-content";if(this.rowStyleClass)(r=this.rowStyleClass.call(this,e,t))&&(n+=" "+r);else if(this.rowStyleMap&&this.dataKey){var r;(r=this.rowStyleMap[e[this.dataKey]])&&(n+=" "+r)}return n},e.prototype.visibleColumns=function(){return this.columns?this.columns.filter(function(e){return!e.hidden}):[]},Object.defineProperty(e.prototype,"containerWidth",{get:function(){return this.scrollable?this.scrollWidth?this.scrollWidth:this.frozenWidth&&this.unfrozenWidth?parseFloat(this.frozenWidth)+parseFloat(this.unfrozenWidth)+"px":void 0:this.style?this.style.width:null},enumerable:!0,configurable:!0}),e.prototype.hasFrozenColumns=function(){return this.frozenColumns&&this.frozenColumns.length>0},e.prototype.ngOnDestroy=function(){this.globalFilterFunction&&this.globalFilterFunction(),this.resizableColumns&&this.unbindColumnResizeEvents(),this.unbindDocumentEditListener(),this.columnsSubscription&&this.columnsSubscription.unsubscribe(),this.virtualScrollCallback&&(this.virtualScrollCallback=null)},e}();r([l.Input(),i("design:type",Boolean)],w.prototype,"paginator",void 0),r([l.Input(),i("design:type",Number)],w.prototype,"rows",void 0),r([l.Input(),i("design:type",Number)],w.prototype,"pageLinks",void 0),r([l.Input(),i("design:type",Array)],w.prototype,"rowsPerPageOptions",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"responsive",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"stacked",void 0),r([l.Input(),i("design:type",String)],w.prototype,"selectionMode",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"selectionChange",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"editable",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"showHeaderCheckbox",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onRowClick",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onRowSelect",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onRowUnselect",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onRowDblclick",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onHeaderCheckboxToggle",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"headerCheckboxToggleAllPages",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onContextMenuSelect",void 0),r([l.Input(),i("design:type",Number)],w.prototype,"filterDelay",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"lazy",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onLazyLoad",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"resizableColumns",void 0),r([l.Input(),i("design:type",String)],w.prototype,"columnResizeMode",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onColResize",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"reorderableColumns",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onColReorder",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"scrollable",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"virtualScroll",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"scrollHeight",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"scrollWidth",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"frozenWidth",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"unfrozenWidth",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"style",void 0),r([l.Input(),i("design:type",String)],w.prototype,"styleClass",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"tableStyle",void 0),r([l.Input(),i("design:type",String)],w.prototype,"tableStyleClass",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"globalFilter",void 0),r([l.Input(),i("design:type",String)],w.prototype,"sortMode",void 0),r([l.Input(),i("design:type",Number)],w.prototype,"defaultSortOrder",void 0),r([l.Input(),i("design:type",String)],w.prototype,"groupField",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"contextMenu",void 0),r([l.Input(),i("design:type",String)],w.prototype,"csvSeparator",void 0),r([l.Input(),i("design:type",String)],w.prototype,"exportFilename",void 0),r([l.Input(),i("design:type",String)],w.prototype,"emptyMessage",void 0),r([l.Input(),i("design:type",String)],w.prototype,"paginatorPosition",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"alwaysShowPaginator",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"metaKeySelection",void 0),r([l.Input(),i("design:type",Function)],w.prototype,"rowTrackBy",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"immutable",void 0),r([l.Input(),i("design:type",Array)],w.prototype,"frozenValue",void 0),r([l.Input(),i("design:type",String)],w.prototype,"compareSelectionBy",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onEditInit",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onEditComplete",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onEdit",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onEditCancel",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onPage",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onSort",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onFilter",void 0),r([l.ContentChild(d.Header),i("design:type",Object)],w.prototype,"header",void 0),r([l.ContentChild(d.Footer),i("design:type",Object)],w.prototype,"footer",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"expandableRows",void 0),r([l.Input(),i("design:type",Array)],w.prototype,"expandedRows",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"expandableRowGroups",void 0),r([l.Input(),i("design:type",String)],w.prototype,"rowExpandMode",void 0),r([l.Input(),i("design:type",Array)],w.prototype,"expandedRowsGroups",void 0),r([l.Input(),i("design:type",String)],w.prototype,"expandedIcon",void 0),r([l.Input(),i("design:type",String)],w.prototype,"collapsedIcon",void 0),r([l.Input(),i("design:type",Number)],w.prototype,"tabindex",void 0),r([l.Input(),i("design:type",Function)],w.prototype,"rowStyleClass",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"rowStyleMap",void 0),r([l.Input(),i("design:type",String)],w.prototype,"rowGroupMode",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"sortableRowGroup",void 0),r([l.Input(),i("design:type",String)],w.prototype,"sortFile",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"rowHover",void 0),r([l.Input(),i("design:type",Object)],w.prototype,"filters",void 0),r([l.Input(),i("design:type",String)],w.prototype,"dataKey",void 0),r([l.Input(),i("design:type",Boolean)],w.prototype,"loading",void 0),r([l.Input(),i("design:type",String)],w.prototype,"loadingIcon",void 0),r([l.Input(),i("design:type",Number)],w.prototype,"virtualScrollDelay",void 0),r([l.Input(),i("design:type",String)],w.prototype,"rowGroupExpandMode",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"valueChange",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"firstChange",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onRowExpand",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onRowCollapse",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onRowGroupExpand",void 0),r([l.Output(),i("design:type",l.EventEmitter)],w.prototype,"onRowGroupCollapse",void 0),r([l.ContentChildren(d.PrimeTemplate),i("design:type",l.QueryList)],w.prototype,"templates",void 0),r([l.ContentChildren(d.Column),i("design:type",l.QueryList)],w.prototype,"cols",void 0),r([l.ContentChildren(d.HeaderColumnGroup),i("design:type",l.QueryList)],w.prototype,"headerColumnGroups",void 0),r([l.ContentChildren(d.FooterColumnGroup),i("design:type",l.QueryList)],w.prototype,"footerColumnGroups",void 0),r([l.Input(),i("design:type",Array),i("design:paramtypes",[Array])],w.prototype,"multiSortMeta",null),r([l.Input(),i("design:type",String),i("design:paramtypes",[String])],w.prototype,"sortField",null),r([l.Input(),i("design:type",Number),i("design:paramtypes",[Number])],w.prototype,"sortOrder",null),r([l.Input(),i("design:type",Array),i("design:paramtypes",[Array])],w.prototype,"value",null),r([l.Input(),i("design:type",Number),i("design:paramtypes",[Number])],w.prototype,"first",null),r([l.Input(),i("design:type",Number),i("design:paramtypes",[Number])],w.prototype,"totalRecords",null),r([l.Input(),i("design:type",Object),i("design:paramtypes",[Object])],w.prototype,"selection",null),w=r([l.Component({selector:"p-dataTable",template:'\n        <div [ngStyle]="style" [class]="styleClass" [style.width]="containerWidth"\n            [ngClass]="{\'ui-datatable ui-widget\':true,\'ui-datatable-reflow\':responsive,\'ui-datatable-stacked\':stacked,\'ui-datatable-resizable\':resizableColumns,\'ui-datatable-scrollable\':scrollable}">\n            <div class="ui-datatable-loading ui-widget-overlay" *ngIf="loading"></div>\n            <div class="ui-datatable-loading-content" *ngIf="loading">\n                <i [class]="\'fa fa-spin fa-2x \' + loadingIcon"></i>\n            </div>\n            <div class="ui-datatable-header ui-widget-header" *ngIf="header">\n                <ng-content select="p-header"></ng-content>\n            </div>\n            <p-paginator [rows]="rows" [first]="first" [totalRecords]="totalRecords" [pageLinkSize]="pageLinks" styleClass="ui-paginator-top" [alwaysShow]="alwaysShowPaginator"\n                (onPageChange)="onPageChange($event)" [rowsPerPageOptions]="rowsPerPageOptions" *ngIf="paginator && (paginatorPosition === \'top\' || paginatorPosition ==\'both\')"></p-paginator>\n            <div class="ui-datatable-tablewrapper" *ngIf="!scrollable">\n                <table [ngClass]="tableStyleClass" [ngStyle]="tableStyle">\n                    <thead class="ui-datatable-thead">\n                        <tr *ngIf="!headerColumnGroups.first" class="ui-state-default" [pColumnHeaders]="columns"></tr>\n                        <ng-template [ngIf]="headerColumnGroups.first">\n                            <tr *ngFor="let headerRow of headerColumnGroups.first.rows" class="ui-state-default" [pColumnHeaders]="headerRow.columns"></tr>\n                        </ng-template>\n                    </thead>\n                    <tfoot *ngIf="hasFooter()" class="ui-datatable-tfoot">\n                        <tr *ngIf="!footerColumnGroups.first" class="ui-state-default" [pColumnFooters]="columns"></tr>\n                        <ng-template [ngIf]="footerColumnGroups.first">\n                            <tr *ngFor="let footerRow of footerColumnGroups.first.rows" class="ui-state-default" [pColumnFooters]="footerRow.columns"></tr>\n                        </ng-template>\n                    </tfoot>\n                    <tbody [ngClass]="{\'ui-datatable-data ui-widget-content\': true, \'ui-datatable-hoverable-rows\': (rowHover||selectionMode)}" [pTableBody]="columns" [data]="dataToRender"></tbody>\n                </table>\n            </div>\n            \n            <ng-template [ngIf]="scrollable">\n                <div class="ui-datatable-scrollable-wrapper ui-helper-clearfix">\n                    <div *ngIf="hasFrozenColumns()" [pScrollableView]="frozenColumns" frozen="true"\n                        [headerColumnGroup]="frozenHeaderColumnGroup" [footerColumnGroup]="frozenFooterColumnGroup"\n                        [ngStyle]="{\'width\':this.frozenWidth}" class="ui-datatable-scrollable-view ui-datatable-frozen-view"></div>\n                    <div [pScrollableView]="scrollableColumns" [ngStyle]="{\'width\':this.unfrozenWidth, \'left\': this.frozenWidth}"\n                        [headerColumnGroup]="scrollableHeaderColumnGroup" [footerColumnGroup]="scrollableFooterColumnGroup"\n                        class="ui-datatable-scrollable-view" [virtualScroll]="virtualScroll" (onVirtualScroll)="onVirtualScroll($event)"\n                        [ngClass]="{\'ui-datatable-unfrozen-view\': hasFrozenColumns()}"></div>\n                </div>\n            </ng-template>\n            \n            <p-paginator [rows]="rows" [first]="first" [totalRecords]="totalRecords" [pageLinkSize]="pageLinks" styleClass="ui-paginator-bottom" [alwaysShow]="alwaysShowPaginator"\n                (onPageChange)="onPageChange($event)" [rowsPerPageOptions]="rowsPerPageOptions" *ngIf="paginator && (paginatorPosition === \'bottom\' || paginatorPosition ==\'both\')"></p-paginator>\n            <div class="ui-datatable-footer ui-widget-header" *ngIf="footer">\n                <ng-content select="p-footer"></ng-content>\n            </div>\n            \n            <div class="ui-column-resizer-helper ui-state-highlight" style="display:none"></div>\n            <span class="fa fa-arrow-down ui-datatable-reorder-indicator-up" style="position: absolute; display: none;"></span>\n            <span class="fa fa-arrow-up ui-datatable-reorder-indicator-down" style="position: absolute; display: none;"></span>\n        </div>\n    ',providers:[p.DomHandler,f.ObjectUtils]})],w),t.DataTable=w;var x=function(){};x=r([l.NgModule({imports:[a.CommonModule,u.SharedModule,c.PaginatorModule,s.FormsModule],exports:[w,u.SharedModule],declarations:[w,h,m,y,v,b,_,g]})],x),t.DataTableModule=x},pa70:function(e,t,n){var r=n("uNkO");e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},piOq:function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},ptrv:function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},qLnt:function(e,t,n){"use strict";function r(e){return e.reduce(function(e,t){return e.concat(t instanceof c?t.errors:t)},[])}var i=n("1j/l"),o=n("NGRF"),l=n("B1iP"),a=n("8ofh"),s=n("NePw"),u=n("6Xbx"),c=function(e){function t(t){e.call(this),this.errors=t;var n=Error.call(this,t?t.length+" errors occurred during unsubscription:\n  "+t.map(function(e,t){return t+1+") "+e.toString()}).join("\n  "):"");this.name=n.name="UnsubscriptionError",this.stack=n.stack,this.message=n.message}return Object(u.__extends)(t,e),t}(Error);n.d(t,"a",function(){return d});var d=function(){function e(e){this.closed=!1,this._parent=null,this._parents=null,this._subscriptions=null,e&&(this._unsubscribe=e)}return e.prototype.unsubscribe=function(){var e,t=!1;if(!this.closed){var n=this._parent,u=this._parents,d=this._unsubscribe,p=this._subscriptions;this.closed=!0,this._parent=null,this._parents=null,this._subscriptions=null;for(var f=-1,h=u?u.length:0;n;)n.remove(this),n=++f<h&&u[f]||null;if(Object(l.a)(d)&&Object(a.a)(d).call(this)===s.a&&(t=!0,e=e||(s.a.e instanceof c?r(s.a.e.errors):[s.a.e])),Object(i.a)(p))for(f=-1,h=p.length;++f<h;){var m=p[f];if(Object(o.a)(m)&&Object(a.a)(m.unsubscribe).call(m)===s.a){t=!0,e=e||[];var g=s.a.e;g instanceof c?e=e.concat(r(g.errors)):e.push(g)}}if(t)throw new c(e)}},e.prototype.add=function(t){if(!t||t===e.EMPTY)return e.EMPTY;if(t===this)return this;var n=t;switch(typeof t){case"function":n=new e(t);case"object":if(n.closed||"function"!=typeof n.unsubscribe)return n;if(this.closed)return n.unsubscribe(),n;if("function"!=typeof n._addParent){var r=n;(n=new e)._subscriptions=[r]}break;default:throw new Error("unrecognized teardown "+t+" added to Subscription.")}return(this._subscriptions||(this._subscriptions=[])).push(n),n._addParent(this),n},e.prototype.remove=function(e){var t=this._subscriptions;if(t){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}},e.prototype._addParent=function(e){var t=this._parent,n=this._parents;t&&t!==e?n?-1===n.indexOf(e)&&n.push(e):this._parents=[e]:this._parent=e},e.EMPTY=function(e){return e.closed=!0,e}(new e),e}()},qgI0:function(e,t,n){"use strict";var r=n("xIGM"),i=n("kQVV"),o=n("mHG6"),l=n("NGRF"),a=n("AP4T"),s=n("X3fp"),u=n("6Xbx"),c=function(e){function t(t,n,r){e.call(this),this.parent=t,this.outerValue=n,this.outerIndex=r,this.index=0}return Object(u.__extends)(t,e),t.prototype._next=function(e){this.parent.notifyNext(this.outerValue,e,this.outerIndex,this.index++,this)},t.prototype._error=function(e){this.parent.notifyError(e,this),this.unsubscribe()},t.prototype._complete=function(){this.parent.notifyComplete(this),this.unsubscribe()},t}(n("E9/g").a),d=n("mz3w");t.a=function(e,t,n,u){var p=new c(e,n,u);if(p.closed)return null;if(t instanceof a.a)return t._isScalar?(p.next(t.value),p.complete(),null):(p.syncErrorThrowable=!0,t.subscribe(p));if(Object(i.a)(t)){for(var f=0,h=t.length;f<h&&!p.closed;f++)p.next(t[f]);p.closed||p.complete()}else{if(Object(o.a)(t))return t.then(function(e){p.closed||(p.next(e),p.complete())},function(e){return p.error(e)}).then(null,function(e){r.a.setTimeout(function(){throw e})}),p;if(t&&"function"==typeof t[s.a])for(var m=t[s.a]();;){var g=m.next();if(g.done){p.complete();break}if(p.next(g.value),p.closed)break}else if(t&&"function"==typeof t[d.a]){var y=t[d.a]();if("function"==typeof y.subscribe)return y.subscribe(new c(e,n,u));p.error(new TypeError("Provided object does not correctly implement Symbol.observable"))}else{var v="You provided "+(Object(l.a)(t)?"an invalid object":"'"+t+"'")+" where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.";p.error(new TypeError(v))}}return null}},qqDE:function(e,t,n){"use strict";t.a=function(e,t){return function(n){if("function"!=typeof e)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return n.lift(new o(e,t))}};var r=n("6Xbx"),i=n("E9/g"),o=function(){function e(e,t){this.project=e,this.thisArg=t}return e.prototype.call=function(e,t){return t.subscribe(new l(e,this.project,this.thisArg))},e}(),l=function(e){function t(t,n,r){e.call(this,t),this.project=n,this.count=0,this.thisArg=r||this}return Object(r.__extends)(t,e),t.prototype._next=function(e){var t;try{t=this.project.call(this.thisArg,e,this.count++)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(i.a)},rIdM:function(e,t,n){"use strict";var r=n("2Fuj"),i=n("lzDK"),o=n("9e9+"),l=n("RT4T"),a=n("Wo2w"),s=Object.assign;e.exports=!s||n("umMR")(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=s({},e)[n]||Object.keys(s({},t)).join("")!=r})?function(e,t){for(var n=l(e),s=arguments.length,u=1,c=i.f,d=o.f;s>u;)for(var p,f=a(arguments[u++]),h=c?r(f).concat(c(f)):r(f),m=h.length,g=0;m>g;)d.call(f,p=h[g++])&&(n[p]=f[p]);return n}:s},rKhO:function(e,t,n){var r=n("VceJ");e.exports=Array.isArray||function(e){return"Array"==r(e)}},rMsi:function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},rgUS:function(e,t,n){var r;!function(i,o,l,a){"use strict";function s(e,t,n){return setTimeout(f(e,n),t)}function u(e,t,n){return!!Array.isArray(e)&&(c(e,n[t],n),!0)}function c(e,t,n){var r;if(e)if(e.forEach)e.forEach(t,n);else if(e.length!==a)for(r=0;r<e.length;)t.call(n,e[r],r,e),r++;else for(r in e)e.hasOwnProperty(r)&&t.call(n,e[r],r,e)}function d(e,t,n){var r="DEPRECATED METHOD: "+t+"\n"+n+" AT \n";return function(){var t=new Error("get-stack-trace"),n=t&&t.stack?t.stack.replace(/^[^\(]+?[\n$]/gm,"").replace(/^\s+at\s+/gm,"").replace(/^Object.<anonymous>\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",o=i.console&&(i.console.warn||i.console.log);return o&&o.call(i.console,r,n),e.apply(this,arguments)}}function p(e,t,n){var r,i=t.prototype;(r=e.prototype=Object.create(i)).constructor=e,r._super=i,n&&te(r,n)}function f(e,t){return function(){return e.apply(t,arguments)}}function h(e,t){return typeof e==ie?e.apply(t?t[0]||a:a,t):e}function m(e,t){return e===a?t:e}function g(e,t,n){c(_(t),function(t){e.addEventListener(t,n,!1)})}function y(e,t,n){c(_(t),function(t){e.removeEventListener(t,n,!1)})}function v(e,t){for(;e;){if(e==t)return!0;e=e.parentNode}return!1}function b(e,t){return e.indexOf(t)>-1}function _(e){return e.trim().split(/\s+/g)}function w(e,t,n){if(e.indexOf&&!n)return e.indexOf(t);for(var r=0;r<e.length;){if(n&&e[r][n]==t||!n&&e[r]===t)return r;r++}return-1}function x(e){return Array.prototype.slice.call(e,0)}function C(e,t,n){for(var r=[],i=[],o=0;o<e.length;){var l=t?e[o][t]:e[o];w(i,l)<0&&r.push(e[o]),i[o]=l,o++}return n&&(r=t?r.sort(function(e,n){return e[t]>n[t]}):r.sort()),r}function E(e,t){for(var n,r,i=t[0].toUpperCase()+t.slice(1),o=0;o<ne.length;){if(n=ne[o],(r=n?n+i:t)in e)return r;o++}return a}function S(e){var t=e.ownerDocument||e;return t.defaultView||t.parentWindow||i}function O(e,t){var n=this;this.manager=e,this.callback=t,this.element=e.element,this.target=e.options.inputTarget,this.domHandler=function(t){h(e.options.enable,[e])&&n.handler(t)},this.init()}function T(e,t,n){var r=n.pointers.length,i=n.changedPointers.length,o=t&me&&r-i==0,l=t&(ge|ye)&&r-i==0;n.isFirst=!!o,n.isFinal=!!l,o&&(e.session={}),n.eventType=t,function(e,t){var n=e.session,r=t.pointers,i=r.length;n.firstInput||(n.firstInput=k(t)),i>1&&!n.firstMultiple?n.firstMultiple=k(t):1===i&&(n.firstMultiple=!1);var o=n.firstInput,l=n.firstMultiple,s=l?l.center:o.center,u=t.center=D(r);t.timeStamp=ae(),t.deltaTime=t.timeStamp-o.timeStamp,t.angle=P(s,u),t.distance=M(s,u),function(e,t){var n=t.center,r=e.offsetDelta||{},i=e.prevDelta||{},o=e.prevInput||{};t.eventType!==me&&o.eventType!==ge||(i=e.prevDelta={x:o.deltaX||0,y:o.deltaY||0},r=e.offsetDelta={x:n.x,y:n.y}),t.deltaX=i.x+(n.x-r.x),t.deltaY=i.y+(n.y-r.y)}(n,t),t.offsetDirection=R(t.deltaX,t.deltaY);var c=I(t.deltaTime,t.deltaX,t.deltaY);t.overallVelocityX=c.x,t.overallVelocityY=c.y,t.overallVelocity=le(c.x)>le(c.y)?c.x:c.y,t.scale=l?function(e,t){return M(r[0],r[1],Te)/M(e[0],e[1],Te)}(l.pointers):1,t.rotation=l?function(e,t){return P(r[1],r[0],Te)+P(e[1],e[0],Te)}(l.pointers):0,t.maxPointers=n.prevInput?t.pointers.length>n.prevInput.maxPointers?t.pointers.length:n.prevInput.maxPointers:t.pointers.length,function(e,t){var n,r,i,o,l=e.lastInterval||t,s=t.timeStamp-l.timeStamp;if(t.eventType!=ye&&(s>he||l.velocity===a)){var u=t.deltaX-l.deltaX,c=t.deltaY-l.deltaY,d=I(s,u,c);r=d.x,i=d.y,n=le(d.x)>le(d.y)?d.x:d.y,o=R(u,c),e.lastInterval=t}else n=l.velocity,r=l.velocityX,i=l.velocityY,o=l.direction;t.velocity=n,t.velocityX=r,t.velocityY=i,t.direction=o}(n,t);var d=e.element;v(t.srcEvent.target,d)&&(d=t.srcEvent.target),t.target=d}(e,n),e.emit("hammer.input",n),e.recognize(n),e.session.prevInput=n}function k(e){for(var t=[],n=0;n<e.pointers.length;)t[n]={clientX:oe(e.pointers[n].clientX),clientY:oe(e.pointers[n].clientY)},n++;return{timeStamp:ae(),pointers:t,center:D(t),deltaX:e.deltaX,deltaY:e.deltaY}}function D(e){var t=e.length;if(1===t)return{x:oe(e[0].clientX),y:oe(e[0].clientY)};for(var n=0,r=0,i=0;i<t;)n+=e[i].clientX,r+=e[i].clientY,i++;return{x:oe(n/t),y:oe(r/t)}}function I(e,t,n){return{x:t/e||0,y:n/e||0}}function R(e,t){return e===t?ve:le(e)>=le(t)?e<0?be:_e:t<0?we:xe}function M(e,t,n){n||(n=Oe);var r=t[n[0]]-e[n[0]],i=t[n[1]]-e[n[1]];return Math.sqrt(r*r+i*i)}function P(e,t,n){n||(n=Oe);var r=t[n[0]]-e[n[0]],i=t[n[1]]-e[n[1]];return 180*Math.atan2(i,r)/Math.PI}function N(){this.evEl=De,this.evWin=Ie,this.pressed=!1,O.apply(this,arguments)}function A(){this.evEl=Pe,this.evWin=Ne,O.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function L(){this.evTarget=Le,this.evWin=Fe,this.started=!1,O.apply(this,arguments)}function F(){this.evTarget=Ve,this.targetIds={},O.apply(this,arguments)}function j(){O.apply(this,arguments);var e=f(this.handler,this);this.touch=new F(this.manager,e),this.mouse=new N(this.manager,e),this.primaryTouch=null,this.lastTouches=[]}function V(e){var t=e.changedPointers[0];if(t.identifier===this.primaryTouch){var n={x:t.clientX,y:t.clientY};this.lastTouches.push(n);var r=this.lastTouches,i=function(){var e=r.indexOf(n);e>-1&&r.splice(e,1)};setTimeout(i,ze)}}function z(e,t){this.manager=e,this.set(t)}function B(e){this.options=te({},this.defaults,e||{}),this.id=ce++,this.manager=null,this.options.enable=m(this.options.enable,!0),this.state=Ue,this.simultaneous={},this.requireFail=[]}function H(e){return e&Qe?"cancel":e&$e?"end":e&Ke?"move":e&Ge?"start":""}function W(e){return e==xe?"down":e==we?"up":e==be?"left":e==_e?"right":""}function q(e,t){var n=t.manager;return n?n.get(e):e}function U(){B.apply(this,arguments)}function G(){U.apply(this,arguments),this.pX=null,this.pY=null}function K(){U.apply(this,arguments)}function $(){B.apply(this,arguments),this._timer=null,this._input=null}function Z(){U.apply(this,arguments)}function Q(){U.apply(this,arguments)}function Y(){B.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function X(e,t){return t=t||{},t.recognizers=m(t.recognizers,X.defaults.preset),new J(e,t)}function J(e,t){this.options=te({},X.defaults,t||{}),this.options.inputTarget=this.options.inputTarget||e,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=e,this.input=function(e){return new(e.options.inputClass||(pe?A:fe?F:de?j:N))(e,T)}(this),this.touchAction=new z(this,this.options.touchAction),ee(this,!0),c(this.options.recognizers,function(e){var t=this.add(new e[0](e[1]));e[2]&&t.recognizeWith(e[2]),e[3]&&t.requireFailure(e[3])},this)}function ee(e,t){var n=e.element;if(n.style){var r;c(e.options.cssProps,function(i,o){r=E(n.style,o),t?(e.oldCssProps[r]=n.style[r],n.style[r]=i):n.style[r]=e.oldCssProps[r]||""}),t||(e.oldCssProps={})}}var te,ne=["","webkit","Moz","MS","ms","o"],re=o.createElement("div"),ie="function",oe=Math.round,le=Math.abs,ae=Date.now;te="function"!=typeof Object.assign?function(e){if(e===a||null===e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),n=1;n<arguments.length;n++){var r=arguments[n];if(r!==a&&null!==r)for(var i in r)r.hasOwnProperty(i)&&(t[i]=r[i])}return t}:Object.assign;var se=d(function(e,t,n){for(var r=Object.keys(t),i=0;i<r.length;)(!n||n&&e[r[i]]===a)&&(e[r[i]]=t[r[i]]),i++;return e},"extend","Use `assign`."),ue=d(function(e,t){return se(e,t,!0)},"merge","Use `assign`."),ce=1,de="ontouchstart"in i,pe=E(i,"PointerEvent")!==a,fe=de&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),he=25,me=1,ge=4,ye=8,ve=1,be=2,_e=4,we=8,xe=16,Ce=be|_e,Ee=we|xe,Se=Ce|Ee,Oe=["x","y"],Te=["clientX","clientY"];O.prototype={handler:function(){},init:function(){this.evEl&&g(this.element,this.evEl,this.domHandler),this.evTarget&&g(this.target,this.evTarget,this.domHandler),this.evWin&&g(S(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&y(this.element,this.evEl,this.domHandler),this.evTarget&&y(this.target,this.evTarget,this.domHandler),this.evWin&&y(S(this.element),this.evWin,this.domHandler)}};var ke={mousedown:me,mousemove:2,mouseup:ge},De="mousedown",Ie="mousemove mouseup";p(N,O,{handler:function(e){var t=ke[e.type];t&me&&0===e.button&&(this.pressed=!0),2&t&&1!==e.which&&(t=ge),this.pressed&&(t&ge&&(this.pressed=!1),this.callback(this.manager,t,{pointers:[e],changedPointers:[e],pointerType:"mouse",srcEvent:e}))}});var Re={pointerdown:me,pointermove:2,pointerup:ge,pointercancel:ye,pointerout:ye},Me={2:"touch",3:"pen",4:"mouse",5:"kinect"},Pe="pointerdown",Ne="pointermove pointerup pointercancel";i.MSPointerEvent&&!i.PointerEvent&&(Pe="MSPointerDown",Ne="MSPointerMove MSPointerUp MSPointerCancel"),p(A,O,{handler:function(e){var t=this.store,n=!1,r=e.type.toLowerCase().replace("ms",""),i=Re[r],o=Me[e.pointerType]||e.pointerType,l="touch"==o,a=w(t,e.pointerId,"pointerId");i&me&&(0===e.button||l)?a<0&&(t.push(e),a=t.length-1):i&(ge|ye)&&(n=!0),a<0||(t[a]=e,this.callback(this.manager,i,{pointers:t,changedPointers:[e],pointerType:o,srcEvent:e}),n&&t.splice(a,1))}});var Ae={touchstart:me,touchmove:2,touchend:ge,touchcancel:ye},Le="touchstart",Fe="touchstart touchmove touchend touchcancel";p(L,O,{handler:function(e){var t=Ae[e.type];if(t===me&&(this.started=!0),this.started){var n=function(e,t){var n=x(e.touches),r=x(e.changedTouches);return t&(ge|ye)&&(n=C(n.concat(r),"identifier",!0)),[n,r]}.call(this,e,t);t&(ge|ye)&&n[0].length-n[1].length==0&&(this.started=!1),this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:"touch",srcEvent:e})}}});var je={touchstart:me,touchmove:2,touchend:ge,touchcancel:ye},Ve="touchstart touchmove touchend touchcancel";p(F,O,{handler:function(e){var t=je[e.type],n=function(e,t){var n=x(e.touches),r=this.targetIds;if(t&(2|me)&&1===n.length)return r[n[0].identifier]=!0,[n,n];var i,o,l=x(e.changedTouches),a=[],s=this.target;if(o=n.filter(function(e){return v(e.target,s)}),t===me)for(i=0;i<o.length;)r[o[i].identifier]=!0,i++;for(i=0;i<l.length;)r[l[i].identifier]&&a.push(l[i]),t&(ge|ye)&&delete r[l[i].identifier],i++;return a.length?[C(o.concat(a),"identifier",!0),a]:void 0}.call(this,e,t);n&&this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:"touch",srcEvent:e})}});var ze=2500;p(j,O,{handler:function(e,t,n){var r="mouse"==n.pointerType;if(!(r&&n.sourceCapabilities&&n.sourceCapabilities.firesTouchEvents)){if("touch"==n.pointerType)(function(e,t){e&me?(this.primaryTouch=t.changedPointers[0].identifier,V.call(this,t)):e&(ge|ye)&&V.call(this,t)}).call(this,t,n);else if(r&&function(e){for(var t=e.srcEvent.clientX,n=e.srcEvent.clientY,r=0;r<this.lastTouches.length;r++){var i=this.lastTouches[r],o=Math.abs(t-i.x),l=Math.abs(n-i.y);if(o<=25&&l<=25)return!0}return!1}.call(this,n))return;this.callback(e,t,n)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Be=E(re.style,"touchAction"),He=Be!==a,We="manipulation",qe=function(){if(!He)return!1;var e={},t=i.CSS&&i.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(n){e[n]=!t||i.CSS.supports("touch-action",n)}),e}();z.prototype={set:function(e){"compute"==e&&(e=this.compute()),He&&this.manager.element.style&&qe[e]&&(this.manager.element.style[Be]=e),this.actions=e.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var e=[];return c(this.manager.recognizers,function(t){h(t.options.enable,[t])&&(e=e.concat(t.getTouchAction()))}),function(e){if(b(e,"none"))return"none";var t=b(e,"pan-x"),n=b(e,"pan-y");return t&&n?"none":t||n?t?"pan-x":"pan-y":b(e,We)?We:"auto"}(e.join(" "))},preventDefaults:function(e){var t=e.srcEvent,n=e.offsetDirection;if(this.manager.session.prevented)t.preventDefault();else{var r=this.actions,i=b(r,"none")&&!qe.none,o=b(r,"pan-y")&&!qe["pan-y"],l=b(r,"pan-x")&&!qe["pan-x"];if(i&&1===e.pointers.length&&e.distance<2&&e.deltaTime<250)return;if(!l||!o)return i||o&&n&Ce||l&&n&Ee?this.preventSrc(t):void 0}},preventSrc:function(e){this.manager.session.prevented=!0,e.preventDefault()}};var Ue=1,Ge=2,Ke=4,$e=8,Ze=$e,Qe=16;B.prototype={defaults:{},set:function(e){return te(this.options,e),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(e){if(u(e,"recognizeWith",this))return this;var t=this.simultaneous;return e=q(e,this),t[e.id]||(t[e.id]=e,e.recognizeWith(this)),this},dropRecognizeWith:function(e){return u(e,"dropRecognizeWith",this)?this:(e=q(e,this),delete this.simultaneous[e.id],this)},requireFailure:function(e){if(u(e,"requireFailure",this))return this;var t=this.requireFail;return e=q(e,this),-1===w(t,e)&&(t.push(e),e.requireFailure(this)),this},dropRequireFailure:function(e){if(u(e,"dropRequireFailure",this))return this;e=q(e,this);var t=w(this.requireFail,e);return t>-1&&this.requireFail.splice(t,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(e){return!!this.simultaneous[e.id]},emit:function(e){function t(t){n.manager.emit(t,e)}var n=this,r=this.state;r<$e&&t(n.options.event+H(r)),t(n.options.event),e.additionalEvent&&t(e.additionalEvent),r>=$e&&t(n.options.event+H(r))},tryEmit:function(e){if(this.canEmit())return this.emit(e);this.state=32},canEmit:function(){for(var e=0;e<this.requireFail.length;){if(!(this.requireFail[e].state&(32|Ue)))return!1;e++}return!0},recognize:function(e){var t=te({},e);if(!h(this.options.enable,[this,t]))return this.reset(),void(this.state=32);this.state&(Ze|Qe|32)&&(this.state=Ue),this.state=this.process(t),this.state&(Ge|Ke|$e|Qe)&&this.tryEmit(t)},process:function(e){},getTouchAction:function(){},reset:function(){}},p(U,B,{defaults:{pointers:1},attrTest:function(e){var t=this.options.pointers;return 0===t||e.pointers.length===t},process:function(e){var t=this.state,n=e.eventType,r=t&(Ge|Ke),i=this.attrTest(e);return r&&(n&ye||!i)?t|Qe:r||i?n&ge?t|$e:t&Ge?t|Ke:Ge:32}}),p(G,U,{defaults:{event:"pan",threshold:10,pointers:1,direction:Se},getTouchAction:function(){var e=this.options.direction,t=[];return e&Ce&&t.push("pan-y"),e&Ee&&t.push("pan-x"),t},directionTest:function(e){var t=this.options,n=!0,r=e.distance,i=e.direction,o=e.deltaX,l=e.deltaY;return i&t.direction||(t.direction&Ce?(i=0===o?ve:o<0?be:_e,n=o!=this.pX,r=Math.abs(e.deltaX)):(i=0===l?ve:l<0?we:xe,n=l!=this.pY,r=Math.abs(e.deltaY))),e.direction=i,n&&r>t.threshold&&i&t.direction},attrTest:function(e){return U.prototype.attrTest.call(this,e)&&(this.state&Ge||!(this.state&Ge)&&this.directionTest(e))},emit:function(e){this.pX=e.deltaX,this.pY=e.deltaY;var t=W(e.direction);t&&(e.additionalEvent=this.options.event+t),this._super.emit.call(this,e)}}),p(K,U,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return["none"]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||this.state&Ge)},emit:function(e){1!==e.scale&&(e.additionalEvent=this.options.event+(e.scale<1?"in":"out")),this._super.emit.call(this,e)}}),p($,B,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return["auto"]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,r=e.distance<t.threshold,i=e.deltaTime>t.time;if(this._input=e,!r||!n||e.eventType&(ge|ye)&&!i)this.reset();else if(e.eventType&me)this.reset(),this._timer=s(function(){this.state=Ze,this.tryEmit()},t.time,this);else if(e.eventType&ge)return Ze;return 32},reset:function(){clearTimeout(this._timer)},emit:function(e){this.state===Ze&&(e&&e.eventType&ge?this.manager.emit(this.options.event+"up",e):(this._input.timeStamp=ae(),this.manager.emit(this.options.event,this._input)))}}),p(Z,U,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return["none"]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||this.state&Ge)}}),p(Q,U,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Ce|Ee,pointers:1},getTouchAction:function(){return G.prototype.getTouchAction.call(this)},attrTest:function(e){var t,n=this.options.direction;return n&(Ce|Ee)?t=e.overallVelocity:n&Ce?t=e.overallVelocityX:n&Ee&&(t=e.overallVelocityY),this._super.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers==this.options.pointers&&le(t)>this.options.velocity&&e.eventType&ge},emit:function(e){var t=W(e.offsetDirection);t&&this.manager.emit(this.options.event+t,e),this.manager.emit(this.options.event,e)}}),p(Y,B,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[We]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,r=e.distance<t.threshold,i=e.deltaTime<t.time;if(this.reset(),e.eventType&me&&0===this.count)return this.failTimeout();if(r&&i&&n){if(e.eventType!=ge)return this.failTimeout();var o=!this.pTime||e.timeStamp-this.pTime<t.interval,l=!this.pCenter||M(this.pCenter,e.center)<t.posThreshold;if(this.pTime=e.timeStamp,this.pCenter=e.center,l&&o?this.count+=1:this.count=1,this._input=e,0==this.count%t.taps)return this.hasRequireFailures()?(this._timer=s(function(){this.state=Ze,this.tryEmit()},t.interval,this),Ge):Ze}return 32},failTimeout:function(){return this._timer=s(function(){this.state=32},this.options.interval,this),32},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==Ze&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),X.VERSION="2.0.7",X.defaults={domEvents:!1,touchAction:"compute",enable:!0,inputTarget:null,inputClass:null,preset:[[Z,{enable:!1}],[K,{enable:!1},["rotate"]],[Q,{direction:Ce}],[G,{direction:Ce},["swipe"]],[Y],[Y,{event:"doubletap",taps:2},["tap"]],[$]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},J.prototype={set:function(e){return te(this.options,e),e.touchAction&&this.touchAction.update(),e.inputTarget&&(this.input.destroy(),this.input.target=e.inputTarget,this.input.init()),this},stop:function(e){this.session.stopped=e?2:1},recognize:function(e){var t=this.session;if(!t.stopped){this.touchAction.preventDefaults(e);var n,r=this.recognizers,i=t.curRecognizer;(!i||i&&i.state&Ze)&&(i=t.curRecognizer=null);for(var o=0;o<r.length;)n=r[o],2===t.stopped||i&&n!=i&&!n.canRecognizeWith(i)?n.reset():n.recognize(e),!i&&n.state&(Ge|Ke|$e)&&(i=t.curRecognizer=n),o++}},get:function(e){if(e instanceof B)return e;for(var t=this.recognizers,n=0;n<t.length;n++)if(t[n].options.event==e)return t[n];return null},add:function(e){if(u(e,"add",this))return this;var t=this.get(e.options.event);return t&&this.remove(t),this.recognizers.push(e),e.manager=this,this.touchAction.update(),e},remove:function(e){if(u(e,"remove",this))return this;if(e=this.get(e)){var t=this.recognizers,n=w(t,e);-1!==n&&(t.splice(n,1),this.touchAction.update())}return this},on:function(e,t){if(e!==a&&t!==a){var n=this.handlers;return c(_(e),function(e){n[e]=n[e]||[],n[e].push(t)}),this}},off:function(e,t){if(e!==a){var n=this.handlers;return c(_(e),function(e){t?n[e]&&n[e].splice(w(n[e],t),1):delete n[e]}),this}},emit:function(e,t){this.options.domEvents&&function(e,t){var n=o.createEvent("Event");n.initEvent(e,!0,!0),n.gesture=t,t.target.dispatchEvent(n)}(e,t);var n=this.handlers[e]&&this.handlers[e].slice();if(n&&n.length){t.type=e,t.preventDefault=function(){t.srcEvent.preventDefault()};for(var r=0;r<n.length;)n[r](t),r++}},destroy:function(){this.element&&ee(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},te(X,{INPUT_START:me,INPUT_MOVE:2,INPUT_END:ge,INPUT_CANCEL:ye,STATE_POSSIBLE:Ue,STATE_BEGAN:Ge,STATE_CHANGED:Ke,STATE_ENDED:$e,STATE_RECOGNIZED:Ze,STATE_CANCELLED:Qe,STATE_FAILED:32,DIRECTION_NONE:ve,DIRECTION_LEFT:be,DIRECTION_RIGHT:_e,DIRECTION_UP:we,DIRECTION_DOWN:xe,DIRECTION_HORIZONTAL:Ce,DIRECTION_VERTICAL:Ee,DIRECTION_ALL:Se,Manager:J,Input:O,TouchAction:z,TouchInput:F,MouseInput:N,PointerEventInput:A,TouchMouseInput:j,SingleTouchInput:L,Recognizer:B,AttrRecognizer:U,Tap:Y,Pan:G,Swipe:Q,Pinch:K,Rotate:Z,Press:$,on:g,off:y,each:c,merge:ue,extend:se,assign:te,inherit:p,bindFn:f,prefixed:E}),(void 0!==i?i:"undefined"!=typeof self?self:{}).Hammer=X,(r=function(){return X}.call(t,n,t,e))===a||(e.exports=r)}(window,document)},rppw:function(e,t,n){var r=n("9wYb"),i=Math.min;e.exports=function(e){return e>0?i(r(e),9007199254740991):0}},soMw:function(e,t,n){var r=n("gBtn"),i=n("+pQw"),o=r.keys,l=r.key;r.exp({getOwnMetadataKeys:function(e){return o(i(e),arguments.length<2?void 0:l(arguments[1]))}})},t6ta:function(e,t,n){var r=n("gBtn"),i=n("+pQw"),o=n("uNkO"),l=r.key,a=r.set;r.exp({metadata:function(e,t){return function(n,r){a(e,t,(void 0!==r?i:o)(n),l(r))}}})},tose:function(e,t,n){var r=n("+pQw"),i=n("gNkH"),o=n("A1WY"),l=Object.defineProperty;t.f=n("V+0c")?Object.defineProperty:function(e,t,n){if(r(e),t=o(t,!0),r(n),i)try{return l(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},uIf7:function(module,__webpack_exports__,__webpack_require__){"use strict";function difference(e,t){return e.filter(function(e){return t.indexOf(e)<0})}function unliftState(e){return e.computedStates[e.currentStateIndex].state}function liftAction(e){return new PerformAction(e)}function applyOperators(e,t){return t.reduce(function(e,t){var n=t[0],r=t.slice(1);return n.apply(e,r)},e)}function computeNextEntry(e,t,n,r){if(r)return{state:n,error:"Interrupted by an error up the chain"};var i,o=n;try{o=e(n,t)}catch(e){i=e.toString(),console.error(e.stack||e)}return{state:o,error:i}}function recomputeStates(e,t,n,r,i,o,l){if(t>=e.length&&e.length===o.length)return e;for(var a=e.slice(0,t),s=t;s<o.length;s++){var u=o[s],c=i[u].action,d=a[s-1],p=d?d.state:r,f=d?d.error:void 0,h=l.indexOf(u)>-1?d:computeNextEntry(n,c,p,f);a.push(h)}return a}function liftInitialState(e,t){return{monitorState:t(void 0,{}),nextActionId:1,actionsById:{0:liftAction(INIT_ACTION)},stagedActionIds:[0],skippedActionIds:[],committedState:e,currentStateIndex:0,computedStates:[]}}function liftReducerWith(e,t,n,r){return void 0===r&&(r={}),function(i){return function(o,l){function a(e){for(var t=e,n=p.slice(1,t+1),r=0;r<n.length;r++){if(g[r+1].error){n=p.slice(1,(t=r)+1);break}delete c[n[r]]}f=f.filter(function(e){return-1===n.indexOf(e)}),p=[0].concat(p.slice(t+1)),h=g[t].state,g=g.slice(t),m=m>t?m-t:0}var s=o||t,u=s.monitorState,c=s.actionsById,d=s.nextActionId,p=s.stagedActionIds,f=s.skippedActionIds,h=s.committedState,m=s.currentStateIndex,g=s.computedStates;o||(c=Object.create(c));var y=0;switch(l.type){case RESET:c={0:liftAction(INIT_ACTION)},d=1,p=[0],f=[],h=e,m=0,g=[];break;case COMMIT:c={0:liftAction(INIT_ACTION)},d=1,p=[0],f=[],h=g[m].state,m=0,g=[];break;case ROLLBACK:c={0:liftAction(INIT_ACTION)},d=1,p=[0],f=[],m=0,g=[];break;case TOGGLE_ACTION:var v=l.id,b=f.indexOf(v);f=-1===b?[v].concat(f):f.filter(function(e){return e!==v}),y=p.indexOf(v);break;case SET_ACTIONS_ACTIVE:for(var _=l.start,w=l.end,x=l.active,C=[],E=_;E<w;E++)C.push(E);f=x?difference(f,C):f.concat(C),y=p.indexOf(_);break;case JUMP_TO_STATE:m=l.index,y=1/0;break;case SWEEP:p=difference(p,f),f=[],m=Math.min(m,p.length-1);break;case PERFORM_ACTION:r.maxAge&&p.length===r.maxAge&&a(1),m===p.length-1&&m++;var S=d++;c[S]=l,y=(p=p.concat([S])).length-1;break;case IMPORT_STATE:u=(O=l.nextLiftedState).monitorState,c=O.actionsById,d=O.nextActionId,p=O.stagedActionIds,f=O.skippedActionIds,h=O.committedState,m=O.currentStateIndex,g=O.computedStates;break;case __WEBPACK_IMPORTED_MODULE_1__ngrx_store__.p:case __WEBPACK_IMPORTED_MODULE_1__ngrx_store__.b:y=0,r.maxAge&&p.length>r.maxAge&&(g=recomputeStates(g,y,i,h,c,p,f),a(p.length-r.maxAge),y=1/0);break;default:y=1/0}return g=recomputeStates(g,y,i,h,c,p,f),u=n(u,l),{monitorState:u,actionsById:c,nextActionId:d,stagedActionIds:p,skippedActionIds:f,committedState:h,currentStateIndex:m,computedStates:g};var O}}}function createIsExtensionOrMonitorPresent(e,t){return Boolean(e)||t.monitor!==noMonitor}function createReduxDevtoolsExtension(){var e="__REDUX_DEVTOOLS_EXTENSION__";return"object"==typeof window&&void 0!==window[e]?window[e]:null}function createStateObservable(e){return e.state}function noMonitor(){return null}function createConfig(e){var t={maxAge:!1,monitor:noMonitor},n="function"==typeof e?e():e,r=Object.assign({},t,n);if(r.maxAge&&r.maxAge<2)throw new Error("Devtools 'maxAge' cannot be less than 2, got "+r.maxAge);return r}__webpack_require__.d(__webpack_exports__,"b",function(){return StoreDevtoolsModule}),__webpack_require__.d(__webpack_exports__,"a",function(){return StoreDevtools}),__webpack_require__.d(__webpack_exports__,"j",function(){return INITIAL_OPTIONS}),__webpack_require__.d(__webpack_exports__,"i",function(){return STORE_DEVTOOLS_CONFIG}),__webpack_require__.d(__webpack_exports__,"h",function(){return DevtoolsDispatcher}),__webpack_require__.d(__webpack_exports__,"l",function(){return DevtoolsExtension}),__webpack_require__.d(__webpack_exports__,"k",function(){return REDUX_DEVTOOLS_EXTENSION}),__webpack_require__.d(__webpack_exports__,"c",function(){return IS_EXTENSION_OR_MONITOR_PRESENT}),__webpack_require__.d(__webpack_exports__,"g",function(){return createConfig}),__webpack_require__.d(__webpack_exports__,"d",function(){return createIsExtensionOrMonitorPresent}),__webpack_require__.d(__webpack_exports__,"e",function(){return createReduxDevtoolsExtension}),__webpack_require__.d(__webpack_exports__,"f",function(){return createStateObservable});var __WEBPACK_IMPORTED_MODULE_0__angular_core__=__webpack_require__("LMZF"),__WEBPACK_IMPORTED_MODULE_1__ngrx_store__=__webpack_require__("ADVA"),__WEBPACK_IMPORTED_MODULE_2_rxjs_ReplaySubject__=__webpack_require__("5q5V"),__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_map__=__webpack_require__("dmC+"),__WEBPACK_IMPORTED_MODULE_4_rxjs_operator_merge__=__webpack_require__("BThc"),__WEBPACK_IMPORTED_MODULE_5_rxjs_operator_observeOn__=__webpack_require__("ozyc"),__WEBPACK_IMPORTED_MODULE_6_rxjs_operator_scan__=__webpack_require__("3k/+"),__WEBPACK_IMPORTED_MODULE_7_rxjs_operator_skip__=__webpack_require__("0l2a"),__WEBPACK_IMPORTED_MODULE_8_rxjs_operator_withLatestFrom__=__webpack_require__("ThPn"),__WEBPACK_IMPORTED_MODULE_9_rxjs_scheduler_queue__=__webpack_require__("Gcw1"),__WEBPACK_IMPORTED_MODULE_10_rxjs_Observable__=__webpack_require__("AP4T"),__WEBPACK_IMPORTED_MODULE_11_rxjs_observable_empty__=__webpack_require__("3m71"),__WEBPACK_IMPORTED_MODULE_12_rxjs_operator_filter__=__webpack_require__("6S6c"),__WEBPACK_IMPORTED_MODULE_13_rxjs_operator_share__=__webpack_require__("URbD"),__WEBPACK_IMPORTED_MODULE_14_rxjs_operator_switchMap__=__webpack_require__("GpNi"),__WEBPACK_IMPORTED_MODULE_15_rxjs_operator_takeUntil__=__webpack_require__("gy58"),__extends=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),PERFORM_ACTION="PERFORM_ACTION",RESET="RESET",ROLLBACK="ROLLBACK",COMMIT="COMMIT",SWEEP="SWEEP",TOGGLE_ACTION="TOGGLE_ACTION",SET_ACTIONS_ACTIVE="SET_ACTIONS_ACTIVE",JUMP_TO_STATE="JUMP_TO_STATE",IMPORT_STATE="IMPORT_STATE",PerformAction=function(){return function(e,t){if(this.action=e,this.timestamp=t,this.type=PERFORM_ACTION,void 0===e.type)throw new Error('Actions may not have an undefined "type" property. Have you misspelled a constant?')}}(),Reset=function(){return function(e){this.timestamp=e,this.type=RESET}}(),Rollback=function(){return function(e){this.timestamp=e,this.type=ROLLBACK}}(),Commit=function(){return function(e){this.timestamp=e,this.type=COMMIT}}(),Sweep=function(){return function(){this.type=SWEEP}}(),ToggleAction=function(){return function(e){this.id=e,this.type=TOGGLE_ACTION}}(),JumpToState=function(){return function(e){this.index=e,this.type=JUMP_TO_STATE}}(),ImportState=function(){return function(e){this.nextLiftedState=e,this.type=IMPORT_STATE}}(),ExtensionActionTypes={START:"START",DISPATCH:"DISPATCH",STOP:"STOP",ACTION:"ACTION"},REDUX_DEVTOOLS_EXTENSION=new __WEBPACK_IMPORTED_MODULE_0__angular_core__.InjectionToken("Redux Devtools Extension"),DevtoolsExtension=function(){function DevtoolsExtension(e){this.instanceId="ngrx-store-"+Date.now(),this.devtoolsExtension=e,this.createActionStreams()}return DevtoolsExtension.prototype.notify=function(e,t){this.devtoolsExtension&&this.devtoolsExtension.send(null,t,{serialize:!1},this.instanceId)},DevtoolsExtension.prototype.createChangesObservable=function(){var e=this;return this.devtoolsExtension?new __WEBPACK_IMPORTED_MODULE_10_rxjs_Observable__.a(function(t){var n=e.devtoolsExtension.connect({instanceId:e.instanceId});return n.subscribe(function(e){return t.next(e)}),n.unsubscribe}):Object(__WEBPACK_IMPORTED_MODULE_11_rxjs_observable_empty__.a)()},DevtoolsExtension.prototype.createActionStreams=function(){var e=this,t=__WEBPACK_IMPORTED_MODULE_13_rxjs_operator_share__.a.call(this.createChangesObservable()),n=__WEBPACK_IMPORTED_MODULE_12_rxjs_operator_filter__.a.call(t,function(e){return e.type===ExtensionActionTypes.START}),r=__WEBPACK_IMPORTED_MODULE_12_rxjs_operator_filter__.a.call(t,function(e){return e.type===ExtensionActionTypes.STOP}),i=applyOperators(t,[[__WEBPACK_IMPORTED_MODULE_12_rxjs_operator_filter__.a,function(e){return e.type===ExtensionActionTypes.DISPATCH}],[__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_map__.a,function(t){return e.unwrapAction(t.payload)}]]),o=applyOperators(t,[[__WEBPACK_IMPORTED_MODULE_12_rxjs_operator_filter__.a,function(e){return e.type===ExtensionActionTypes.ACTION}],[__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_map__.a,function(t){return e.unwrapAction(t.payload)}]]),l=__WEBPACK_IMPORTED_MODULE_15_rxjs_operator_takeUntil__.a.call(o,r),a=__WEBPACK_IMPORTED_MODULE_15_rxjs_operator_takeUntil__.a.call(i,r);this.actions$=__WEBPACK_IMPORTED_MODULE_14_rxjs_operator_switchMap__.a.call(n,function(){return l}),this.liftedActions$=__WEBPACK_IMPORTED_MODULE_14_rxjs_operator_switchMap__.a.call(n,function(){return a})},DevtoolsExtension.prototype.unwrapAction=function(action){return"string"==typeof action?eval("("+action+")"):action},DevtoolsExtension}(),INIT_ACTION={type:__WEBPACK_IMPORTED_MODULE_1__ngrx_store__.b},StoreDevtoolsConfig=function(){},STORE_DEVTOOLS_CONFIG=new __WEBPACK_IMPORTED_MODULE_0__angular_core__.InjectionToken("@ngrx/devtools Options"),INITIAL_OPTIONS=new __WEBPACK_IMPORTED_MODULE_0__angular_core__.InjectionToken("@ngrx/devtools Initial Config"),DevtoolsDispatcher=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return __extends(t,e),t}(__WEBPACK_IMPORTED_MODULE_1__ngrx_store__.a),StoreDevtools=function(){function e(e,t,n,r,i,o,l){var a=liftInitialState(o,l.monitor),s=liftReducerWith(o,a,l.monitor,l.maxAge?{maxAge:l.maxAge}:{}),u=applyOperators(t.asObservable(),[[__WEBPACK_IMPORTED_MODULE_7_rxjs_operator_skip__.a,1],[__WEBPACK_IMPORTED_MODULE_4_rxjs_operator_merge__.a,r.actions$],[__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_map__.a,liftAction],[__WEBPACK_IMPORTED_MODULE_4_rxjs_operator_merge__.a,e,r.liftedActions$],[__WEBPACK_IMPORTED_MODULE_5_rxjs_operator_observeOn__.a,__WEBPACK_IMPORTED_MODULE_9_rxjs_scheduler_queue__.a]]),c=__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_map__.a.call(n,s),d=new __WEBPACK_IMPORTED_MODULE_2_rxjs_ReplaySubject__.a(1),p=applyOperators(u,[[__WEBPACK_IMPORTED_MODULE_8_rxjs_operator_withLatestFrom__.a,c],[__WEBPACK_IMPORTED_MODULE_6_rxjs_operator_scan__.a,function(e,t){var n=t[0],i=(0,t[1])(e.state,n);return r.notify(n,i),{state:i,action:n}},{state:a,action:null}]]).subscribe(function(e){var t=e.action;d.next(e.state),t.type===PERFORM_ACTION&&i.next(t.action)}),f=d.asObservable(),h=__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_map__.a.call(f,unliftState);this.stateSubscription=p,this.dispatcher=e,this.liftedState=f,this.state=h}return e.prototype.dispatch=function(e){this.dispatcher.next(e)},e.prototype.next=function(e){this.dispatcher.next(e)},e.prototype.error=function(e){},e.prototype.complete=function(){},e.prototype.performAction=function(e){this.dispatch(new PerformAction(e))},e.prototype.reset=function(){this.dispatch(new Reset)},e.prototype.rollback=function(){this.dispatch(new Rollback)},e.prototype.commit=function(){this.dispatch(new Commit)},e.prototype.sweep=function(){this.dispatch(new Sweep)},e.prototype.toggleAction=function(e){this.dispatch(new ToggleAction(e))},e.prototype.jumpToState=function(e){this.dispatch(new JumpToState(e))},e.prototype.importState=function(e){this.dispatch(new ImportState(e))},e}(),IS_EXTENSION_OR_MONITOR_PRESENT=new __WEBPACK_IMPORTED_MODULE_0__angular_core__.InjectionToken("Is Devtools Extension or Monitor Present"),StoreDevtoolsModule=function(){function e(){}return e.instrument=function(t){return void 0===t&&(t={}),{ngModule:e,providers:[DevtoolsExtension,DevtoolsDispatcher,StoreDevtools,{provide:INITIAL_OPTIONS,useValue:t},{provide:IS_EXTENSION_OR_MONITOR_PRESENT,deps:[REDUX_DEVTOOLS_EXTENSION,STORE_DEVTOOLS_CONFIG],useFactory:createIsExtensionOrMonitorPresent},{provide:REDUX_DEVTOOLS_EXTENSION,useFactory:createReduxDevtoolsExtension},{provide:STORE_DEVTOOLS_CONFIG,deps:[INITIAL_OPTIONS],useFactory:createConfig},{provide:__WEBPACK_IMPORTED_MODULE_1__ngrx_store__.l,deps:[StoreDevtools],useFactory:createStateObservable},{provide:__WEBPACK_IMPORTED_MODULE_1__ngrx_store__.h,useExisting:DevtoolsDispatcher}]}},e}()},uNkO:function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},umMR:function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},vyV2:function(e,t,n){var r=n("+GRi"),i=n("rppw"),o=n("KM3d");e.exports=function(e){return function(t,n,l){var a,s=r(t),u=i(s.length),c=o(l,u);if(e&&n!=n){for(;u>c;)if((a=s[c++])!=a)return!0}else for(;u>c;c++)if((e||c in s)&&s[c]===n)return e||c||0;return!e&&-1}}},"w/BM":function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},wP3s:function(e,t,n){"use strict";t.a=function(e,t,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),function(r){return"number"==typeof t&&(n=t,t=null),r.lift(new l(e,t,n))}};var r=n("6Xbx"),i=n("qgI0"),o=n("lI6h"),l=function(){function e(e,t,n){void 0===n&&(n=Number.POSITIVE_INFINITY),this.project=e,this.resultSelector=t,this.concurrent=n}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.project,this.resultSelector,this.concurrent))},e}(),a=function(e){function t(t,n,r,i){void 0===i&&(i=Number.POSITIVE_INFINITY),e.call(this,t),this.project=n,this.resultSelector=r,this.concurrent=i,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}return Object(r.__extends)(t,e),t.prototype._next=function(e){this.active<this.concurrent?this._tryNext(e):this.buffer.push(e)},t.prototype._tryNext=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this.active++,this._innerSub(t,e,n)},t.prototype._innerSub=function(e,t,n){this.add(Object(i.a)(this,e,t,n))},t.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete()},t.prototype.notifyNext=function(e,t,n,r,i){this.resultSelector?this._notifyResultSelector(e,t,n,r):this.destination.next(t)},t.prototype._notifyResultSelector=function(e,t,n,r){var i;try{i=this.resultSelector(e,t,n,r)}catch(e){return void this.destination.error(e)}this.destination.next(i)},t.prototype.notifyComplete=function(e){var t=this.buffer;this.remove(e),this.active--,t.length>0?this._next(t.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},t}(o.a)},wRXj:function(e,t,n){"use strict";var r=n("6Xbx").__decorate,i=n("6Xbx").__metadata;Object.defineProperty(t,"__esModule",{value:!0});var o=n("LMZF"),l=n("fAeS"),a=n("Un6q"),s=n("/zAi"),u=n("4cOY"),c=n("P0cP"),d=n("0nO6");t.DROPDOWN_VALUE_ACCESSOR={provide:d.NG_VALUE_ACCESSOR,useExisting:o.forwardRef(function(){return p}),multi:!0};var p=function(){function e(e,t,n,r,i,l){this.el=e,this.domHandler=t,this.renderer=n,this.cd=r,this.objectUtils=i,this.zone=l,this.scrollHeight="200px",this.autoWidth=!0,this.filterBy="label",this.lazy=!0,this.resetFilterOnHide=!1,this.dropdownIcon="fa fa-fw fa-caret-down",this.onChange=new o.EventEmitter,this.onFocus=new o.EventEmitter,this.onBlur=new o.EventEmitter,this.onModelChange=function(){},this.onModelTouched=function(){},this.panelVisible=!1}return e.prototype.ngAfterContentInit=function(){var e=this;this.templates.forEach(function(t){switch(t.getType()){case"item":default:e.itemTemplate=t.template}})},e.prototype.ngOnInit=function(){this.optionsToDisplay=this.options,this.updateSelectedOption(null)},Object.defineProperty(e.prototype,"options",{get:function(){return this._options},set:function(e){var t=this.optionLabel?this.objectUtils.generateSelectItems(e,this.optionLabel):e;this._options=t,this.optionsToDisplay=this._options,this.updateSelectedOption(this.value),this.optionsChanged=!0,this.filterValue&&this.filterValue.length&&this.activateFilter()},enumerable:!0,configurable:!0}),e.prototype.ngAfterViewInit=function(){this.container=this.containerViewChild.nativeElement,this.panel=this.panelViewChild.nativeElement,this.itemsWrapper=this.itemsWrapperViewChild.nativeElement,this.editable&&this.updateEditableLabel(),this.updateDimensions(),this.initialized=!0,this.appendTo&&("body"===this.appendTo?document.body.appendChild(this.panel):this.domHandler.appendChild(this.panel,this.appendTo))},Object.defineProperty(e.prototype,"label",{get:function(){return this.selectedOption?this.selectedOption.label:null},enumerable:!0,configurable:!0}),e.prototype.updateEditableLabel=function(){this.editableInputViewChild&&this.editableInputViewChild.nativeElement&&(this.editableInputViewChild.nativeElement.value=this.selectedOption?this.selectedOption.label:this.value||"")},e.prototype.onItemClick=function(e,t){this.itemClick=!0,this.selectItem(e,t),this.focusViewChild.nativeElement.focus(),this.hide()},e.prototype.selectItem=function(e,t){this.selectedOption!=t&&(this.selectedOption=t,this.value=t.value,this.onModelChange(this.value),this.updateEditableLabel(),this.onChange.emit({originalEvent:e,value:this.value}))},e.prototype.ngAfterViewChecked=function(){var e=this;this.shown&&(this.onShow(),this.shown=!1),this.optionsChanged&&this.panelVisible&&(this.optionsChanged=!1,this.zone.runOutsideAngular(function(){setTimeout(function(){e.updateDimensions(),e.alignPanel()},1)})),this.selectedOptionUpdated&&this.itemsWrapper&&(this.domHandler.findSingle(this.panel,"li.ui-state-highlight")&&this.domHandler.scrollInView(this.itemsWrapper,this.domHandler.findSingle(this.panel,"li.ui-state-highlight")),this.selectedOptionUpdated=!1)},e.prototype.writeValue=function(e){this.filter&&this.resetFilter(),this.value=e,this.updateSelectedOption(e),this.updateEditableLabel(),this.cd.markForCheck()},e.prototype.resetFilter=function(){this.filterViewChild&&this.filterViewChild.nativeElement&&(this.filterViewChild.nativeElement.value=""),this.optionsToDisplay=this.options},e.prototype.updateSelectedOption=function(e){this.selectedOption=this.findOption(e,this.optionsToDisplay),this.placeholder||this.selectedOption||!this.optionsToDisplay||!this.optionsToDisplay.length||this.editable||(this.selectedOption=this.optionsToDisplay[0]),this.selectedOptionUpdated=!0},e.prototype.registerOnChange=function(e){this.onModelChange=e},e.prototype.registerOnTouched=function(e){this.onModelTouched=e},e.prototype.setDisabledState=function(e){this.disabled=e},e.prototype.updateDimensions=function(){if(this.autoWidth){var e=this.domHandler.findSingle(this.el.nativeElement,"select");this.style&&(this.style.width||this.style["min-width"])||(this.el.nativeElement.children[0].style.width=e.offsetWidth+30+"px")}},e.prototype.onMouseclick=function(e){var t=this;this.disabled||this.readonly||(this.selfClick=!0,this.itemClick||(this.focusViewChild.nativeElement.focus(),this.panelVisible?this.hide():(this.show(),void 0!=this.filterViewChild&&setTimeout(function(){t.filterViewChild.nativeElement.focus()},200))))},e.prototype.onEditableInputClick=function(e){this.itemClick=!0,this.bindDocumentClickListener()},e.prototype.onEditableInputFocus=function(e){this.focus=!0,this.hide()},e.prototype.onEditableInputChange=function(e){this.value=e.target.value,this.updateSelectedOption(this.value),this.onModelChange(this.value),this.onChange.emit({originalEvent:e,value:this.value})},e.prototype.onShow=function(){if(this.options&&this.options.length){this.alignPanel(),this.bindDocumentClickListener();var e=this.domHandler.findSingle(this.itemsWrapper,".ui-dropdown-item.ui-state-highlight");e&&this.domHandler.scrollInView(this.itemsWrapper,e)}},e.prototype.show=function(){this.appendTo&&(this.panel.style.minWidth=this.domHandler.getWidth(this.container)+"px"),this.panel.style.zIndex=String(++u.DomHandler.zindex),this.panelVisible=!0,this.shown=!0},e.prototype.hide=function(){this.panelVisible=!1,this.filter&&this.resetFilterOnHide&&this.resetFilter()},e.prototype.alignPanel=function(){this.appendTo?this.domHandler.absolutePosition(this.panel,this.container):this.domHandler.relativePosition(this.panel,this.container)},e.prototype.onInputFocus=function(e){this.focus=!0,this.onFocus.emit(e)},e.prototype.onInputBlur=function(e){this.focus=!1,this.onModelTouched(),this.onBlur.emit(e)},e.prototype.onKeydown=function(e){if(!this.readonly){var t=this.selectedOption?this.findOptionIndex(this.selectedOption.value,this.optionsToDisplay):-1;switch(e.which){case 40:if(!this.panelVisible&&e.altKey)this.show();else if(-1!==t){var n=t+1;n!=this.optionsToDisplay.length&&(this.selectItem(e,this.optionsToDisplay[n]),this.selectedOptionUpdated=!0)}else this.optionsToDisplay&&this.selectItem(e,this.optionsToDisplay[0]);e.preventDefault();break;case 38:t>0&&(this.selectItem(e,this.optionsToDisplay[t-1]),this.selectedOptionUpdated=!0),e.preventDefault();break;case 32:case 32:this.panelVisible||(this.show(),e.preventDefault());break;case 13:this.hide(),e.preventDefault();break;case 27:case 9:this.hide()}}},e.prototype.findOptionIndex=function(e,t){var n=-1;if(t)for(var r=0;r<t.length;r++)if(null==e&&null==t[r].value||this.objectUtils.equals(e,t[r].value,this.dataKey)){n=r;break}return n},e.prototype.findOption=function(e,t){var n=this.findOptionIndex(e,t);return-1!=n?t[n]:null},e.prototype.onFilter=function(e){var t=e.target.value.toLowerCase();t&&t.length?(this.filterValue=t,this.activateFilter()):(this.filterValue=null,this.optionsToDisplay=this.options),this.optionsChanged=!0},e.prototype.activateFilter=function(){var e=this.filterBy.split(",");this.options&&this.options.length&&(this.optionsToDisplay=this.objectUtils.filter(this.options,e,this.filterValue),this.optionsChanged=!0)},e.prototype.applyFocus=function(){this.editable?this.domHandler.findSingle(this.el.nativeElement,".ui-dropdown-label.ui-inputtext").focus():this.domHandler.findSingle(this.el.nativeElement,"input[readonly]").focus()},e.prototype.bindDocumentClickListener=function(){var e=this;this.documentClickListener||(this.documentClickListener=this.renderer.listen("document","click",function(){e.selfClick||e.itemClick||(e.panelVisible=!1,e.unbindDocumentClickListener()),e.selfClick=!1,e.itemClick=!1,e.cd.markForCheck()}))},e.prototype.unbindDocumentClickListener=function(){this.documentClickListener&&(this.documentClickListener(),this.documentClickListener=null)},e.prototype.ngOnDestroy=function(){this.initialized=!1,this.unbindDocumentClickListener(),this.appendTo&&this.el.nativeElement.appendChild(this.panel)},e}();r([o.Input(),i("design:type",String)],p.prototype,"scrollHeight",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"filter",void 0),r([o.Input(),i("design:type",String)],p.prototype,"name",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"style",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"panelStyle",void 0),r([o.Input(),i("design:type",String)],p.prototype,"styleClass",void 0),r([o.Input(),i("design:type",String)],p.prototype,"panelStyleClass",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"disabled",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"readonly",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"autoWidth",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"required",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"editable",void 0),r([o.Input(),i("design:type",Object)],p.prototype,"appendTo",void 0),r([o.Input(),i("design:type",Number)],p.prototype,"tabindex",void 0),r([o.Input(),i("design:type",String)],p.prototype,"placeholder",void 0),r([o.Input(),i("design:type",String)],p.prototype,"filterPlaceholder",void 0),r([o.Input(),i("design:type",String)],p.prototype,"inputId",void 0),r([o.Input(),i("design:type",String)],p.prototype,"dataKey",void 0),r([o.Input(),i("design:type",String)],p.prototype,"filterBy",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"lazy",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"autofocus",void 0),r([o.Input(),i("design:type",Boolean)],p.prototype,"resetFilterOnHide",void 0),r([o.Input(),i("design:type",String)],p.prototype,"dropdownIcon",void 0),r([o.Input(),i("design:type",String)],p.prototype,"optionLabel",void 0),r([o.Output(),i("design:type",o.EventEmitter)],p.prototype,"onChange",void 0),r([o.Output(),i("design:type",o.EventEmitter)],p.prototype,"onFocus",void 0),r([o.Output(),i("design:type",o.EventEmitter)],p.prototype,"onBlur",void 0),r([o.ViewChild("container"),i("design:type",o.ElementRef)],p.prototype,"containerViewChild",void 0),r([o.ViewChild("panel"),i("design:type",o.ElementRef)],p.prototype,"panelViewChild",void 0),r([o.ViewChild("itemswrapper"),i("design:type",o.ElementRef)],p.prototype,"itemsWrapperViewChild",void 0),r([o.ViewChild("filter"),i("design:type",o.ElementRef)],p.prototype,"filterViewChild",void 0),r([o.ViewChild("in"),i("design:type",o.ElementRef)],p.prototype,"focusViewChild",void 0),r([o.ViewChild("editableInput"),i("design:type",o.ElementRef)],p.prototype,"editableInputViewChild",void 0),r([o.ContentChildren(s.PrimeTemplate),i("design:type",o.QueryList)],p.prototype,"templates",void 0),r([o.Input(),i("design:type",Array),i("design:paramtypes",[Array])],p.prototype,"options",null),p=r([o.Component({selector:"p-dropdown",template:'\n         <div #container [ngClass]="{\'ui-dropdown ui-widget ui-state-default ui-corner-all ui-helper-clearfix\':true,\n            \'ui-state-disabled\':disabled,\'ui-dropdown-open\':panelVisible,\'ui-state-focus\':focus}"\n            (click)="onMouseclick($event)" [ngStyle]="style" [class]="styleClass">\n            <div class="ui-helper-hidden-accessible" *ngIf="autoWidth">\n                <select [required]="required" [attr.name]="name" [attr.aria-label]="selectedOption ? selectedOption.label : \' \'" tabindex="-1" aria-hidden="true">\n                    <option *ngIf="placeholder">{{placeholder}}</option>\n                    <option *ngFor="let option of options" [value]="option.value" [selected]="selectedOption == option">{{option.label}}</option>\n                </select>\n            </div>\n            <div class="ui-helper-hidden-accessible">\n                <input #in [attr.id]="inputId" type="text" [attr.aria-label]="selectedOption ? selectedOption.label : \' \'" readonly (focus)="onInputFocus($event)" role="listbox"\n                    (blur)="onInputBlur($event)" (keydown)="onKeydown($event)" [disabled]="disabled" [attr.tabindex]="tabindex" [attr.autofocus]="autofocus">\n            </div>\n            <label [ngClass]="{\'ui-dropdown-label ui-inputtext ui-corner-all\':true,\'ui-dropdown-label-empty\':(label == null || label.length === 0)}" *ngIf="!editable && (label != null)">{{label||\'empty\'}}</label>\n            <label [ngClass]="{\'ui-dropdown-label ui-inputtext ui-corner-all ui-placeholder\':true,\'ui-dropdown-label-empty\': (placeholder == null || placeholder.length === 0)}" *ngIf="!editable && (label == null)">{{placeholder||\'empty\'}}</label>\n            <input #editableInput type="text" [attr.aria-label]="selectedOption ? selectedOption.label : \' \'" class="ui-dropdown-label ui-inputtext ui-corner-all" *ngIf="editable" [disabled]="disabled" [attr.placeholder]="placeholder"\n                        (click)="onEditableInputClick($event)" (input)="onEditableInputChange($event)" (focus)="onEditableInputFocus($event)" (blur)="onInputBlur($event)">\n            <div class="ui-dropdown-trigger ui-state-default ui-corner-right">\n                <span class="ui-clickable" [ngClass]="dropdownIcon"></span>\n            </div>\n            <div #panel [ngClass]="\'ui-dropdown-panel ui-widget-content ui-corner-all ui-shadow\'" [@panelState]="panelVisible ? \'visible\' : \'hidden\'"\n                [style.display]="panelVisible ? \'block\' : \'none\'" [ngStyle]="panelStyle" [class]="panelStyleClass">\n                <div *ngIf="filter" class="ui-dropdown-filter-container" (input)="onFilter($event)" (click)="$event.stopPropagation()">\n                    <input #filter type="text" autocomplete="off" class="ui-dropdown-filter ui-inputtext ui-widget ui-state-default ui-corner-all" [attr.placeholder]="filterPlaceholder"\n                    (keydown.enter)="$event.preventDefault()" (keydown)="onKeydown($event)">\n                    <span class="fa fa-search"></span>\n                </div>\n                <div #itemswrapper class="ui-dropdown-items-wrapper" [style.max-height]="scrollHeight||\'auto\'">\n                    <ul class="ui-dropdown-items ui-dropdown-list ui-widget-content ui-widget ui-corner-all ui-helper-reset" *ngIf="lazy ? panelVisible : true">\n                        <li *ngFor="let option of optionsToDisplay;let i=index"\n                            [ngClass]="{\'ui-dropdown-item ui-corner-all\':true, \'ui-state-highlight\':(selectedOption == option),\n                            \'ui-dropdown-item-empty\':!option.label||option.label.length === 0}"\n                            (click)="onItemClick($event, option)">\n                            <span *ngIf="!itemTemplate">{{option.label||\'empty\'}}</span>\n                            <ng-template [pTemplateWrapper]="itemTemplate" [item]="option" *ngIf="itemTemplate"></ng-template>\n                        </li>\n                    </ul>\n                </div>\n            </div>\n        </div>\n    ',animations:[l.trigger("panelState",[l.state("hidden",l.style({opacity:0})),l.state("visible",l.style({opacity:1})),l.transition("visible => hidden",l.animate("400ms ease-in")),l.transition("hidden => visible",l.animate("400ms ease-out"))])],providers:[u.DomHandler,c.ObjectUtils,t.DROPDOWN_VALUE_ACCESSOR]})],p),t.Dropdown=p;var f=function(){};f=r([o.NgModule({imports:[a.CommonModule,s.SharedModule],exports:[p,s.SharedModule],declarations:[p]})],f),t.DropdownModule=f},wclm:function(e,t,n){"use strict";var r=n("6Xbx"),i=function(){function e(t,n){void 0===n&&(n=e.now),this.SchedulerAction=t,this.now=n}return e.prototype.schedule=function(e,t,n){return void 0===t&&(t=0),new this.SchedulerAction(this,e).schedule(n,t)},e.now=Date.now?Date.now:function(){return+new Date},e}();n.d(t,"a",function(){return o});var o=function(e){function t(){e.apply(this,arguments),this.actions=[],this.active=!1,this.scheduled=void 0}return Object(r.__extends)(t,e),t.prototype.flush=function(e){var t=this.actions;if(this.active)t.push(e);else{var n;this.active=!0;do{if(n=e.execute(e.state,e.delay))break}while(e=t.shift());if(this.active=!1,n){for(;e=t.shift();)e.unsubscribe();throw n}}},t}(i)},xI8H:function(e,t,n){var r=n("c09d")("meta"),i=n("JXkd"),o=n("rMsi"),l=n("tose").f,a=0,s=Object.isExtensible||function(){return!0},u=!n("umMR")(function(){return s(Object.preventExtensions({}))}),c=function(e){l(e,r,{value:{i:"O"+ ++a,w:{}}})},d=e.exports={KEY:r,NEED:!1,fastKey:function(e,t){if(!i(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!o(e,r)){if(!s(e))return"F";if(!t)return"E";c(e)}return e[r].i},getWeak:function(e,t){if(!o(e,r)){if(!s(e))return!0;if(!t)return!1;c(e)}return e[r].w},onFreeze:function(e){return u&&d.NEED&&s(e)&&!o(e,r)&&c(e),e}}},xIGM:function(e,t,n){"use strict";(function(e){n.d(t,"a",function(){return o});var r="undefined"!=typeof window&&window,i="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,o=r||void 0!==e&&e||i}).call(t,n("fRUx"))},yIWP:function(e,t,n){var r=n("Iclu")("keys"),i=n("c09d");e.exports=function(e){return r[e]||(r[e]=i(e))}}},[0]);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/static/polyfills.32ca5670d6503e090789.bundle.js b/asterixdb/asterix-app/src/main/resources/dashboard/static/polyfills.32ca5670d6503e090789.bundle.js
new file mode 100644
index 0000000..053fad1
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/static/polyfills.32ca5670d6503e090789.bundle.js
@@ -0,0 +1 @@
+webpackJsonp([1],{"+GRi":function(e,t,n){var r=n("Wo2w"),o=n("Wy9r");e.exports=function(e){return r(o(e))}},"+iEx":function(e,t,n){n("fHxy"),n("5GJ3"),n("X0O/"),n("HCkn"),n("ncNB"),n("soMw"),n("8sYH"),n("IJ3P"),n("t6ta"),e.exports=n("b4gG").Reflect},"+pQw":function(e,t,n){var r=n("JXkd");e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},1:function(e,t,n){e.exports=n("TU+8")},"2Fuj":function(e,t,n){var r=n("R5c1"),o=n("a/Sk");e.exports=Object.keys||function(e){return r(e,o)}},"3LDD":function(e,t,n){"use strict";var r=n("tose").f,o=n("51pc"),i=n("pBmS"),a=n("pa70"),c=n("Lcie"),u=n("p/bR"),s=n("WsSm"),l=n("w/BM"),f=n("KpXt"),p=n("V+0c"),h=n("xI8H").fastKey,d=n("Y5fy"),v=p?"_s":"size",y=function(e,t){var n,r=h(t);if("F"!==r)return e._i[r];for(n=e._f;n;n=n.n)if(n.k==t)return n};e.exports={getConstructor:function(e,t,n,s){var l=e(function(e,r){c(e,l,t,"_i"),e._t=t,e._i=o(null),e._f=void 0,e._l=void 0,e[v]=0,void 0!=r&&u(r,n,e[s],e)});return i(l.prototype,{clear:function(){for(var e=d(this,t),n=e._i,r=e._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];e._f=e._l=void 0,e[v]=0},delete:function(e){var n=d(this,t),r=y(n,e);if(r){var o=r.n,i=r.p;delete n._i[r.i],r.r=!0,i&&(i.n=o),o&&(o.p=i),n._f==r&&(n._f=o),n._l==r&&(n._l=i),n[v]--}return!!r},forEach:function(e){d(this,t);for(var n,r=a(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!y(d(this,t),e)}}),p&&r(l.prototype,"size",{get:function(){return d(this,t)[v]}}),l},def:function(e,t,n){var r,o,i=y(e,t);return i?i.v=n:(e._l=i={i:o=h(t,!0),k:t,v:n,p:r=e._l,n:void 0,r:!1},e._f||(e._f=i),r&&(r.n=i),e[v]++,"F"!==o&&(e._i[o]=i)),e},getEntry:y,setStrong:function(e,t,n){s(e,t,function(e,n){this._t=d(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?l(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,l(1))},n?"entries":"values",!n,!0),f(t)}}},"3r0D":function(e,t,n){var r=n("Iclu")("wks"),o=n("c09d"),i=n("ptrv").Symbol,a="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))}).store=r},"51pc":function(e,t,n){var r=n("+pQw"),o=n("ewdp"),i=n("a/Sk"),a=n("yIWP")("IE_PROTO"),c=function(){},u=function(){var e,t=n("BQSv")("iframe"),r=i.length;for(t.style.display="none",n("Ed9o").appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),u=e.F;r--;)delete u.prototype[i[r]];return u()};e.exports=Object.create||function(e,t){var n;return null!==e?(c.prototype=r(e),n=new c,c.prototype=null,n[a]=e):n=u(),void 0===t?n:o(n,t)}},"5GJ3":function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=r.key,a=r.map,c=r.store;r.exp({deleteMetadata:function(e,t){var n=arguments.length<3?void 0:i(arguments[2]),r=a(o(t),n,!1);if(void 0===r||!r.delete(e))return!1;if(r.size)return!0;var u=c.get(t);return u.delete(n),!!u.size||c.delete(t)}})},"5oDA":function(e,t,n){var r=n("JXkd"),o=n("+pQw"),i=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,r){try{(r=n("pa70")(Function.call,n("6De9").f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,n){return i(e,n),t?e.__proto__=n:r(e,n),e}}({},!1):void 0),check:i}},"6De9":function(e,t,n){var r=n("9e9+"),o=n("piOq"),i=n("+GRi"),a=n("A1WY"),c=n("rMsi"),u=n("gNkH"),s=Object.getOwnPropertyDescriptor;t.f=n("V+0c")?s:function(e,t){if(e=i(e),t=a(t,!0),u)try{return s(e,t)}catch(e){}if(c(e,t))return o(!r.f.call(e,t),e[t])}},"8sYH":function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=n("TJLg"),a=r.has,c=r.key,u=function(e,t,n){if(a(e,t,n))return!0;var r=i(t);return null!==r&&u(e,r,n)};r.exp({hasMetadata:function(e,t){return u(e,o(t),arguments.length<3?void 0:c(arguments[2]))}})},"9ScN":function(e,t,n){"use strict";var r=n("51pc"),o=n("piOq"),i=n("P6IN"),a={};n("gxdV")(a,n("3r0D")("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(a,{next:o(1,n)}),i(e,t+" Iterator")}},"9e9+":function(e,t){t.f={}.propertyIsEnumerable},"9wYb":function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},A1WY:function(e,t,n){var r=n("JXkd");e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},BCYq:function(e,t,n){var r=n("pa70"),o=n("Wo2w"),i=n("RT4T"),a=n("rppw"),c=n("UKZQ");e.exports=function(e,t){var n=1==e,u=2==e,s=3==e,l=4==e,f=6==e,p=5==e||f,h=t||c;return function(t,c,d){for(var v,y,g=i(t),k=o(g),m=r(c,d,3),_=a(k.length),b=0,w=n?h(t,_):u?h(t,0):void 0;_>b;b++)if((p||b in k)&&(v=k[b],y=m(v,b,g),e))if(n)w[b]=y;else if(y)switch(e){case 3:return!0;case 5:return v;case 6:return b;case 2:w.push(v)}else if(l)return!1;return f?-1:s||l?l:w}}},BQSv:function(e,t,n){var r=n("JXkd"),o=n("ptrv").document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},CDXM:function(e,t,n){var r=n("ptrv"),o=n("b4gG"),i=n("gxdV"),a=n("lfBE"),c=n("pa70"),u=function(e,t,n){var s,l,f,p,h=e&u.F,d=e&u.G,v=e&u.P,y=e&u.B,g=d?r:e&u.S?r[t]||(r[t]={}):(r[t]||{}).prototype,k=d?o:o[t]||(o[t]={}),m=k.prototype||(k.prototype={});d&&(n=t);for(s in n)f=((l=!h&&g&&void 0!==g[s])?g:n)[s],p=y&&l?c(f,r):v&&"function"==typeof f?c(Function.call,f):f,g&&a(g,s,f,e&u.U),k[s]!=f&&i(k,s,p),v&&m[s]!=f&&(m[s]=f)};r.core=o,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,e.exports=u},Ed9o:function(e,t,n){var r=n("ptrv").document;e.exports=r&&r.documentElement},HCkn:function(e,t,n){var r=n("Ps07"),o=n("WGJ/"),i=n("gBtn"),a=n("+pQw"),c=n("TJLg"),u=i.keys,s=i.key,l=function(e,t){var n=u(e,t),i=c(e);if(null===i)return n;var a=l(i,t);return a.length?n.length?o(new r(n.concat(a))):a:n};i.exp({getMetadataKeys:function(e){return l(a(e),arguments.length<2?void 0:s(arguments[1]))}})},IJ3P:function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=r.has,a=r.key;r.exp({hasOwnMetadata:function(e,t){return i(e,o(t),arguments.length<3?void 0:a(arguments[2]))}})},Iclu:function(e,t,n){var r=n("ptrv"),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});e.exports=function(e){return o[e]||(o[e]={})}},JXkd:function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},KGrn:function(e,t){e.exports=!1},KM3d:function(e,t,n){var r=n("9wYb"),o=Math.max,i=Math.min;e.exports=function(e,t){return(e=r(e))<0?o(e+t,0):i(e,t)}},"KpI+":function(e,t,n){var r=n("lexG"),o=n("3r0D")("iterator"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||i[o]===e)}},KpXt:function(e,t,n){"use strict";var r=n("ptrv"),o=n("tose"),i=n("V+0c"),a=n("3r0D")("species");e.exports=function(e){var t=r[e];i&&t&&!t[a]&&o.f(t,a,{configurable:!0,get:function(){return this}})}},Lcie:function(e,t){e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e}},P6IN:function(e,t,n){var r=n("tose").f,o=n("rMsi"),i=n("3r0D")("toStringTag");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},Ps07:function(e,t,n){"use strict";var r=n("3LDD"),o=n("Y5fy");e.exports=n("cpZ/")("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return r.def(o(this,"Set"),e=0===e?0:e,e)}},r)},QZhw:function(e,t,n){"use strict";var r,o=n("BCYq")(0),i=n("lfBE"),a=n("xI8H"),c=n("rIdM"),u=n("XRS9"),s=n("JXkd"),l=n("umMR"),f=n("Y5fy"),p=a.getWeak,h=Object.isExtensible,d=u.ufstore,v={},y=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},g={get:function(e){if(s(e)){var t=p(e);return!0===t?d(f(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return u.def(f(this,"WeakMap"),e,t)}},k=e.exports=n("cpZ/")("WeakMap",y,g,u,!0,!0);l(function(){return 7!=(new k).set((Object.freeze||Object)(v),7).get(v)})&&(c((r=u.getConstructor(y,"WeakMap")).prototype,g),a.NEED=!0,o(["delete","has","get","set"],function(e){var t=k.prototype,n=t[e];i(t,e,function(t,o){if(s(t)&&!h(t)){this._f||(this._f=new r);var i=this._f[e](t,o);return"set"==e?this:i}return n.call(this,t,o)})}))},R5c1:function(e,t,n){var r=n("rMsi"),o=n("+GRi"),i=n("vyV2")(!1),a=n("yIWP")("IE_PROTO");e.exports=function(e,t){var n,c=o(e),u=0,s=[];for(n in c)n!=a&&r(c,n)&&s.push(n);for(;t.length>u;)r(c,n=t[u++])&&(~i(s,n)||s.push(n));return s}},RT4T:function(e,t,n){var r=n("Wy9r");e.exports=function(e){return Object(r(e))}},TJLg:function(e,t,n){var r=n("rMsi"),o=n("RT4T"),i=n("yIWP")("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=o(e),r(e,i)?e[i]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},"TU+8":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n("+iEx"),o=(n.n(r),n("eFQL"));n.n(o)},UKZQ:function(e,t,n){var r=n("a7b8");e.exports=function(e,t){return new(r(e))(t)}},ULWX:function(e,t,n){var r=n("+pQw");e.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(t){var i=e.return;throw void 0!==i&&r(i.call(e)),t}}},UlVq:function(e,t,n){var r=n("3r0D")("iterator"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i=[7],a=i[r]();a.next=function(){return{done:n=!0}},i[r]=function(){return a},e(i)}catch(e){}return n}},Ula3:function(e,t,n){var r=n("JXkd"),o=n("5oDA").set;e.exports=function(e,t,n){var i,a=t.constructor;return a!==n&&"function"==typeof a&&(i=a.prototype)!==n.prototype&&r(i)&&o&&o(e,i),e}},"V+0c":function(e,t,n){e.exports=!n("umMR")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},VceJ:function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},"WGJ/":function(e,t,n){var r=n("p/bR");e.exports=function(e,t){var n=[];return r(e,!1,n.push,n,t),n}},Wo2w:function(e,t,n){var r=n("VceJ");e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},WsSm:function(e,t,n){"use strict";var r=n("KGrn"),o=n("CDXM"),i=n("lfBE"),a=n("gxdV"),c=n("rMsi"),u=n("lexG"),s=n("9ScN"),l=n("P6IN"),f=n("TJLg"),p=n("3r0D")("iterator"),h=!([].keys&&"next"in[].keys()),d=function(){return this};e.exports=function(e,t,n,v,y,g,k){s(n,t,v);var m,_,b,w=function(e){if(!h&&e in x)return x[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},T=t+" Iterator",E="values"==y,O=!1,x=e.prototype,S=x[p]||x["@@iterator"]||y&&x[y],D=!h&&S||w(y),P=y?E?w("entries"):D:void 0,j="Array"==t?x.entries||S:S;if(j&&(b=f(j.call(new e)))!==Object.prototype&&b.next&&(l(b,T,!0),r||c(b,p)||a(b,p,d)),E&&S&&"values"!==S.name&&(O=!0,D=function(){return S.call(this)}),r&&!k||!h&&!O&&x[p]||a(x,p,D),u[t]=D,u[T]=d,y)if(m={values:E?D:w("values"),keys:g?D:w("keys"),entries:P},k)for(_ in m)_ in x||i(x,_,m[_]);else o(o.P+o.F*(h||O),t,m);return m}},Wy9r:function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e}},"X0O/":function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=n("TJLg"),a=r.has,c=r.get,u=r.key,s=function(e,t,n){if(a(e,t,n))return c(e,t,n);var r=i(t);return null!==r?s(e,r,n):void 0};r.exp({getMetadata:function(e,t){return s(e,o(t),arguments.length<3?void 0:u(arguments[2]))}})},XRS9:function(e,t,n){"use strict";var r=n("pBmS"),o=n("xI8H").getWeak,i=n("+pQw"),a=n("JXkd"),c=n("Lcie"),u=n("p/bR"),s=n("BCYq"),l=n("rMsi"),f=n("Y5fy"),p=s(5),h=s(6),d=0,v=function(e){return e._l||(e._l=new y)},y=function(){this.a=[]},g=function(e,t){return p(e.a,function(e){return e[0]===t})};y.prototype={get:function(e){var t=g(this,e);if(t)return t[1]},has:function(e){return!!g(this,e)},set:function(e,t){var n=g(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=h(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,i){var s=e(function(e,r){c(e,s,t,"_i"),e._t=t,e._i=d++,e._l=void 0,void 0!=r&&u(r,n,e[i],e)});return r(s.prototype,{delete:function(e){if(!a(e))return!1;var n=o(e);return!0===n?v(f(this,t)).delete(e):n&&l(n,this._i)&&delete n[this._i]},has:function(e){if(!a(e))return!1;var n=o(e);return!0===n?v(f(this,t)).has(e):n&&l(n,this._i)}}),s},def:function(e,t,n){var r=o(i(t),!0);return!0===r?v(e).set(t,n):r[e._i]=n,e},ufstore:v}},Y5fy:function(e,t,n){var r=n("JXkd");e.exports=function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}},ZI9W:function(e,t,n){"use strict";var r=n("3LDD"),o=n("Y5fy");e.exports=n("cpZ/")("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=r.getEntry(o(this,"Map"),e);return t&&t.v},set:function(e,t){return r.def(o(this,"Map"),0===e?0:e,t)}},r,!0)},"a/Sk":function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},a7b8:function(e,t,n){var r=n("JXkd"),o=n("rKhO"),i=n("3r0D")("species");e.exports=function(e){var t;return o(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!o(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},b4gG:function(e,t){var n=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=n)},c09d:function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},"cpZ/":function(e,t,n){"use strict";var r=n("ptrv"),o=n("CDXM"),i=n("lfBE"),a=n("pBmS"),c=n("xI8H"),u=n("p/bR"),s=n("Lcie"),l=n("JXkd"),f=n("umMR"),p=n("UlVq"),h=n("P6IN"),d=n("Ula3");e.exports=function(e,t,n,v,y,g){var k=r[e],m=k,_=y?"set":"add",b=m&&m.prototype,w={},T=function(e){var t=b[e];i(b,e,"delete"==e?function(e){return!(g&&!l(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(g&&!l(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return g&&!l(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof m&&(g||b.forEach&&!f(function(){(new m).entries().next()}))){var E=new m,O=E[_](g?{}:-0,1)!=E,x=f(function(){E.has(1)}),S=p(function(e){new m(e)}),D=!g&&f(function(){for(var e=new m,t=5;t--;)e[_](t,t);return!e.has(-0)});S||((m=t(function(t,n){s(t,m,e);var r=d(new k,t,m);return void 0!=n&&u(n,y,r[_],r),r})).prototype=b,b.constructor=m),(x||D)&&(T("delete"),T("has"),y&&T("get")),(D||O)&&T(_),g&&b.clear&&delete b.clear}else m=v.getConstructor(t,e,y,_),a(m.prototype,n),c.NEED=!0;return h(m,e),w[e]=m,o(o.G+o.W+o.F*(m!=k),w),g||v.setStrong(m,e,y),m}},"dXJ/":function(e,t,n){var r=n("VceJ"),o=n("3r0D")("toStringTag"),i="Arguments"==r(function(){return arguments}());e.exports=function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),o))?n:i?r(t):"Object"==(a=r(t))&&"function"==typeof t.callee?"Arguments":a}},eFQL:function(e,t,n){(function(e){!function(){"use strict";function t(e,t){for(var n=e.length-1;n>=0;n--)typeof e[n]===k&&(e[n]=Zone.current.wrap(e[n],t+"_"+n));return e}function n(e){return!e||!1!==e.writable&&(typeof e.get!==k||typeof e.set!==m)}function r(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(!r&&n&&Object.getOwnPropertyDescriptor(n,t)&&(r={enumerable:!0,configurable:!0}),r&&r.configurable){delete r.writable,delete r.value;var o=r.get,i=t.substr(2),a=O[i];a||(a=O[i]=y("ON_PROPERTY"+i)),r.set=function(t){var n=this;n||e!==g||(n=g),n&&(n[a]&&n.removeEventListener(i,x),"function"==typeof t?(n[a]=t,n.addEventListener(i,x,!1)):n[a]=null)},r.get=function(){var n=this;if(n||e!==g||(n=g),!n)return null;var i=n[a];if(i)return i;if(o){var c=o&&o.apply(this);if(c)return r.set.apply(this,[c]),typeof n[_]===k&&n.removeAttribute(t),c}return null},Object.defineProperty(e,t,r)}}function o(e,t,n){if(t)for(var o=0;o<t.length;o++)r(e,"on"+t[o],n);else{var i=[];for(var a in e)"on"==a.substr(0,2)&&i.push(a);for(var c=0;c<i.length;c++)r(e,i[c],n)}}function i(e){var n=g[e];if(n){g[y(e)]=n,g[e]=function(){var r=t(arguments,e);switch(r.length){case 0:this[S]=new n;break;case 1:this[S]=new n(r[0]);break;case 2:this[S]=new n(r[0],r[1]);break;case 3:this[S]=new n(r[0],r[1],r[2]);break;case 4:this[S]=new n(r[0],r[1],r[2],r[3]);break;default:throw new Error("Arg list too long.")}},c(g[e],n);var r,o=new n(function(){});for(r in o)"XMLHttpRequest"===e&&"responseBlob"===r||function(t){"function"==typeof o[t]?g[e].prototype[t]=function(){return this[S][t].apply(this[S],arguments)}:Object.defineProperty(g[e].prototype,t,{set:function(n){"function"==typeof n?(this[S][t]=Zone.current.wrap(n,e+"."+t),c(this[S][t],n)):this[S][t]=n},get:function(){return this[S][t]}})}(r);for(r in n)"prototype"!==r&&n.hasOwnProperty(r)&&(g[e][r]=n[r])}}function a(e,t,r){for(var o=e;o&&!o.hasOwnProperty(t);)o=Object.getPrototypeOf(o);!o&&e[t]&&(o=e);var i,a=y(t);if(o&&!(i=o[a])&&(i=o[a]=o[t],n(o&&Object.getOwnPropertyDescriptor(o,t)))){var u=r(i,a,t);o[t]=function(){return u(this,arguments)},c(o[t],i)}return i}function c(e,t){e[y("OriginalDelegate")]=t}function u(e,t,n){function r(t,n){if(!t)return!1;var r=!0;n&&void 0!==n.useGlobalCallback&&(r=n.useGlobalCallback);var d=n&&n.validateHandler,k=!0;n&&void 0!==n.checkDuplicate&&(k=n.checkDuplicate);var m=!1;n&&void 0!==n.returnTarget&&(m=n.returnTarget);for(var _=t;_&&!_.hasOwnProperty(o);)_=Object.getPrototypeOf(_);if(!_&&t[o]&&(_=t),!_)return!1;if(_[l])return!1;var b,w={},T=_[l]=_[o],E=_[y(i)]=_[i],O=_[y(a)]=_[a],x=_[y(u)]=_[u];n&&n.prependEventListenerFnName&&(b=_[y(n.prependEventListenerFnName)]=_[n.prependEventListenerFnName]);var S=r?function(e){if(!e.isRemoved){var t=C[e.eventName],n=void 0;t&&(n=t[e.capture?Z:z]);var r=n&&e.target[n];if(r)for(var o=0;o<r.length;o++)if(r[o]===e){r.splice(o,1),e.isRemoved=!0,0===r.length&&(e.allRemoved=!0,e.target[n]=null);break}}if(e.allRemoved)return E.apply(e.target,[e.eventName,e.capture?g:v,e.options])}:function(e){return E.apply(e.target,[e.eventName,e.invoke,e.options])},D=n&&n.compareTaskCallbackVsDelegate?n.compareTaskCallbackVsDelegate:function(e,t){var n=typeof t;return n===H&&e.callback===t||n===F&&e.originalDelegate===t},P=function(t,n,o,i,a,c){return void 0===a&&(a=!1),void 0===c&&(c=!1),function(){var u=this||e,s=(Zone,arguments[1]);if(!s)return t.apply(this,arguments);var l=!1;if(typeof s!==H){if(!s.handleEvent)return t.apply(this,arguments);l=!0}if(!d||d(t,s,u,arguments)){var f,p=arguments[0],h=arguments[2],v=!1;void 0===h?f=!1:!0===h?f=!0:!1===h?f=!1:(f=!!h&&!!h.capture,v=!!h&&!!h.once);var y,g=Zone.current,m=C[p];if(m)y=m[f?Z:z];else{var _=B+(p+z),b=B+(p+Z);C[p]={},C[p][z]=_,C[p][Z]=b,y=f?b:_}var T=u[y],E=!1;if(T){if(E=!0,k)for(var O=0;O<T.length;O++)if(D(T[O],s))return}else T=u[y]=[];var x,S=u.constructor[L],P=R[S];P&&(x=P[p]),x||(x=S+n+p),w.options=h,v&&(w.options.once=!1),w.target=u,w.capture=f,w.eventName=p,w.isExisting=E;var j=g.scheduleEventTask(x,s,r?I:null,o,i);return v&&(h.once=!0),j.options=h,j.target=u,j.capture=f,j.eventName=p,l&&(j.originalDelegate=s),c?T.unshift(j):T.push(j),a?u:void 0}}};return _[o]=P(T,f,r?function(e){if(!w.isExisting)return T.apply(w.target,[w.eventName,w.capture?g:v,w.options])}:function(e){return T.apply(w.target,[w.eventName,e.invoke,w.options])},S,m),b&&(_[p]=P(b,h,function(e){return b.apply(w.target,[w.eventName,e.invoke,w.options])},S,m,!0)),_[i]=function(){var t,n=this||e,r=arguments[0],o=arguments[2];t=void 0!==o&&(!0===o||!1!==o&&!!o&&!!o.capture);var i=arguments[1];if(!i)return E.apply(this,arguments);if(!d||d(E,i,n,arguments)){var a,c=C[r];c&&(a=c[t?Z:z]);var u=a&&n[a];if(u)for(var s=0;s<u.length;s++){var l=u[s];if(D(l,i))return u.splice(s,1),l.isRemoved=!0,0===u.length&&(l.allRemoved=!0,n[a]=null),void l.zone.cancelTask(l)}}},_[a]=function(){for(var t=[],n=s(this||e,arguments[0]),r=0;r<n.length;r++){var o=n[r];t.push(o.originalDelegate?o.originalDelegate:o.callback)}return t},_[u]=function(){var t=this||e,n=arguments[0];if(n){var r=C[n];if(r){var o=t[r[z]],a=t[r[Z]];if(o){var c=M(o);for(f=0;f<c.length;f++)this[i].apply(this,[n,(s=c[f]).originalDelegate?s.originalDelegate:s.callback,s.options])}if(a)for(c=M(a),f=0;f<c.length;f++){var s;this[i].apply(this,[n,(s=c[f]).originalDelegate?s.originalDelegate:s.callback,s.options])}}}else{for(var l=Object.keys(t),f=0;f<l.length;f++){var p=q.exec(l[f]),h=p&&p[1];h&&"removeListener"!==h&&this[u].apply(this,[h])}this[u].apply(this,["removeListener"])}},c(_[o],T),c(_[i],E),x&&c(_[u],x),O&&c(_[a],O),!0}for(var o=n&&n.addEventListenerFnName||"addEventListener",i=n&&n.removeEventListenerFnName||"removeEventListener",a=n&&n.listenersFnName||"eventListeners",u=n&&n.removeAllFnName||"removeAllListeners",l=y(o),f="."+o+":",p="prependListener",h="."+p+":",d=function(e,t,n){if(!e.isRemoved){var r=e.callback;typeof r===F&&r.handleEvent&&(e.callback=function(e){return r.handleEvent(e)},e.originalDelegate=r),e.invoke(e,t,[n]);var o=e.options;o&&"object"==typeof o&&o.once&&t[i].apply(t,[n.type,e.originalDelegate?e.originalDelegate:e.callback,o])}},v=function(t){if(t=t||e.event){var n=this||t.target||e,r=n[C[t.type][z]];if(r)if(1===r.length)d(r[0],n,t);else for(var o=r.slice(),i=0;i<o.length&&(!t||!0!==t[N]);i++)d(o[i],n,t)}},g=function(t){if(t=t||e.event){var n=this||t.target||e,r=n[C[t.type][Z]];if(r)if(1===r.length)d(r[0],n,t);else for(var o=r.slice(),i=0;i<o.length&&(!t||!0!==t[N]);i++)d(o[i],n,t)}},k=[],m=0;m<t.length;m++)k[m]=r(t[m],n);return k}function s(e,t){var n=[];for(var r in e){var o=q.exec(r),i=o&&o[1];if(i&&(!t||i===t)){var a=e[r];if(a)for(var c=0;c<a.length;c++)n.push(a[c])}}return n}function l(e,t,n,r){function o(t){var n=t.data;return n.args[0]=function(){try{t.invoke.apply(this,arguments)}finally{typeof n.handleId===l?delete s[n.handleId]:n.handleId&&(n.handleId[W]=null)}},n.handleId=c.apply(e,n.args),t}function i(e){return u(e.data.handleId)}var c=null,u=null;n+=r;var s={},l="number";c=a(e,t+=r,function(n){return function(a,c){if("function"==typeof c[0]){var u=Zone.current.scheduleMacroTask(t,c[0],{handleId:null,isPeriodic:"Interval"===r,delay:"Timeout"===r||"Interval"===r?c[1]||0:null,args:c},o,i);if(!u)return u;var f=u.data.handleId;return typeof f===l?s[f]=u:f&&(f[W]=u),f&&f.ref&&f.unref&&"function"==typeof f.ref&&"function"==typeof f.unref&&(u.ref=f.ref.bind(f),u.unref=f.unref.bind(f)),typeof f===l||f?f:u}return n.apply(e,c)}}),u=a(e,n,function(t){return function(n,r){var o,i=r[0];typeof i===l?o=s[i]:(o=i&&i[W])||(o=i),o&&"string"==typeof o.type?"notScheduled"!==o.state&&(o.cancelFn&&o.data.isPeriodic||0===o.runCount)&&(typeof i===l?delete s[i]:i&&(i[W]=null),o.zone.cancelTask(o)):t.apply(e,r)}})}function f(e,t){return e&&e[U]&&e[U][t]}function p(e,t,n){return n.configurable=!0,n.configurable||(e[U]||X(e,U,{writable:!0,value:{}}),e[U][t]=!0),n}function h(e,t,n,r){try{return X(e,t,n)}catch(i){if(!n.configurable)throw i;typeof r==J?delete n.configurable:n.configurable=r;try{return X(e,t,n)}catch(r){var o=null;try{o=JSON.stringify(n)}catch(e){o=o.toString()}console.log("Attempting to configure '"+t+"' with descriptor '"+o+"' on object '"+e+"' and got error, giving up: "+r)}}}function d(e,t,n,r){o(e,function(e,t,n){if(!n)return t;var r=n.filter(function(t){return t.target===e});if(!r||0===r.length)return t;var o=r[0].ignoreProperties;return t.filter(function(e){return-1===o.indexOf(e)})}(e,t,n),r)}!function(e){function t(e){c&&c.mark&&c.mark(e)}function n(e,t){c&&c.measure&&c.measure(e,t)}function r(t){0===Z&&0===y.length&&(s||e[d]&&(s=e[d].resolve(0)),s?s[v](o):e[h](o,0)),t&&y.push(t)}function o(){if(!g){for(g=!0;y.length;){var e=y;y=[];for(var t=0;t<e.length;t++){var n=e[t];try{n.zone.runTask(n,null,null)}catch(e){P.onUnhandledError(e)}}}a("ignoreConsoleErrorUncaughtError"),P.microtaskDrainDone(),g=!1}}function i(){}function a(e){return"__zone_symbol__"+e}var c=e.performance;if(t("Zone"),e.Zone)throw new Error("Zone already loaded.");var u=function(){function r(e,t){this._properties=null,this._parent=e,this._name=t?t.name||"unnamed":"<root>",this._properties=t&&t.properties||{},this._zoneDelegate=new f(this,this._parent&&this._parent._zoneDelegate,t)}return r.assertZonePatched=function(){if(e.Promise!==D.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(r,"root",{get:function(){for(var e=r.current;e.parent;)e=e.parent;return e},enumerable:!0,configurable:!0}),Object.defineProperty(r,"current",{get:function(){return j.zone},enumerable:!0,configurable:!0}),Object.defineProperty(r,"currentTask",{get:function(){return M},enumerable:!0,configurable:!0}),r.__load_patch=function(o,i){if(D.hasOwnProperty(o))throw Error("Already loaded patch: "+o);if(!e["__Zone_disable_"+o]){var a="Zone:"+o;t(a),D[o]=i(e,r,P),n(a,a)}},Object.defineProperty(r.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"name",{get:function(){return this._name},enumerable:!0,configurable:!0}),r.prototype.get=function(e){var t=this.getZoneWith(e);if(t)return t._properties[e]},r.prototype.getZoneWith=function(e){for(var t=this;t;){if(t._properties.hasOwnProperty(e))return t;t=t._parent}return null},r.prototype.fork=function(e){if(!e)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,e)},r.prototype.wrap=function(e,t){if("function"!=typeof e)throw new Error("Expecting function got: "+e);var n=this._zoneDelegate.intercept(this,e,t),r=this;return function(){return r.runGuarded(n,this,arguments,t)}},r.prototype.run=function(e,t,n,r){void 0===t&&(t=void 0),void 0===n&&(n=null),void 0===r&&(r=null),j={parent:j,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,r)}finally{j=j.parent}},r.prototype.runGuarded=function(e,t,n,r){void 0===t&&(t=null),void 0===n&&(n=null),void 0===r&&(r=null),j={parent:j,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,r)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{j=j.parent}},r.prototype.runTask=function(e,t,n){if(e.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(e.zone||k).name+"; Execution: "+this.name+")");if(e.state!==m||e.type!==S){var r=e.state!=w;r&&e._transitionTo(w,b),e.runCount++;var o=M;M=e,j={parent:j,zone:this};try{e.type==x&&e.data&&!e.data.isPeriodic&&(e.cancelFn=null);try{return this._zoneDelegate.invokeTask(this,e,t,n)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{e.state!==m&&e.state!==E&&(e.type==S||e.data&&e.data.isPeriodic?r&&e._transitionTo(b,w):(e.runCount=0,this._updateTaskCount(e,-1),r&&e._transitionTo(m,w,m))),j=j.parent,M=o}}},r.prototype.scheduleTask=function(e){if(e.zone&&e.zone!==this)for(var t=this;t;){if(t===e.zone)throw Error("can not reschedule task to "+this.name+" which is descendants of the original zone "+e.zone.name);t=t.parent}e._transitionTo(_,m);var n=[];e._zoneDelegates=n,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(t){throw e._transitionTo(E,_,m),this._zoneDelegate.handleError(this,t),t}return e._zoneDelegates===n&&this._updateTaskCount(e,1),e.state==_&&e._transitionTo(b,_),e},r.prototype.scheduleMicroTask=function(e,t,n,r){return this.scheduleTask(new p(O,e,t,n,r,null))},r.prototype.scheduleMacroTask=function(e,t,n,r,o){return this.scheduleTask(new p(x,e,t,n,r,o))},r.prototype.scheduleEventTask=function(e,t,n,r,o){return this.scheduleTask(new p(S,e,t,n,r,o))},r.prototype.cancelTask=function(e){if(e.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(e.zone||k).name+"; Execution: "+this.name+")");e._transitionTo(T,b,w);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(E,T),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(m,T),e.runCount=0,e},r.prototype._updateTaskCount=function(e,t){var n=e._zoneDelegates;-1==t&&(e._zoneDelegates=null);for(var r=0;r<n.length;r++)n[r]._updateTaskCount(e.type,t)},r}();u.__symbol__=a;var s,l={name:"",onHasTask:function(e,t,n,r){return e.hasTask(n,r)},onScheduleTask:function(e,t,n,r){return e.scheduleTask(n,r)},onInvokeTask:function(e,t,n,r,o,i){return e.invokeTask(n,r,o,i)},onCancelTask:function(e,t,n,r){return e.cancelTask(n,r)}},f=function(){function e(e,t,n){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=e,this._parentDelegate=t,this._forkZS=n&&(n&&n.onFork?n:t._forkZS),this._forkDlgt=n&&(n.onFork?t:t._forkDlgt),this._forkCurrZone=n&&(n.onFork?this.zone:t.zone),this._interceptZS=n&&(n.onIntercept?n:t._interceptZS),this._interceptDlgt=n&&(n.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this.zone:t.zone),this._invokeZS=n&&(n.onInvoke?n:t._invokeZS),this._invokeDlgt=n&&(n.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this.zone:t.zone),this._handleErrorZS=n&&(n.onHandleError?n:t._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this.zone:t.zone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:t._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this.zone:t.zone),this._invokeTaskZS=n&&(n.onInvokeTask?n:t._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this.zone:t.zone),this._cancelTaskZS=n&&(n.onCancelTask?n:t._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this.zone:t.zone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;var r=n&&n.onHasTask;(r||t&&t._hasTaskZS)&&(this._hasTaskZS=r?n:l,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=e,n.onScheduleTask||(this._scheduleTaskZS=l,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),n.onInvokeTask||(this._invokeTaskZS=l,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),n.onCancelTask||(this._cancelTaskZS=l,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}return e.prototype.fork=function(e,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,e,t):new u(e,t)},e.prototype.intercept=function(e,t,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,e,t,n):t},e.prototype.invoke=function(e,t,n,r,o){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,e,t,n,r,o):t.apply(n,r)},e.prototype.handleError=function(e,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,e,t)},e.prototype.scheduleTask=function(e,t){var n=t;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),(n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,e,t))||(n=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=O)throw new Error("Task is missing scheduleFn.");r(t)}return n},e.prototype.invokeTask=function(e,t,n,r){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,e,t,n,r):t.callback.apply(n,r)},e.prototype.cancelTask=function(e,t){var n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,e,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");n=t.cancelFn(t)}return n},e.prototype.hasTask=function(e,t){try{return this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,e,t)}catch(t){this.handleError(e,t)}},e.prototype._updateTaskCount=function(e,t){var n=this._taskCounts,r=n[e],o=n[e]=r+t;if(o<0)throw new Error("More tasks executed then were scheduled.");0!=r&&0!=o||this.hasTask(this.zone,{microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:e})},e}(),p=function(){function t(n,r,o,i,a,c){this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=n,this.source=r,this.data=i,this.scheduleFn=a,this.cancelFn=c,this.callback=o;var u=this;this.invoke=n===S&&i&&i.isUsingGlobalCallback?t.invokeTask:function(){return t.invokeTask.apply(e,[u,this,arguments])}}return t.invokeTask=function(e,t,n){e||(e=this),Z++;try{return e.runCount++,e.zone.runTask(e,t,n)}finally{1==Z&&o(),Z--}},Object.defineProperty(t.prototype,"zone",{get:function(){return this._zone},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"state",{get:function(){return this._state},enumerable:!0,configurable:!0}),t.prototype.cancelScheduleRequest=function(){this._transitionTo(m,_)},t.prototype._transitionTo=function(e,t,n){if(this._state!==t&&this._state!==n)throw new Error(this.type+" '"+this.source+"': can not transition to '"+e+"', expecting state '"+t+"'"+(n?" or '"+n+"'":"")+", was '"+this._state+"'.");this._state=e,e==m&&(this._zoneDelegates=null)},t.prototype.toString=function(){return this.data&&void 0!==this.data.handleId?this.data.handleId:Object.prototype.toString.call(this)},t.prototype.toJSON=function(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,invoke:this.invoke,scheduleFn:this.scheduleFn,cancelFn:this.cancelFn,runCount:this.runCount,callback:this.callback}},t}(),h=a("setTimeout"),d=a("Promise"),v=a("then"),y=[],g=!1,k={name:"NO ZONE"},m="notScheduled",_="scheduling",b="scheduled",w="running",T="canceling",E="unknown",O="microTask",x="macroTask",S="eventTask",D={},P={symbol:a,currentZoneFrame:function(){return j},onUnhandledError:i,microtaskDrainDone:i,scheduleMicroTask:r,showUncaughtError:function(){return!u[a("ignoreConsoleErrorUncaughtError")]},patchEventTarget:function(){return[]},patchOnProperties:i,patchMethod:function(){return i},setNativePromise:function(e){s=e.resolve(0)}},j={parent:null,zone:new u(null,null)},M=null,Z=0;n("Zone","Zone"),e.Zone=u}("undefined"!=typeof window&&window||"undefined"!=typeof self&&self||e);var v=function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}};Zone.__load_patch("ZoneAwarePromise",function(e,t,n){function r(e){return e&&e.then}function o(e){return e}function i(e){return j.reject(e)}function a(e,t){return function(n){try{c(e,t,n)}catch(t){c(e,!1,t)}}}function c(e,r,o){var i=E();if(e===o)throw new TypeError(O);if(e[g]===_){var l=null;try{typeof o!==x&&typeof o!==S||(l=o&&o.then)}catch(t){return i(function(){c(e,!1,t)})(),e}if(r!==w&&o instanceof j&&o.hasOwnProperty(g)&&o.hasOwnProperty(k)&&o[g]!==_)u(o),c(e,o[g],o[k]);else if(r!==w&&typeof l===S)try{l.apply(o,[i(a(e,r)),i(a(e,!1))])}catch(t){i(function(){c(e,!1,t)})()}else{e[g]=r;var f=e[k];e[k]=o,r===w&&o instanceof Error&&(o[D]=t.currentTask);for(var h=0;h<f.length;)s(e,f[h++],f[h++],f[h++],f[h++]);if(0==f.length&&r==w){e[g]=T;try{throw new Error("Uncaught (in promise): "+o+(o&&o.stack?"\n"+o.stack:""))}catch(r){var d=r;d.rejection=o,d.promise=e,d.zone=t.current,d.task=t.currentTask,p.push(d),n.scheduleMicroTask()}}}}return e}function u(e){if(e[g]===T){try{var n=t[P];n&&typeof n===S&&n.apply(this,[{rejection:e[k],promise:e}])}catch(e){}e[g]=w;for(var r=0;r<p.length;r++)e===p[r].promise&&p.splice(r,1)}}function s(e,t,n,r,a){u(e);var s=e[g]?typeof r===S?r:o:typeof a===S?a:i;t.scheduleMicroTask(m,function(){try{c(n,!0,t.run(s,void 0,[e[k]]))}catch(e){c(n,!1,e)}})}function l(e){var t=e.prototype,n=t.then;t[d]=n;var r=Object.getOwnPropertyDescriptor(e.prototype,"then");r&&!1===r.writable&&r.configurable&&Object.defineProperty(e.prototype,"then",{writable:!0}),e.prototype.then=function(e,t){var r=this;return new j(function(e,t){n.call(r,e,t)}).then(e,t)},e[I]=!0}var f=n.symbol,p=[],h=f("Promise"),d=f("then");n.onUnhandledError=function(e){if(n.showUncaughtError()){var t=e&&e.rejection;t?console.error("Unhandled Promise rejection:",t instanceof Error?t.message:t,"; Zone:",e.zone.name,"; Task:",e.task&&e.task.source,"; Value:",t,t instanceof Error?t.stack:void 0):console.error(e)}},n.microtaskDrainDone=function(){for(;p.length;)for(var e=function(){var e=p.shift();try{e.zone.runGuarded(function(){throw e})}catch(e){!function(e){n.onUnhandledError(e);try{var r=t[y];r&&"function"==typeof r&&r.apply(this,[e])}catch(e){}}(e)}};p.length;)e()};var y=f("unhandledPromiseRejectionHandler"),g=f("state"),k=f("value"),m="Promise.then",_=null,b=!0,w=!1,T=0,E=function(){var e=!1;return function(t){return function(){e||(e=!0,t.apply(null,arguments))}}},O="Promise resolved with itself",x="object",S="function",D=f("currentTask"),P=f("rejectionHandledHandler"),j=function(){function e(t){if(!(this instanceof e))throw new Error("Must be an instanceof Promise.");this[g]=_,this[k]=[];try{t&&t(a(this,b),a(this,w))}catch(e){c(this,!1,e)}}return e.toString=function(){return"function ZoneAwarePromise() { [native code] }"},e.resolve=function(e){return c(new this(null),b,e)},e.reject=function(e){return c(new this(null),w,e)},e.race=function(e){function t(e){a&&(a=o(e))}function n(e){a&&(a=i(e))}var o,i,a=new this(function(e,t){n=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}([e,t],2),o=n[0],i=n[1];var n});try{for(var c=v(e),u=c.next();!u.done;u=c.next()){var s=u.value;r(s)||(s=this.resolve(s)),s.then(t,n)}}catch(e){l={error:e}}finally{try{u&&!u.done&&(f=c.return)&&f.call(c)}finally{if(l)throw l.error}}return a;var l,f},e.all=function(e){var t,n,o=new this(function(e,r){t=e,n=r}),i=0,a=[];try{for(var c=v(e),u=c.next();!u.done;u=c.next()){var s=u.value;r(s)||(s=this.resolve(s)),s.then(function(e){return function(n){a[e]=n,--i||t(a)}}(i),n),i++}}catch(e){l={error:e}}finally{try{u&&!u.done&&(f=c.return)&&f.call(c)}finally{if(l)throw l.error}}return i||t(a),o;var l,f},e.prototype.then=function(e,n){var r=new this.constructor(null),o=t.current;return this[g]==_?this[k].push(o,r,e,n):s(this,o,r,e,n),r},e.prototype.catch=function(e){return this.then(null,e)},e}();j.resolve=j.resolve,j.reject=j.reject,j.race=j.race,j.all=j.all;var M=e[h]=e.Promise,Z=t.__symbol__("ZoneAwarePromise"),z=Object.getOwnPropertyDescriptor(e,"Promise");z&&!z.configurable||(z&&delete z.writable,z&&delete z.value,z||(z={configurable:!0,enumerable:!0}),z.get=function(){return e[Z]?e[Z]:e[h]},z.set=function(t){t===j?e[Z]=t:(e[h]=t,t.prototype[d]||l(t),n.setNativePromise(t))},Object.defineProperty(e,"Promise",z)),e.Promise=j;var I=f("thenPatched");if(M){l(M);var C=e.fetch;typeof C==S&&(e.fetch=function(e){return function(){var t=e.apply(this,arguments);if(t instanceof j)return t;var n=t.constructor;return n[I]||l(n),t}}(C))}return Promise[t.__symbol__("uncaughtPromiseErrors")]=p,j});var y=Zone.__symbol__,g="object"==typeof window&&window||"object"==typeof self&&self||e,k="function",m="undefined",_="removeAttribute",b="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,w=!("nw"in g)&&void 0!==g.process&&"[object process]"==={}.toString.call(g.process),T=!w&&!b&&!("undefined"==typeof window||!window.HTMLElement),E=void 0!==g.process&&"[object process]"==={}.toString.call(g.process)&&!b&&!("undefined"==typeof window||!window.HTMLElement),O={},x=function(e){if(e=e||g.event){var t=O[e.type];t||(t=O[e.type]=y("ON_PROPERTY"+e.type));var n=(this||e.target||g)[t],r=n&&n.apply(this,arguments);return void 0==r||r||e.preventDefault(),r}},S=y("originalInstance"),D=!1,P=!1;Zone.__load_patch("toString",function(e,t,n){var r=t.__zone_symbol__originalToString=Function.prototype.toString,o=y("OriginalDelegate"),i=y("Promise"),a=y("Error");Function.prototype.toString=function(){if("function"==typeof this){var t=this[o];if(t)return"function"==typeof t?r.apply(this[o],arguments):Object.prototype.toString.call(t);if(this===Promise){var n=e[i];if(n)return r.apply(n,arguments)}if(this===Error){var c=e[a];if(c)return r.apply(c,arguments)}}return r.apply(this,arguments)};var c=Object.prototype.toString;Object.prototype.toString=function(){return this instanceof Promise?"[object Promise]":c.apply(this,arguments)}});var j=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},M=function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(j(arguments[t]));return e},Z="true",z="false",I={isUsingGlobalCallback:!0},C={},R={},L="name",H="function",F="object",B="__zone_symbol__",q=/^__zone_symbol__(\w+)(true|false)$/,N="__zone_symbol__propagationStopped",W=y("zoneTask"),X=Object[y("defineProperty")]=Object.defineProperty,A=Object[y("getOwnPropertyDescriptor")]=Object.getOwnPropertyDescriptor,G=Object.create,U=y("unconfigurables"),J="undefined",V=["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximity","vrdisplyconnected","vrdisplaydisconnected","vrdisplaypresentchange"],Q=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],K=["load"],Y=["blur","error","focus","load","resize","scroll","messageerror"],$=["bounce","finish","start"],ee=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],te=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],ne=["close","error","open","message"],re=["error","message"],oe=["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"].concat(["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],["autocomplete","autocompleteerror"],["toggle"],["afterscriptexecute","beforescriptexecute","DOMContentLoaded","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange"],V,["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslostpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"]),ie=y("unbound");Zone.__load_patch("util",function(e,t,n){n.patchOnProperties=o,n.patchMethod=a}),Zone.__load_patch("timers",function(e,t,n){l(e,"set","clear","Timeout"),l(e,"set","clear","Interval"),l(e,"set","clear","Immediate")}),Zone.__load_patch("requestAnimationFrame",function(e,t,n){l(e,"request","cancel","AnimationFrame"),l(e,"mozRequest","mozCancel","AnimationFrame"),l(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",function(e,t,n){for(var r=["alert","prompt","confirm"],o=0;o<r.length;o++)a(e,r[o],function(n,r,o){return function(r,i){return t.current.run(n,e,i,o)}})}),Zone.__load_patch("EventTarget",function(e,t,n){(function(e,t){!function(n,r){var o=e.Event;o&&o.prototype&&t.patchMethod(o.prototype,"stopImmediatePropagation",function(e){return function(e,t){e[N]=!0}})}()})(e,n),function(e,t){var n="Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video",r="ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket".split(","),o=[],i=e.wtf,a=n.split(",");i?o=a.map(function(e){return"HTML"+e+"Element"}).concat(r):e.EventTarget?o.push("EventTarget"):o=r;for(var c=e.__Zone_disable_IE_check||!1,s=e.__Zone_enable_cross_context_check||!1,l=function(){if(D)return P;D=!0;try{var e=window.navigator.userAgent;return e.indexOf("MSIE "),-1===e.indexOf("MSIE ")&&-1===e.indexOf("Trident/")&&-1===e.indexOf("Edge/")||(P=!0),P}catch(e){}}(),f="[object FunctionWrapper]",p="function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }",h=0;h<oe.length;h++){var d=B+((m=oe[h])+z),v=B+(m+Z);C[m]={},C[m][z]=d,C[m][Z]=v}for(h=0;h<n.length;h++)for(var y=a[h],g=R[y]={},k=0;k<oe.length;k++){var m;g[m=oe[k]]=y+".addEventListener:"+m}var _=[];for(h=0;h<o.length;h++){var b=e[o[h]];_.push(b&&b.prototype)}u(e,_,{validateHandler:function(e,t,n,r){if(!c&&l)if(s)try{if((o=t.toString())===f||o==p)return e.apply(n,r),!1}catch(t){return e.apply(n,r),!1}else{var o;if((o=t.toString())===f||o==p)return e.apply(n,r),!1}else if(s)try{t.toString()}catch(t){return e.apply(n,r),!1}return!0}}),t.patchEventTarget=u}(e,n);var r=e.XMLHttpRequestEventTarget;r&&r.prototype&&n.patchEventTarget(e,[r.prototype]),i("MutationObserver"),i("WebKitMutationObserver"),i("IntersectionObserver"),i("FileReader")}),Zone.__load_patch("on_property",function(e,t,n){(function(e,t){if(!w||E){var n="undefined"!=typeof WebSocket;if(function(){if((T||E)&&!Object.getOwnPropertyDescriptor(HTMLElement.prototype,"onclick")&&"undefined"!=typeof Element){var e=Object.getOwnPropertyDescriptor(Element.prototype,"onclick");if(e&&!e.configurable)return!1}var t=Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype,"onreadystatechange");if(t){Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return!0}});var n=!!(o=new XMLHttpRequest).onreadystatechange;return Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",t||{}),n}var r=y("fakeonreadystatechange");Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return this[r]},set:function(e){this[r]=e}});var o,i=function(){};(o=new XMLHttpRequest).onreadystatechange=i;n=o[r]===i;return o.onreadystatechange=null,n}()){var r=t.__Zone_ignore_on_properties;if(T){d(window,oe.concat(["messageerror"]),r,Object.getPrototypeOf(window)),d(Document.prototype,oe,r),void 0!==window.SVGElement&&d(window.SVGElement.prototype,oe,r),d(Element.prototype,oe,r),d(HTMLElement.prototype,oe,r),d(HTMLMediaElement.prototype,Q,r),d(HTMLFrameSetElement.prototype,V.concat(Y),r),d(HTMLBodyElement.prototype,V.concat(Y),r),d(HTMLFrameElement.prototype,K,r),d(HTMLIFrameElement.prototype,K,r);var a=window.HTMLMarqueeElement;a&&d(a.prototype,$,r);var c=window.Worker;c&&d(c.prototype,re,r)}d(XMLHttpRequest.prototype,ee,r);var s=t.XMLHttpRequestEventTarget;s&&d(s&&s.prototype,ee,r),"undefined"!=typeof IDBIndex&&(d(IDBIndex.prototype,te,r),d(IDBRequest.prototype,te,r),d(IDBOpenDBRequest.prototype,te,r),d(IDBDatabase.prototype,te,r),d(IDBTransaction.prototype,te,r),d(IDBCursor.prototype,te,r)),n&&d(WebSocket.prototype,ne,r)}else!function(){for(var e=function(e){var t=oe[e],n="on"+t;self.addEventListener(t,function(e){var t,r,o=e.target;for(r=o?o.constructor.name+"."+n:"unknown."+n;o;)o[n]&&!o[n][ie]&&((t=Zone.current.wrap(o[n],r))[ie]=o[n],o[n]=t),o=o.parentElement},!0)},t=0;t<oe.length;t++)e(t)}(),i("XMLHttpRequest"),n&&function(e,t){var n=t.WebSocket;t.EventTarget||u(t,[n.prototype]),t.WebSocket=function(e,t){var r,i,a=arguments.length>1?new n(e,t):new n(e),c=Object.getOwnPropertyDescriptor(a,"onmessage");return c&&!1===c.configurable?(r=Object.create(a),i=a,["addEventListener","removeEventListener","send","close"].forEach(function(e){r[e]=function(){var t=Array.prototype.slice.call(arguments);if("addEventListener"===e||"removeEventListener"===e){var n=t.length>0?t[0]:void 0;if(n){var o=Zone.__symbol__("ON_PROPERTY"+n);a[o]=r[o]}}return a[e].apply(a,t)}})):r=a,o(r,["close","error","message","open"],i),r};var r=t.WebSocket;for(var i in n)r[i]=n[i]}(0,t)}})(0,e),Object.defineProperty=function(e,t,n){if(f(e,t))throw new TypeError("Cannot assign to read only property '"+t+"' of "+e);var r=n.configurable;return"prototype"!==t&&(n=p(e,t,n)),h(e,t,n,r)},Object.defineProperties=function(e,t){return Object.keys(t).forEach(function(n){Object.defineProperty(e,n,t[n])}),e},Object.create=function(e,t){return"object"!=typeof t||Object.isFrozen(t)||Object.keys(t).forEach(function(n){t[n]=p(e,n,t[n])}),G(e,t)},Object.getOwnPropertyDescriptor=function(e,t){var n=A(e,t);return f(e,t)&&(n.configurable=!1),n},function(t){if((T||E)&&"registerElement"in e.document){var n=document.registerElement,r=["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"];document.registerElement=function(e,t){return t&&t.prototype&&r.forEach(function(e){var n="Document.registerElement::"+e;if(t.prototype.hasOwnProperty(e)){var r=Object.getOwnPropertyDescriptor(t.prototype,e);r&&r.value?(r.value=Zone.current.wrap(r.value,n),function(t,n,r){var o=r.configurable;h(t,e,r=p(t,e,r),o)}(t.prototype,0,r)):t.prototype[e]=Zone.current.wrap(t.prototype[e],n)}else t.prototype[e]&&(t.prototype[e]=Zone.current.wrap(t.prototype[e],n))}),n.apply(document,[e,t])},c(document.registerElement,n)}}()}),Zone.__load_patch("canvas",function(e,t,n){var r=e.HTMLCanvasElement;void 0!==r&&r.prototype&&r.prototype.toBlob&&function(e,t,n){function o(e){var t=e.data;return t.args[t.callbackIndex]=function(){e.invoke.apply(this,arguments)},i.apply(t.target,t.args),e}var i=null;i=a(r.prototype,"toBlob",function(e){return function(t,n){var r={name:"HTMLCanvasElement.toBlob",target:t,callbackIndex:0,args:n};return r.callbackIndex>=0&&"function"==typeof n[r.callbackIndex]?Zone.current.scheduleMacroTask(r.name,n[r.callbackIndex],r,o,null):e.apply(t,n)}})}()}),Zone.__load_patch("XHR",function(e,t,n){!function(e){function n(e){XMLHttpRequest[c]=!1;var t=e.data,n=t.target,o=n[i];h||(h=n[f],d=n[p]),o&&d.apply(n,[g,o]);var a=n[i]=function(){n.readyState===n.DONE&&!t.aborted&&XMLHttpRequest[c]&&e.state===k&&e.invoke()};return h.apply(n,[g,a]),n[r]||(n[r]=e),_.apply(n,t.args),XMLHttpRequest[c]=!0,e}function s(){}function l(e){var t=e.data;return t.aborted=!0,b.apply(t.target,t.args)}var f=y("addEventListener"),p=y("removeEventListener"),h=XMLHttpRequest.prototype[f],d=XMLHttpRequest.prototype[p];if(!h){var v=e.XMLHttpRequestEventTarget;v&&(h=v.prototype[f],d=v.prototype[p])}var g="readystatechange",k="scheduled",m=a(e.XMLHttpRequest.prototype,"open",function(){return function(e,t){return e[o]=0==t[2],e[u]=t[1],m.apply(e,t)}}),_=a(e.XMLHttpRequest.prototype,"send",function(){return function(e,r){var i=t.current;return e[o]?_.apply(e,r):i.scheduleMacroTask("XMLHttpRequest.send",s,{target:e,url:e[u],isPeriodic:!1,delay:null,args:r,aborted:!1},n,l)}}),b=a(e.XMLHttpRequest.prototype,"abort",function(e){return function(e,t){var n=e[r];if(n&&"string"==typeof n.type){if(null==n.cancelFn||n.data&&n.data.aborted)return;n.zone.cancelTask(n)}}})}(e);var r=y("xhrTask"),o=y("xhrSync"),i=y("xhrListener"),c=y("xhrScheduled"),u=y("xhrURL")}),Zone.__load_patch("geolocation",function(e,r,o){e.navigator&&e.navigator.geolocation&&function(e,r){for(var o=e.constructor.name,i=function(i){var a=r[i],u=e[a];if(u){if(!n(Object.getOwnPropertyDescriptor(e,a)))return"continue";e[a]=function(e){var n=function(){return e.apply(this,t(arguments,o+"."+a))};return c(n,e),n}(u)}},a=0;a<r.length;a++)i(a)}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",function(e,t,n){function r(t){return function(n){s(e,t).forEach(function(r){var o=e.PromiseRejectionEvent;if(o){var i=new o(t,{promise:n.promise,reason:n.rejection});r.invoke(i)}})}}e.PromiseRejectionEvent&&(t[y("unhandledPromiseRejectionHandler")]=r("unhandledrejection"),t[y("rejectionHandledHandler")]=r("rejectionhandled"))})}()}).call(t,n("fRUx"))},ewdp:function(e,t,n){var r=n("tose"),o=n("+pQw"),i=n("2Fuj");e.exports=n("V+0c")?Object.defineProperties:function(e,t){o(e);for(var n,a=i(t),c=a.length,u=0;c>u;)r.f(e,n=a[u++],t[n]);return e}},fC8q:function(e,t,n){var r=n("dXJ/"),o=n("3r0D")("iterator"),i=n("lexG");e.exports=n("b4gG").getIteratorMethod=function(e){if(void 0!=e)return e[o]||e["@@iterator"]||i[r(e)]}},fHxy:function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=r.key,a=r.set;r.exp({defineMetadata:function(e,t,n,r){a(e,t,o(n),i(r))}})},fRUx:function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},gBtn:function(e,t,n){var r=n("ZI9W"),o=n("CDXM"),i=n("Iclu")("metadata"),a=i.store||(i.store=new(n("QZhw"))),c=function(e,t,n){var o=a.get(e);if(!o){if(!n)return;a.set(e,o=new r)}var i=o.get(t);if(!i){if(!n)return;o.set(t,i=new r)}return i};e.exports={store:a,map:c,has:function(e,t,n){var r=c(t,n,!1);return void 0!==r&&r.has(e)},get:function(e,t,n){var r=c(t,n,!1);return void 0===r?void 0:r.get(e)},set:function(e,t,n,r){c(n,r,!0).set(e,t)},keys:function(e,t){var n=c(e,t,!1),r=[];return n&&n.forEach(function(e,t){r.push(t)}),r},key:function(e){return void 0===e||"symbol"==typeof e?e:String(e)},exp:function(e){o(o.S,"Reflect",e)}}},gNkH:function(e,t,n){e.exports=!n("V+0c")&&!n("umMR")(function(){return 7!=Object.defineProperty(n("BQSv")("div"),"a",{get:function(){return 7}}).a})},gxdV:function(e,t,n){var r=n("tose"),o=n("piOq");e.exports=n("V+0c")?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},lexG:function(e,t){e.exports={}},lfBE:function(e,t,n){var r=n("ptrv"),o=n("gxdV"),i=n("rMsi"),a=n("c09d")("src"),c=Function.toString,u=(""+c).split("toString");n("b4gG").inspectSource=function(e){return c.call(e)},(e.exports=function(e,t,n,c){var s="function"==typeof n;s&&(i(n,"name")||o(n,"name",t)),e[t]!==n&&(s&&(i(n,a)||o(n,a,e[t]?""+e[t]:u.join(String(t)))),e===r?e[t]=n:c?e[t]?e[t]=n:o(e,t,n):(delete e[t],o(e,t,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||c.call(this)})},lzDK:function(e,t){t.f=Object.getOwnPropertySymbols},ncNB:function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=r.get,a=r.key;r.exp({getOwnMetadata:function(e,t){return i(e,o(t),arguments.length<3?void 0:a(arguments[2]))}})},"p/bR":function(e,t,n){var r=n("pa70"),o=n("ULWX"),i=n("KpI+"),a=n("+pQw"),c=n("rppw"),u=n("fC8q"),s={},l={};(t=e.exports=function(e,t,n,f,p){var h,d,v,y,g=p?function(){return e}:u(e),k=r(n,f,t?2:1),m=0;if("function"!=typeof g)throw TypeError(e+" is not iterable!");if(i(g)){for(h=c(e.length);h>m;m++)if((y=t?k(a(d=e[m])[0],d[1]):k(e[m]))===s||y===l)return y}else for(v=g.call(e);!(d=v.next()).done;)if((y=o(v,k,d.value,t))===s||y===l)return y}).BREAK=s,t.RETURN=l},pBmS:function(e,t,n){var r=n("lfBE");e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},pa70:function(e,t,n){var r=n("uNkO");e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},piOq:function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},ptrv:function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},rIdM:function(e,t,n){"use strict";var r=n("2Fuj"),o=n("lzDK"),i=n("9e9+"),a=n("RT4T"),c=n("Wo2w"),u=Object.assign;e.exports=!u||n("umMR")(function(){var e={},t={},n=Symbol();return e[n]=7,"abcdefghijklmnopqrst".split("").forEach(function(e){t[e]=e}),7!=u({},e)[n]||"abcdefghijklmnopqrst"!=Object.keys(u({},t)).join("")})?function(e,t){for(var n=a(e),u=arguments.length,s=1,l=o.f,f=i.f;u>s;)for(var p,h=c(arguments[s++]),d=l?r(h).concat(l(h)):r(h),v=d.length,y=0;v>y;)f.call(h,p=d[y++])&&(n[p]=h[p]);return n}:u},rKhO:function(e,t,n){var r=n("VceJ");e.exports=Array.isArray||function(e){return"Array"==r(e)}},rMsi:function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},rppw:function(e,t,n){var r=n("9wYb"),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},soMw:function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=r.keys,a=r.key;r.exp({getOwnMetadataKeys:function(e){return i(o(e),arguments.length<2?void 0:a(arguments[1]))}})},t6ta:function(e,t,n){var r=n("gBtn"),o=n("+pQw"),i=n("uNkO"),a=r.key,c=r.set;r.exp({metadata:function(e,t){return function(n,r){c(e,t,(void 0!==r?o:i)(n),a(r))}}})},tose:function(e,t,n){var r=n("+pQw"),o=n("gNkH"),i=n("A1WY"),a=Object.defineProperty;t.f=n("V+0c")?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},uNkO:function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},umMR:function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},vyV2:function(e,t,n){var r=n("+GRi"),o=n("rppw"),i=n("KM3d");e.exports=function(e){return function(t,n,a){var c,u=r(t),s=o(u.length),l=i(a,s);if(e&&n!=n){for(;s>l;)if((c=u[l++])!=c)return!0}else for(;s>l;l++)if((e||l in u)&&u[l]===n)return e||l||0;return!e&&-1}}},"w/BM":function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},xI8H:function(e,t,n){var r=n("c09d")("meta"),o=n("JXkd"),i=n("rMsi"),a=n("tose").f,c=0,u=Object.isExtensible||function(){return!0},s=!n("umMR")(function(){return u(Object.preventExtensions({}))}),l=function(e){a(e,r,{value:{i:"O"+ ++c,w:{}}})},f=e.exports={KEY:r,NEED:!1,fastKey:function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,r)){if(!u(e))return"F";if(!t)return"E";l(e)}return e[r].i},getWeak:function(e,t){if(!i(e,r)){if(!u(e))return!0;if(!t)return!1;l(e)}return e[r].w},onFreeze:function(e){return s&&f.NEED&&u(e)&&!i(e,r)&&l(e),e}}},yIWP:function(e,t,n){var r=n("Iclu")("keys"),o=n("c09d");e.exports=function(e){return r[e]||(r[e]=o(e))}}},[1]);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/static/roboto-v15-latin-regular.16e1d930cf13fb7a9563.woff b/asterixdb/asterix-app/src/main/resources/dashboard/static/roboto-v15-latin-regular.16e1d930cf13fb7a9563.woff
new file mode 100644
index 0000000..941dfa4
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/static/roboto-v15-latin-regular.16e1d930cf13fb7a9563.woff
Binary files differ
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/static/roboto-v15-latin-regular.38861cba61c66739c145.ttf b/asterixdb/asterix-app/src/main/resources/dashboard/static/roboto-v15-latin-regular.38861cba61c66739c145.ttf
new file mode 100644
index 0000000..7b25f3c
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/static/roboto-v15-latin-regular.38861cba61c66739c145.ttf
Binary files differ
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/static/roboto-v15-latin-regular.3d3a53586bd78d1069ae.svg b/asterixdb/asterix-app/src/main/resources/dashboard/static/roboto-v15-latin-regular.3d3a53586bd78d1069ae.svg
new file mode 100644
index 0000000..ed55c10
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/static/roboto-v15-latin-regular.3d3a53586bd78d1069ae.svg
@@ -0,0 +1,308 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg">
+<defs >
+<font id="Roboto" horiz-adv-x="1157" ><font-face
+    font-family="Roboto"
+    units-per-em="2048"
+    panose-1="2 0 0 0 0 0 0 0 0 0"
+    ascent="1900"
+    descent="-500"
+    alphabetic="0" />
+<glyph unicode=" " horiz-adv-x="507" />
+<glyph unicode="!" horiz-adv-x="527" d="M347 411H180L167 1456H361L347 411ZM160 93Q160 138 187 168T269 199T351 169T379 93T351 19T269 -11T188 18T160 93Z" />
+<glyph unicode="&quot;" horiz-adv-x="655" d="M277 1400L247 1042H136L137 1536H277V1400ZM547 1400L517 1042H406L407 1536H547V1400Z" />
+<glyph unicode="#" horiz-adv-x="1261" d="M765 410H501L421 0H278L358 410H119V547H384L453 901H195V1040H480L562 1456H705L623 1040H887L969 1456H1113L1031 1040H1235V901H1004L935 547H1160V410H909L829 0H685L765 410ZM527 547H791L860 901H596L527 547Z" />
+<glyph unicode="$" horiz-adv-x="1150" d="M856 375Q856 467 792 530T574 644Q361 709 264 813T166 1079Q166 1243 261 1348T524 1473V1692H673V1472Q841 1449 934 1331T1028 1008H844Q844 1149 777 1232T596 1315Q477 1315 414 1254T351 1082Q351 980 417 920T636
+810T874 701T1000 562T1041 377Q1041 208 940 105T655 -17V-208H507V-17Q321 0 216 115T110 429H295Q295 290 368 215T575 140Q706 140 781 203T856 375Z" />
+<glyph unicode="%" horiz-adv-x="1500" d="M105 1176Q105 1307 188 1392T403 1477Q536 1477 618 1392T701 1170V1099Q701 967 618 884T405 800Q275 800 190 883T105 1106V1176ZM243 1099Q243 1021 287 971T405 920Q476 920 519 969T563 1103V1176Q563 1254 520
+1305T403 1356T286 1305T243 1172V1099ZM814 357Q814 488 897 572T1112 657T1327 573T1411 350V279Q1411 148 1328 64T1114 -21T899 62T814 285V357ZM952 279Q952 200 996 150T1114 99Q1186 99 1229 148T1272 283V357Q1272 436 1229 486T1112 536Q1041 536 997
+487T952 353V279ZM447 110L342 176L1053 1314L1158 1248L447 110Z" />
+<glyph unicode="&amp;" horiz-adv-x="1273" d="M101 391Q101 496 159 584T383 789Q286 907 253 979T220 1122Q220 1288 318 1382T584 1476Q734 1476 832 1389T930 1168Q930 1080 886 1006T730 849L623 770L947 383Q1015 513 1015 672H1182Q1182 417 1059 249L1267
+0H1045L948 115Q874 49 775 15T572 -20Q359 -20 230 93T101 391ZM572 131Q719 131 841 243L486 668L453 644Q286 521 286 391Q286 273 362 202T572 131ZM405 1128Q405 1032 523 888L641 971Q709 1019 734 1062T759 1168Q759 1235 709 1279T583 1324Q501 1324 453
+1269T405 1128Z" />
+<glyph unicode="&apos;" horiz-adv-x="357" d="M253 1425L232 1057H103L104 1536H253V1425Z" />
+<glyph unicode="(" horiz-adv-x="700" d="M133 591Q133 817 193 1025T374 1403T623 1643L661 1521Q515 1409 422 1179T319 664L318 579Q318 193 459 -91Q544 -261 661 -357L623 -470Q490 -396 369 -222Q133 118 133 591Z" />
+<glyph unicode=")" horiz-adv-x="712" d="M567 581Q567 358 509 154T330 -224T77 -470L38 -357Q192 -239 285 9T381 561V593Q381 803 337 983T215 1307T38 1530L77 1643Q209 1570 328 1399T507 1022T567 581Z" />
+<glyph unicode="*" horiz-adv-x="882" d="M330 983L28 1073L74 1224L376 1112L367 1456H520L510 1107L807 1217L853 1065L546 974L744 703L620 609L434 897L254 616L129 707L330 983Z" />
+<glyph unicode="+" horiz-adv-x="1161" d="M670 781H1076V606H670V146H484V606H78V781H484V1206H670V781Z" />
+<glyph unicode="," horiz-adv-x="402" d="M134 -290L29 -218Q123 -87 127 52V219H308V74Q308 -27 259 -128T134 -290Z" />
+<glyph unicode="-" horiz-adv-x="565" d="M525 543H37V694H525V543Z" />
+<glyph unicode="." horiz-adv-x="539" d="M144 97Q144 145 172 177T258 209T344 177T374 97Q374 51 345 20T258 -11T173 20T144 97Z" />
+<glyph unicode="/" horiz-adv-x="844" d="M177 -125H18L626 1456H784L177 -125Z" />
+<glyph unicode="0" horiz-adv-x="1150" d="M1034 621Q1034 296 923 138T576 -20Q343 -20 231 134T115 596V843Q115 1164 226 1320T574 1476Q809 1476 920 1326T1034 861V621ZM849 874Q849 1109 783 1216T574 1324Q432 1324 367 1217T300 888V592Q300 356 368 244T576
+131Q713 131 779 237T849 571V874Z" />
+<glyph unicode="1" horiz-adv-x="1150" d="M729 0H543V1233L170 1096V1264L700 1463H729V0Z" />
+<glyph unicode="2" horiz-adv-x="1150" d="M1075 0H121V133L625 693Q737 820 779 899T822 1064Q822 1178 753 1251T569 1324Q431 1324 355 1246T278 1027H93Q93 1228 222 1352T569 1476Q772 1476 890 1370T1008 1086Q1008 871 734 574L344 151H1075V0Z" />
+<glyph unicode="3" horiz-adv-x="1150" d="M390 818H529Q660 820 735 887T810 1068Q810 1324 555 1324Q435 1324 364 1256T292 1074H107Q107 1247 233 1361T555 1476Q761 1476 878 1367T995 1064Q995 969 934 880T766 747Q886 709 951 621T1017 406Q1017 210 889
+95T556 -20T223 91T94 384H280Q280 269 355 200T556 131Q690 131 761 201T832 402Q832 529 754 597T529 667H390V818Z" />
+<glyph unicode="4" horiz-adv-x="1150" d="M902 489H1104V338H902V0H716V338H53V447L705 1456H902V489ZM263 489H716V1203L694 1163L263 489Z" />
+<glyph unicode="5" horiz-adv-x="1150" d="M206 730L280 1456H1026V1285H437L393 888Q500 951 636 951Q835 951 952 820T1069 464Q1069 239 948 110T608 -20Q415 -20 293 87T154 383H329Q346 258 418 195T608 131Q737 131 810 219T884 462Q884 608 805 696T593
+785Q472 785 403 732L354 692L206 730Z" />
+<glyph unicode="6" horiz-adv-x="1150" d="M847 1457V1300H813Q597 1296 469 1172T321 823Q436 955 635 955Q825 955 938 821T1052 475Q1052 250 930 115T601 -20Q392 -20 262 140T132 554V625Q132 1027 303 1239T814 1457H847ZM604 801Q509 801 429 744T318 601V533Q318
+353 399 243T601 133Q726 133 797 225T869 466Q869 616 797 708T604 801Z" />
+<glyph unicode="7" horiz-adv-x="1150" d="M1061 1352L458 0H264L865 1304H77V1456H1061V1352Z" />
+<glyph unicode="8" horiz-adv-x="1150" d="M1004 1076Q1004 967 947 882T791 749Q905 700 971 606T1038 393Q1038 204 911 92T575 -20Q365 -20 239 92T112 393Q112 511 176 606T355 750Q258 798 202 883T146 1076Q146 1260 264 1368T575 1476Q767 1476 885 1368T1004
+1076ZM853 397Q853 519 776 596T573 673T373 597T297 397T370 202T575 131Q705 131 779 202T853 397ZM575 1324Q466 1324 399 1257T331 1073Q331 962 397 894T575 825T752 893T819 1073T750 1254T575 1324Z" />
+<glyph unicode="9" horiz-adv-x="1150" d="M830 640Q772 571 692 529T515 487Q389 487 296 549T151 723T100 972Q100 1118 155 1235T313 1414T551 1476Q767 1476 891 1315T1016 874V820Q1016 395 848 200T341 -1H305V155H344Q573 159 696 274T830 640ZM545 640Q638
+640 716 697T831 838V912Q831 1094 752 1208T552 1322Q430 1322 356 1229T282 982Q282 833 353 737T545 640Z" />
+<glyph unicode=":" horiz-adv-x="496" d="M390 97Q390 145 418 177T504 209T590 177T620 97Q620 51 591 20T504 -11T419 20T390 97ZM135 980Q135 1028 163 1060T249 1092T335 1060T365 980Q365 934 336 903T249 872T164 903T135 980Z" />
+<glyph unicode=";" horiz-adv-x="433" d="M111 980Q111 1028 139 1060T225 1092T311 1060T341 980Q341 934 312 903T225 872T140 903T111 980ZM146 -290L41 -218Q135 -87 139 52V219H320V74Q320 -27 271 -128T146 -290Z" />
+<glyph unicode="&lt;" horiz-adv-x="1041" d="M264 644L890 391V195L72 574V720L890 1098V902L264 644Z" />
+<glyph unicode="=" horiz-adv-x="1124" d="M986 814H152V975H986V814ZM986 399H152V559H986V399Z" />
+<glyph unicode="&gt;" horiz-adv-x="1070" d="M795 650L134 909V1099L988 721V575L134 196V388L795 650Z" />
+<glyph unicode="?" horiz-adv-x="967" d="M357 410Q359 529 384 598T486 751L617 886Q701 981 701 1090Q701 1195 646 1254T486 1314Q384 1314 322 1260T260 1115H75Q77 1277 190 1376T486 1476Q675 1476 780 1375T886 1096Q886 921 724 751L615 643Q542 562 542
+410H357ZM349 93Q349 138 376 168T458 199T540 169T568 93T540 19T458 -11T377 18T349 93Z" />
+<glyph unicode="@" horiz-adv-x="1839" d="M1738 502Q1726 260 1618 120T1329 -20Q1142 -20 1089 148Q1035 63 966 22T822 -20Q680 -20 607 96T553 417Q568 582 628 711T784 915T985 989Q1066 989 1130 968T1274 883L1222 329Q1203 98 1350 98Q1463 98 1533 210T1609
+502Q1628 891 1465 1095T967 1299Q766 1299 610 1200T364 912T263 478Q251 230 323 48T542 -231T899 -328Q989 -328 1079 -306T1230 -249L1267 -364Q1205 -403 1103 -428T895 -453Q645 -453 465 -341T196 -17T118 478Q130 753 241 972T542 1311T971 1431Q1220 1431
+1398 1319T1663 996T1738 502ZM712 417Q698 275 738 199T867 123Q927 123 982 174T1074 320L1075 329L1121 832Q1065 861 1001 861Q884 861 808 742T712 417Z" />
+<glyph unicode="A" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538Z" />
+<glyph unicode="B" horiz-adv-x="1275" d="M169 0V1456H645Q882 1456 1001 1358T1121 1068Q1121 966 1063 888T905 766Q1023 733 1091 641T1160 420Q1160 224 1033 112T674 0H169ZM361 681V157H678Q812 157 889 226T967 418Q967 681 681 681H361ZM361 835H651Q777
+835 852 898T928 1069Q928 1189 858 1243T645 1298H361V835Z" />
+<glyph unicode="C" horiz-adv-x="1333" d="M1240 462Q1213 231 1070 106T688 -20Q430 -20 275 165T119 660V800Q119 1003 191 1157T397 1393T705 1476Q937 1476 1077 1347T1240 988H1047Q1022 1162 939 1240T705 1318Q521 1318 417 1182T312 795V654Q312 417 411
+277T688 137Q848 137 933 209T1047 462H1240Z" />
+<glyph unicode="D" horiz-adv-x="1343" d="M169 0V1456H580Q770 1456 916 1372T1141 1133T1222 777V684Q1222 478 1143 323T916 85T572 0H169ZM361 1298V157H563Q785 157 908 295T1032 688V773Q1032 1021 916 1158T585 1298H361Z" />
+<glyph unicode="E" horiz-adv-x="1164" d="M992 673H361V157H1094V0H169V1456H1084V1298H361V830H992V673Z" />
+<glyph unicode="F" horiz-adv-x="1132" d="M972 643H361V0H169V1456H1071V1298H361V800H972V643Z" />
+<glyph unicode="G" horiz-adv-x="1395" d="M1244 191Q1170 85 1038 33T729 -20Q551 -20 413 63T200 301T122 658V785Q122 1114 275 1295T707 1476Q935 1476 1074 1360T1244 1029H1052Q998 1318 708 1318Q515 1318 416 1183T315 790V671Q315 426 427 282T730 137Q838
+137 919 161T1053 242V569H716V725H1244V191Z" />
+<glyph unicode="H" horiz-adv-x="1460" d="M1288 0H1095V673H361V0H169V1456H361V830H1095V1456H1288V0Z" />
+<glyph unicode="I" horiz-adv-x="557" d="M375 0H183V1456H375V0Z" />
+<glyph unicode="J" horiz-adv-x="1130" d="M779 1456H972V425Q972 216 847 98T512 -20Q295 -20 174 91T53 402H245Q245 277 313 207T512 137Q631 137 704 212T779 422V1456Z" />
+<glyph unicode="K" horiz-adv-x="1284" d="M539 677L361 492V0H169V1456H361V736L1008 1456H1240L667 813L1285 0H1055L539 677Z" />
+<glyph unicode="L" horiz-adv-x="1102" d="M362 157H1052V0H169V1456H362V157Z" />
+<glyph unicode="M" horiz-adv-x="1788" d="M417 1456L893 268L1369 1456H1618V0H1426V567L1444 1179L966 0H819L342 1176L361 567V0H169V1456H417Z" />
+<glyph unicode="N" horiz-adv-x="1460" d="M1288 0H1095L362 1122V0H169V1456H362L1097 329V1456H1288V0Z" />
+<glyph unicode="O" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521 1311
+417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775Z" />
+<glyph unicode="P" horiz-adv-x="1292" d="M361 570V0H169V1456H706Q945 1456 1080 1334T1216 1011Q1216 799 1084 685T704 570H361ZM361 727H706Q860 727 942 799T1024 1009Q1024 1139 942 1217T717 1298H361V727Z" />
+<glyph unicode="Q" horiz-adv-x="1408" d="M1281 681Q1281 470 1214 318T1026 79L1286 -125L1155 -246L848 -2Q776 -20 696 -20Q524 -20 391 64T185 305T109 668V773Q109 983 182 1144T388 1390T694 1476Q870 1476 1003 1391T1209 1147T1281 774V681ZM1089 775Q1089
+1032 987 1171T694 1311Q513 1311 409 1173T301 788V681Q301 431 405 287T696 143T984 278T1089 667V775Z" />
+<glyph unicode="R" horiz-adv-x="1261" d="M703 589H361V0H168V1456H650Q896 1456 1028 1344T1161 1018Q1161 882 1088 781T883 630L1225 12V0H1019L703 589ZM361 746H656Q799 746 883 820T968 1018Q968 1153 888 1225T655 1298H361V746Z" />
+<glyph unicode="S" horiz-adv-x="1215" d="M598 649Q351 720 239 823T126 1079Q126 1251 263 1363T621 1476Q771 1476 888 1418T1070 1258T1135 1035H942Q942 1167 858 1242T621 1318Q479 1318 400 1256T320 1082Q320 993 395 932T652 819T936 707T1088 563T1138
+370Q1138 193 1000 87T631 -20Q481 -20 351 37T151 195T80 422H273Q273 290 370 214T631 137Q783 137 864 199T945 368T870 533T598 649Z" />
+<glyph unicode="T" horiz-adv-x="1222" d="M1175 1298H707V0H516V1298H49V1456H1175V1298Z" />
+<glyph unicode="U" horiz-adv-x="1328" d="M1194 1456V466Q1193 260 1065 129T716 -18L665 -20Q426 -20 284 109T140 464V1456H330V470Q330 312 417 225T665 137Q828 137 914 224T1001 469V1456H1194Z" />
+<glyph unicode="V" horiz-adv-x="1303" d="M651 255L1067 1456H1277L737 0H567L28 1456H237L651 255Z" />
+<glyph unicode="W" horiz-adv-x="1817" d="M483 459L511 267L552 440L840 1456H1002L1283 440L1323 264L1354 460L1580 1456H1773L1420 0H1245L945 1061L922 1172L899 1061L588 0H413L61 1456H253L483 459Z" />
+<glyph unicode="X" horiz-adv-x="1284" d="M644 898L993 1456H1219L759 734L1230 0H1002L644 568L284 0H57L529 734L68 1456H293L644 898Z" />
+<glyph unicode="Y" horiz-adv-x="1230" d="M613 725L993 1456H1211L709 543V0H517V543L15 1456H235L613 725Z" />
+<glyph unicode="Z" horiz-adv-x="1226" d="M313 157H1146V0H86V144L884 1298H99V1456H1114V1315L313 157Z" />
+<glyph unicode="[" horiz-adv-x="543" d="M523 1512H332V-160H523V-312H146V1664H523V1512Z" />
+<glyph unicode="\" horiz-adv-x="840" d="M40 1456H216L824 -125H648L40 1456Z" />
+<glyph unicode="]" horiz-adv-x="543" d="M9 1664H387V-312H9V-160H202V1512H9V1664Z" />
+<glyph unicode="^" horiz-adv-x="856" d="M426 1211L236 729H64L363 1456H490L788 729H617L426 1211Z" />
+<glyph unicode="_" horiz-adv-x="924" d="M920 -151H4V0H920V-151Z" />
+<glyph unicode="`" horiz-adv-x="633" d="M474 1240H315L57 1534H280L474 1240Z" />
+<glyph unicode="a" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
+751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141Z" />
+<glyph unicode="b" horiz-adv-x="1149" d="M1056 529Q1056 281 942 131T636 -20Q431 -20 319 125L310 0H140V1536H325V963Q437 1102 634 1102T943 953T1056 545V529ZM871 550Q871 739 798 842T588 945Q405 945 325 775V307Q410 137 590 137Q723 137 797 240T871 550Z" />
+<glyph unicode="c" horiz-adv-x="1072" d="M574 131Q673 131 747 191T829 341H1004Q999 248 940 164T783 30T574 -20Q353 -20 223 127T92 531V562Q92 720 150 843T316 1034T573 1102Q755 1102 875 993T1004 710H829Q821 815 750 882T573 950Q432 950 355 849T277
+555V520Q277 333 354 232T574 131Z" />
+<glyph unicode="d" horiz-adv-x="1155" d="M95 550Q95 799 213 950T522 1102Q712 1102 823 972V1536H1008V0H838L829 116Q718 -20 520 -20Q332 -20 214 134T95 536V550ZM280 529Q280 345 356 241T566 137Q742 137 823 295V792Q740 945 568 945Q432 945 356 840T280 529Z" />
+<glyph unicode="e" horiz-adv-x="1085" d="M589 -20Q369 -20 231 124T93 511V545Q93 706 154 832T326 1030T566 1102Q777 1102 894 963T1011 565V488H278Q282 328 371 230T599 131Q697 131 765 171T884 277L997 189Q861 -20 589 -20ZM566 950Q454 950 378 869T284
+640H826V654Q818 795 750 872T566 950Z" />
+<glyph unicode="f" horiz-adv-x="711" d="M231 0V939H60V1082H231V1193Q231 1367 324 1462T587 1557Q651 1557 714 1540L704 1390Q657 1399 604 1399Q514 1399 465 1347T416 1196V1082H647V939H416V0H231Z" />
+<glyph unicode="g" horiz-adv-x="1149" d="M96 550Q96 803 213 952T523 1102Q721 1102 832 962L841 1082H1010V26Q1010 -184 886 -305T551 -426Q434 -426 322 -376T151 -239L247 -128Q366 -275 538 -275Q673 -275 748 -199T824 15V108Q713 -20 521 -20Q331 -20
+214 133T96 550ZM282 529Q282 346 357 242T567 137Q742 137 824 296V790Q739 945 569 945Q434 945 358 840T282 529Z" />
+<glyph unicode="h" horiz-adv-x="1128" d="M325 951Q448 1102 645 1102Q988 1102 991 715V0H806V716Q805 833 753 889T589 945Q499 945 431 897T325 771V0H140V1536H325V951Z" />
+<glyph unicode="i" horiz-adv-x="497" d="M341 0H156V1082H341V0ZM141 1369Q141 1414 168 1445T250 1476T332 1445T360 1369T332 1294T250 1264T169 1294T141 1369Z" />
+<glyph unicode="j" horiz-adv-x="489" d="M331 1082V-125Q331 -437 48 -437Q-13 -437 -65 -419V-271Q-33 -279 19 -279Q81 -279 113 -246T146 -129V1082H331ZM127 1369Q127 1413 154 1444T235 1476Q289 1476 317 1445T345 1369T317 1294T235 1264T154 1294T127 1369Z" />
+<glyph unicode="k" horiz-adv-x="1038" d="M442 501L326 380V0H141V1536H326V607L425 726L762 1082H987L566 630L1036 0H819L442 501Z" />
+<glyph unicode="l" horiz-adv-x="497" d="M341 0H156V1536H341V0Z" />
+<glyph unicode="m" horiz-adv-x="1795" d="M314 1082L319 962Q438 1102 640 1102Q867 1102 949 928Q1003 1006 1089 1054T1294 1102Q1650 1102 1656 725V0H1471V714Q1471 830 1418 887T1240 945Q1137 945 1069 884T990 718V0H804V709Q804 945 573 945Q391 945
+324 790V0H139V1082H314Z" />
+<glyph unicode="n" horiz-adv-x="1130" d="M315 1082L321 946Q445 1102 645 1102Q988 1102 991 715V0H806V716Q805 833 753 889T589 945Q499 945 431 897T325 771V0H140V1082H315Z" />
+<glyph unicode="o" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729 807
+839T582 950Q445 950 361 841T277 529Z" />
+<glyph unicode="p" horiz-adv-x="1149" d="M1054 529Q1054 282 941 131T635 -20Q438 -20 325 105V-416H140V1082H309L318 962Q431 1102 632 1102Q827 1102 940 955T1054 546V529ZM869 550Q869 733 791 839T577 945Q409 945 325 796V279Q408 131 579 131Q712 131
+790 236T869 550Z" />
+<glyph unicode="q" horiz-adv-x="1164" d="M95 550Q95 805 212 953T526 1102Q718 1102 829 973L837 1082H1007V-416H822V100Q710 -20 524 -20Q328 -20 212 132T95 537V550ZM280 529Q280 343 358 237T570 131Q735 131 822 277V807Q734 950 572 950Q438 950 359
+844T280 529Z" />
+<glyph unicode="r" horiz-adv-x="693" d="M663 916Q621 923 572 923Q390 923 325 768V0H140V1082H320L323 957Q414 1102 581 1102Q635 1102 663 1088V916Z" />
+<glyph unicode="s" horiz-adv-x="1056" d="M770 287Q770 362 714 403T517 475T294 547T172 647T132 785Q132 918 244 1010T532 1102Q716 1102 830 1007T945 764H759Q759 840 695 895T532 950Q431 950 374 906T317 791Q317 724 370 690T561 625T786 551T913 448T955
+300Q955 155 839 68T538 -20Q408 -20 308 26T152 154T95 333H280Q285 240 354 186T538 131Q643 131 706 173T770 287Z" />
+<glyph unicode="t" horiz-adv-x="669" d="M391 1344V1082H593V939H391V268Q391 203 418 171T510 138Q542 138 598 150V0Q525 -20 456 -20Q332 -20 269 55T206 268V939H9V1082H206V1344H391Z" />
+<glyph unicode="u" horiz-adv-x="1129" d="M808 107Q700 -20 491 -20Q318 -20 228 80T136 378V1082H321V383Q321 137 521 137Q733 137 803 295V1082H988V0H812L808 107Z" />
+<glyph unicode="v" horiz-adv-x="992" d="M497 251L765 1082H954L566 0H425L33 1082H222L497 251Z" />
+<glyph unicode="w" horiz-adv-x="1539" d="M1098 255L1306 1082H1491L1176 0H1026L763 820L507 0H357L43 1082H227L440 272L692 1082H841L1098 255Z" />
+<glyph unicode="x" horiz-adv-x="1015" d="M503 687L743 1082H959L605 547L970 0H756L506 405L256 0H41L406 547L52 1082H266L503 687Z" />
+<glyph unicode="y" horiz-adv-x="969" d="M494 271L746 1082H944L509 -167Q408 -437 188 -437L153 -434L84 -421V-271L134 -275Q228 -275 280 -237T367 -98L408 12L22 1082H224L494 271Z" />
+<glyph unicode="z" horiz-adv-x="1015" d="M314 151H947V0H88V136L685 929H97V1082H917V951L314 151Z" />
+<glyph unicode="{" horiz-adv-x="693" d="M632 -366Q455 -316 366 -202T276 101V300Q276 543 64 543V688Q276 688 276 930V1138Q278 1321 365 1433T632 1597L670 1482Q461 1415 461 1133V931Q461 704 294 615Q461 525 461 296V90Q464 -185 670 -251L632 -366Z" />
+<glyph unicode="|" horiz-adv-x="499" d="M324 -270H175V1456H324V-270Z" />
+<glyph unicode="}" horiz-adv-x="693" d="M19 -251Q222 -186 229 80V300Q229 531 410 615Q229 697 229 930V1133Q229 1415 20 1482L58 1597Q235 1547 324 1435T414 1137V927Q414 688 626 688V543Q414 543 414 300V98Q414 -90 324 -203T58 -366L19 -251Z" />
+<glyph unicode="~" horiz-adv-x="1393" d="M1263 777Q1263 619 1170 511T939 402Q867 402 803 428T655 529T533 621T454 639Q376 639 334 586T292 438L131 436Q131 596 223 699T454 802Q530 802 600 770T758 658T910 567L939 565Q1015 565 1062 623T1110 776L1263 777Z" />
+<glyph unicode="&#xa0;" horiz-adv-x="507" />
+<glyph unicode="&#xa1;" horiz-adv-x="499" d="M170 684H338L351 -360H157L170 684ZM358 996Q358 951 331 920T249 889T167 920T139 996T167 1071T249 1101T330 1071T358 996Z" />
+<glyph unicode="&#xa2;" horiz-adv-x="1120" d="M586 131Q686 131 760 191T842 341H1017Q1011 215 912 115T669 -12V-245H484V-11Q305 23 205 165T105 527V562Q105 774 206 916T484 1092V1318H669V1095Q819 1072 915 966T1017 710H842Q834 815 763 882T586 950Q445
+950 368 849T290 555V520Q290 333 367 232T586 131Z" />
+<glyph unicode="&#xa3;" horiz-adv-x="1190" d="M449 622L457 402Q457 248 395 157H1128L1127 0H95V157H172Q212 166 237 231T264 393V401L256 622H91V779H251L242 1039Q242 1238 364 1357T687 1476Q877 1476 988 1370T1099 1087H908Q908 1194 845 1256T670 1318Q565
+1318 500 1241T435 1039L444 779H763V622H449Z" />
+<glyph unicode="&#xa4;" horiz-adv-x="1460" d="M1103 112Q944 -20 735 -20Q528 -20 369 110L235 -26L105 109L244 250Q140 406 140 608Q140 814 252 977L105 1128L235 1264L382 1114Q540 1234 735 1234Q931 1234 1090 1113L1239 1265L1371 1128L1220 974Q1330
+811 1330 608Q1330 412 1228 253L1371 109L1239 -27L1103 112ZM311 608Q311 485 368 379T524 212T735 151T946 212T1100 379T1157 608Q1157 730 1101 835T946 1001T735 1062Q622 1062 524 1002T369 836T311 608Z" />
+<glyph unicode="&#xa5;" horiz-adv-x="1240" d="M614 782L978 1456H1197L779 736H1091V611H707V446H1091V322H707V0H514V322H136V446H514V611H136V736H449L31 1456H251L614 782Z" />
+<glyph unicode="&#xa6;" horiz-adv-x="491" d="M147 -270V521H333V-270H147ZM333 698H147V1456H333V698Z" />
+<glyph unicode="&#xa7;" horiz-adv-x="1256" d="M1145 431Q1145 242 959 157Q1028 108 1064 40T1100 -128Q1100 -296 970 -395T612 -495Q500 -495 400 -467T229 -382Q90 -269 90 -64L276 -62Q276 -192 366 -267T612 -343Q748 -343 831 -285T914 -130Q914 -41 843
+11T563 126Q381 174 285 229T143 362T96 551Q96 737 278 825Q212 874 177 942T141 1110Q141 1276 274 1376T630 1476Q862 1476 992 1363T1122 1045H937Q937 1170 853 1247T630 1325Q488 1325 408 1268T327 1112Q327 1043 355 1003T450 931T661 858T889 782T1030
+698T1116 585T1145 431ZM602 691Q512 715 437 742Q357 723 320 673T282 553Q282 483 309 443T402 370T611 296T797 238Q875 258 917 308T959 428Q959 516 890 570T602 691Z" />
+<glyph unicode="&#xa8;" horiz-adv-x="856" d="M102 1371Q102 1416 129 1446T211 1477T293 1447T321 1371T293 1296T211 1266T130 1296T102 1371ZM532 1369Q532 1414 559 1445T641 1476T723 1445T751 1369T723 1294T641 1264T560 1294T532 1369Z" />
+<glyph unicode="&#xa9;" horiz-adv-x="1609" d="M1119 597Q1119 444 1033 364T788 283Q631 283 537 388T442 676V786Q442 962 537 1067T788 1173Q948 1173 1034 1091T1120 860H974Q974 959 927 1001T788 1044Q694 1044 640 975T586 783V670Q586 550 640 481T788
+412Q880 412 926 454T973 597H1119ZM206 729Q206 557 286 411T503 181T801 98T1098 181T1315 410T1395 729Q1395 899 1316 1044T1100 1272T801 1356Q641 1356 503 1274T286 1045T206 729ZM91 729Q91 931 184 1104T443 1376T801 1476T1158 1377T1416 1104T1510 729Q1510
+532 1420 360T1165 84T801 -21Q604 -21 439 82T182 358T91 729Z" />
+<glyph unicode="&#xaa;" horiz-adv-x="915" d="M618 705Q606 739 600 777Q524 691 396 691Q277 691 212 753T147 918Q147 1029 230 1089T486 1149H594V1201Q594 1336 470 1336Q401 1336 362 1309T322 1231L161 1243Q161 1346 247 1411T470 1476Q603 1476 680 1405T757
+1199V883Q757 786 783 705H618ZM435 828Q478 828 522 848T594 895V1037H482Q399 1036 355 1005T310 922Q310 828 435 828Z" />
+<glyph unicode="&#xab;" horiz-adv-x="961" d="M536 804L794 407H653L358 795V814L653 1203H794L536 804ZM610 548L868 151H727L432 539V558L727 947H868L610 548Z" />
+<glyph unicode="&#xac;" horiz-adv-x="1134" d="M958 375H772V639H127V800H958V375Z" />
+<glyph unicode="&#xad;" horiz-adv-x="565" d="M525 543H37V694H525V543Z" />
+<glyph unicode="&#xae;" horiz-adv-x="1610" d="M90 729Q90 931 183 1104T442 1376T800 1476T1157 1377T1415 1104T1509 729Q1509 532 1419 360T1164 84T800 -21Q603 -21 438 82T181 358T90 729ZM205 729Q205 557 285 411T502 181T800 98Q961 98 1099 182T1315
+412T1394 729Q1394 900 1316 1044T1099 1272T800 1356Q640 1356 502 1274T285 1045T205 729ZM653 654V316H512V1165H788Q941 1165 1025 1100T1110 909Q1110 786 982 721Q1104 671 1105 517V456Q1105 370 1122 332V316H977Q963 352 963 444T960 554Q944 650 829
+654H653ZM653 782H809Q881 784 925 817T969 904Q969 977 930 1007T791 1038H653V782Z" />
+<glyph unicode="&#xaf;" horiz-adv-x="938" d="M834 1313H120V1456H834V1313Z" />
+<glyph unicode="&#xb0;" horiz-adv-x="765" d="M130 1216Q130 1320 204 1398T385 1476Q489 1476 562 1399T636 1216Q636 1110 563 1035T385 960Q280 960 205 1035T130 1216ZM385 1088Q439 1088 476 1123T513 1216Q513 1274 476 1311T385 1349Q330 1349 293 1310T255
+1216T292 1125T385 1088Z" />
+<glyph unicode="&#xb1;" horiz-adv-x="1094" d="M649 854H1013V703H649V289H482V703H97V854H482V1267H649V854ZM970 0H135V152H970V0Z" />
+<glyph unicode="&#xb2;" horiz-adv-x="751" d="M683 667H84V775L384 1057Q493 1159 493 1228Q493 1277 461 1307T369 1338Q294 1338 259 1300T223 1205H66Q66 1319 149 1393T365 1467T574 1404T651 1230Q651 1126 544 1019L460 940L284 795H683V667Z" />
+<glyph unicode="&#xb3;" horiz-adv-x="751" d="M265 1125H349Q423 1125 459 1155T495 1234Q495 1279 464 1308T362 1337Q305 1337 268 1312T230 1245H73Q73 1343 154 1404T360 1466Q497 1466 575 1406T653 1241Q653 1186 618 1141T517 1070Q666 1029 666 886Q666
+780 581 718T360 655Q228 655 145 718T62 888H220Q220 843 259 813T366 783Q436 783 472 813T509 894Q509 1007 353 1009H265V1125Z" />
+<glyph unicode="&#xb4;" horiz-adv-x="642" d="M316 1534H540L272 1240H123L316 1534Z" />
+<glyph unicode="&#xb5;" horiz-adv-x="1160" d="M339 1082V449Q340 286 391 208T559 130Q758 130 820 282V1082H1006V0H839L830 115Q737 -20 567 -20Q420 -20 339 53V-416H154V1082H339Z" />
+<glyph unicode="&#xb6;" horiz-adv-x="1001" d="M646 0V520H562Q332 520 200 647T67 988Q67 1201 200 1328T563 1456H832V0H646Z" />
+<glyph unicode="&#xb7;" horiz-adv-x="534" d="M147 729Q147 777 175 809T261 841T347 809T377 729Q377 682 348 651T261 619T176 650T147 729Z" />
+<glyph unicode="&#xb8;" horiz-adv-x="507" d="M285 0L273 -52Q426 -79 426 -225Q426 -322 346 -378T123 -435L116 -328Q195 -328 238 -302T282 -229Q282 -185 250 -164T120 -134L152 0H285Z" />
+<glyph unicode="&#xb9;" horiz-adv-x="751" d="M495 674H338V1275L122 1218V1346L477 1463H495V674Z" />
+<glyph unicode="&#xba;" horiz-adv-x="931" d="M122 1123Q122 1281 216 1378T464 1476Q619 1476 713 1380T807 1117V1043Q807 884 714 787T466 690T217 787T122 1049V1123ZM285 1043Q285 943 333 886T466 829Q549 829 596 886T644 1045V1123Q644 1222 596 1279T464
+1336Q383 1336 335 1281T285 1129V1043Z" />
+<glyph unicode="&#xbb;" horiz-adv-x="960" d="M244 949L539 560V541L244 152H102L360 550L102 949H244ZM593 949L888 560V541L593 152H451L709 550L451 949H593Z" />
+<glyph unicode="&#xbc;" horiz-adv-x="1500" d="M458 664H301V1265L85 1208V1336L440 1453H458V664ZM443 118L339 184L1050 1322L1154 1256L443 118ZM1318 299H1425V169H1318V0H1161V169H786L780 271L1157 789H1318V299ZM938 299H1161V588L1144 560L938 299Z" />
+<glyph unicode="&#xbd;" horiz-adv-x="1589" d="M399 118L295 184L1006 1322L1110 1256L399 118ZM453 664H296V1265L80 1208V1336L435 1453H453V664ZM1481 0H882V108L1182 390Q1291 492 1291 561Q1291 610 1259 640T1167 671Q1092 671 1057 633T1021 538H864Q864
+652 947 726T1163 800T1372 737T1449 563Q1449 459 1342 352L1258 273L1082 128H1481V0Z" />
+<glyph unicode="&#xbe;" horiz-adv-x="1593" d="M570 118L466 184L1177 1322L1281 1256L570 118ZM1410 299H1517V169H1410V0H1253V169H878L872 271L1249 789H1410V299ZM1030 299H1253V588L1236 560L1030 299ZM314 1126H398Q472 1126 508 1156T544 1235Q544 1280
+513 1309T411 1338Q354 1338 317 1313T279 1246H122Q122 1344 203 1405T409 1467Q546 1467 624 1407T702 1242Q702 1187 667 1142T566 1071Q715 1030 715 887Q715 781 630 719T409 656Q277 656 194 719T111 889H269Q269 844 308 814T415 784Q485 784 521 814T558
+895Q558 1008 402 1010H314V1126Z" />
+<glyph unicode="&#xbf;" horiz-adv-x="969" d="M588 680Q587 574 567 511T498 388T358 233T255 37L253 0Q253 -109 311 -166T478 -224Q578 -224 640 -168T703 -20H888Q886 -181 774 -283T478 -385Q282 -385 175 -285T68 -5Q68 168 228 343L337 456Q403 534 403
+680H588ZM596 997Q596 952 569 921T487 890T405 921T377 997Q377 1041 405 1071T487 1101T568 1071T596 997Z" />
+<glyph unicode="&#xc0;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM778 1550H619L361 1844H584L778 1550Z" />
+<glyph unicode="&#xc1;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM763 1844H987L719 1550H570L763 1844Z" />
+<glyph unicode="&#xc2;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM975 1572V1562H822L672 1732L523 1562H370V1574L616 1846H728L975 1572Z" />
+<glyph unicode="&#xc3;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM1027 1814Q1027 1706 966 1639T812 1572Q771 1572 741 1582T663 1623T593 1660T543 1667Q502 1667 473 1636T444 1555L320
+1562Q320 1669 380 1739T534 1809Q569 1809 597 1799T673 1760T746 1722T803 1713Q846 1713 874 1747T903 1826L1027 1814Z" />
+<glyph unicode="&#xc4;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM351 1681Q351 1726 378 1756T460 1787T542 1757T570 1681T542 1606T460 1576T379 1606T351 1681ZM781 1679Q781 1724
+808 1755T890 1786T972 1755T1000 1679T972 1604T890 1574T809 1604T781 1679Z" />
+<glyph unicode="&#xc5;" horiz-adv-x="1336" d="M973 380H363L226 0H28L584 1456H752L1309 0H1112L973 380ZM421 538H916L668 1219L421 538ZM887 1729Q887 1642 825 1584T672 1525Q580 1525 519 1584T457 1729T518 1876T672 1937T825 1876T887 1729ZM556 1729Q556
+1682 589 1648T672 1614Q720 1614 754 1647T788 1729T755 1812T672 1847Q622 1847 589 1812T556 1729Z" />
+<glyph unicode="&#xc6;" horiz-adv-x="1914" d="M1879 0H996L981 353H417L212 0H-14L866 1456H1817V1304H1126L1146 833H1736V682H1152L1174 151H1879V0ZM518 527H974L943 1260L518 527Z" />
+<glyph unicode="&#xc7;" horiz-adv-x="1333" d="M1240 462Q1213 231 1070 106T688 -20Q430 -20 275 165T119 660V800Q119 1003 191 1157T397 1393T705 1476Q937 1476 1077 1347T1240 988H1047Q1022 1162 939 1240T705 1318Q521 1318 417 1182T312 795V654Q312
+417 411 277T688 137Q848 137 933 209T1047 462H1240ZM751 -9L739 -61Q892 -88 892 -234Q892 -331 812 -387T589 -444L582 -337Q661 -337 704 -311T748 -238Q748 -194 716 -173T586 -143L618 -9H751Z" />
+<glyph unicode="&#xc8;" horiz-adv-x="1164" d="M992 673H361V157H1094V0H169V1456H1084V1298H361V830H992V673ZM725 1562H566L308 1856H531L725 1562Z" />
+<glyph unicode="&#xc9;" horiz-adv-x="1164" d="M992 673H361V157H1094V0H169V1456H1084V1298H361V830H992V673ZM710 1856H934L666 1562H517L710 1856Z" />
+<glyph unicode="&#xca;" horiz-adv-x="1164" d="M992 673H361V157H1094V0H169V1456H1084V1298H361V830H992V673ZM922 1584V1574H769L619 1744L470 1574H317V1586L563 1858H675L922 1584Z" />
+<glyph unicode="&#xcb;" horiz-adv-x="1164" d="M992 673H361V157H1094V0H169V1456H1084V1298H361V830H992V673ZM298 1693Q298 1738 325 1768T407 1799T489 1769T517 1693T489 1618T407 1588T326 1618T298 1693ZM728 1691Q728 1736 755 1767T837 1798T919 1767T947
+1691T919 1616T837 1586T756 1616T728 1691Z" />
+<glyph unicode="&#xcc;" horiz-adv-x="557" d="M375 0H183V1456H375V0ZM385 1562H226L-32 1856H191L385 1562Z" />
+<glyph unicode="&#xcd;" horiz-adv-x="557" d="M375 0H183V1456H375V0ZM369 1856H593L325 1562H176L369 1856Z" />
+<glyph unicode="&#xce;" horiz-adv-x="557" d="M375 0H183V1456H375V0ZM582 1584V1574H429L279 1744L130 1574H-23V1586L223 1858H335L582 1584Z" />
+<glyph unicode="&#xcf;" horiz-adv-x="557" d="M375 0H183V1456H375V0ZM-42 1693Q-42 1738 -15 1768T67 1799T149 1769T177 1693T149 1618T67 1588T-14 1618T-42 1693ZM388 1691Q388 1736 415 1767T497 1798T579 1767T607 1691T579 1616T497 1586T416 1616T388 1691Z" />
+<glyph unicode="&#xd0;" horiz-adv-x="1373" d="M199 0V666H37V817H199V1456H610Q800 1456 946 1372T1171 1133T1252 777V684Q1252 478 1173 323T946 85T602 0H199ZM673 666H391V157H592Q814 157 937 294T1062 680V773Q1062 1021 946 1158T615 1298H391V817H673V666Z" />
+<glyph unicode="&#xd1;" horiz-adv-x="1460" d="M1288 0H1095L362 1122V0H169V1456H362L1097 329V1456H1288V0ZM1081 1814Q1081 1706 1020 1639T866 1572Q825 1572 795 1582T717 1623T647 1660T597 1667Q556 1667 527 1636T498 1555L374 1562Q374 1669 434 1739T588
+1809Q623 1809 651 1799T727 1760T800 1722T857 1713Q900 1713 928 1747T957 1826L1081 1814Z" />
+<glyph unicode="&#xd2;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521
+1311 417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775ZM812 1552H653L395 1846H618L812 1552Z" />
+<glyph unicode="&#xd3;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521
+1311 417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775ZM797 1846H1021L753 1552H604L797 1846Z" />
+<glyph unicode="&#xd4;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521
+1311 417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775ZM1009 1574V1564H856L706 1734L557 1564H404V1576L650 1848H762L1009 1574Z" />
+<glyph unicode="&#xd5;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521
+1311 417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775ZM1061 1816Q1061 1708 1000 1641T846 1574Q805 1574 775 1584T697 1625T627 1662T577 1669Q536 1669 507 1638T478 1557L354 1564Q354 1671 414 1741T568 1811Q603 1811 631 1801T707
+1762T780 1724T837 1715Q880 1715 908 1749T937 1828L1061 1816Z" />
+<glyph unicode="&#xd6;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q533 -20 400 64T194 305T118 668V773Q118 983 191 1144T397 1390T703 1476Q878 1476 1011 1392T1217 1147T1289 773V681ZM1098 775Q1098 1034 994 1172T703 1311Q521
+1311 417 1173T309 788V681Q309 430 414 287T705 143Q891 143 993 278T1098 667V775ZM385 1683Q385 1728 412 1758T494 1789T576 1759T604 1683T576 1608T494 1578T413 1608T385 1683ZM815 1681Q815 1726 842 1757T924 1788T1006 1757T1034 1681T1006 1606T924
+1576T843 1606T815 1681Z" />
+<glyph unicode="&#xd7;" horiz-adv-x="1092" d="M89 329L419 665L91 1000L210 1123L539 788L868 1123L987 1000L659 665L989 329L870 206L539 543L208 206L89 329Z" />
+<glyph unicode="&#xd8;" horiz-adv-x="1408" d="M1289 681Q1289 467 1217 308T1013 64T705 -20Q534 -20 403 62L306 -93H164L308 138Q118 330 118 690V773Q118 983 191 1144T397 1390T703 1476Q917 1476 1065 1351L1168 1516H1309L1150 1261Q1287 1074 1289 780V681ZM309
+681Q309 437 407 296L971 1200Q869 1311 703 1311Q521 1311 417 1173T309 788V681ZM1098 775Q1098 957 1042 1088L493 207Q584 143 705 143Q891 143 993 278T1098 667V775Z" />
+<glyph unicode="&#xd9;" horiz-adv-x="1328" d="M1194 1456V466Q1193 260 1065 129T716 -18L665 -20Q426 -20 284 109T140 464V1456H330V470Q330 312 417 225T665 137Q828 137 914 224T1001 469V1456H1194ZM773 1550H614L356 1844H579L773 1550Z" />
+<glyph unicode="&#xda;" horiz-adv-x="1328" d="M1194 1456V466Q1193 260 1065 129T716 -18L665 -20Q426 -20 284 109T140 464V1456H330V470Q330 312 417 225T665 137Q828 137 914 224T1001 469V1456H1194ZM758 1844H982L714 1550H565L758 1844Z" />
+<glyph unicode="&#xdb;" horiz-adv-x="1328" d="M1194 1456V466Q1193 260 1065 129T716 -18L665 -20Q426 -20 284 109T140 464V1456H330V470Q330 312 417 225T665 137Q828 137 914 224T1001 469V1456H1194ZM970 1572V1562H817L667 1732L518 1562H365V1574L611
+1846H723L970 1572Z" />
+<glyph unicode="&#xdc;" horiz-adv-x="1328" d="M1194 1456V466Q1193 260 1065 129T716 -18L665 -20Q426 -20 284 109T140 464V1456H330V470Q330 312 417 225T665 137Q828 137 914 224T1001 469V1456H1194ZM346 1681Q346 1726 373 1756T455 1787T537 1757T565
+1681T537 1606T455 1576T374 1606T346 1681ZM776 1679Q776 1724 803 1755T885 1786T967 1755T995 1679T967 1604T885 1574T804 1604T776 1679Z" />
+<glyph unicode="&#xdd;" horiz-adv-x="1230" d="M613 725L993 1456H1211L709 543V0H517V543L15 1456H235L613 725ZM708 1844H932L664 1550H515L708 1844Z" />
+<glyph unicode="&#xde;" horiz-adv-x="1210" d="M352 1456V1163H631Q778 1163 888 1111T1057 961T1117 738Q1117 544 985 429T626 313H352V0H166V1456H352ZM352 1011V465H629Q771 465 851 540T931 736Q931 859 851 934T635 1011H352Z" />
+<glyph unicode="&#xdf;" horiz-adv-x="1218" d="M324 0H139V1111Q139 1319 242 1436T532 1554Q712 1554 810 1465T909 1216Q909 1091 845 990T781 819Q781 768 818 721T950 601T1087 461T1130 317Q1130 158 1029 69T745 -20Q664 -20 574 2T445 52L488 207Q537
+175 604 153T725 131Q832 131 888 178T945 307Q945 359 908 407T777 528T639 671T595 821Q595 910 664 1013T734 1201Q734 1295 682 1348T542 1402Q324 1402 324 1109V0Z" />
+<glyph unicode="&#xe0;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
+751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM687 1240H528L270 1534H493L687 1240Z" />
+<glyph unicode="&#xe1;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
+751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM672 1534H896L628 1240H479L672 1534Z" />
+<glyph unicode="&#xe2;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
+751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM884 1262V1252H731L581 1422L432 1252H279V1264L525 1536H637L884 1262Z" />
+<glyph unicode="&#xe3;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
+751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM936 1504Q936 1396 875 1329T721 1262Q680 1262 650 1272T572 1313T502 1350T452 1357Q411 1357 382 1326T353 1245L229 1252Q229 1359 289
+1429T443 1499Q478 1499 506 1489T582 1450T655 1412T712 1403Q755 1403 783 1437T812 1516L936 1504Z" />
+<glyph unicode="&#xe4;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
+751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM260 1371Q260 1416 287 1446T369 1477T451 1447T479 1371T451 1296T369 1266T288 1296T260 1371ZM690 1369Q690 1414 717 1445T799 1476T881
+1445T909 1369T881 1294T799 1264T718 1294T690 1369Z" />
+<glyph unicode="&#xe5;" horiz-adv-x="1114" d="M808 0Q792 32 782 114Q653 -20 474 -20Q314 -20 212 70T109 300Q109 469 237 562T599 656H779V741Q779 838 721 895T550 953Q451 953 384 903T317 782H131Q131 863 188 938T344 1058T561 1102Q748 1102 854 1009T964
+751V253Q964 104 1002 16V0H808ZM501 141Q588 141 666 186T779 303V525H634Q294 525 294 326Q294 239 352 190T501 141ZM796 1419Q796 1332 734 1274T581 1215Q489 1215 428 1274T366 1419T427 1566T581 1627T734 1566T796 1419ZM465 1419Q465 1372 498 1338T581
+1304Q629 1304 663 1337T697 1419T664 1502T581 1537Q531 1537 498 1502T465 1419Z" />
+<glyph unicode="&#xe6;" horiz-adv-x="1729" d="M1262 -20Q1001 -20 865 160Q800 74 687 27T433 -20Q266 -20 172 66T78 304Q78 461 191 548T526 635H749V720Q749 827 694 888T535 950Q430 950 360 895T290 759L106 778Q106 921 227 1011T535 1102Q650 1102 738
+1061T876 936Q939 1015 1026 1058T1218 1102Q1428 1102 1544 974T1660 612V497H932Q939 321 1026 226T1262 130Q1410 130 1531 206L1578 237L1642 101Q1484 -20 1262 -20ZM469 130Q541 130 620 167T749 258V495H521Q404 493 334 438T264 300Q264 223 317 177T469
+130ZM1218 950Q1103 950 1029 865T937 640H1475V671Q1475 803 1408 876T1218 950Z" />
+<glyph unicode="&#xe7;" horiz-adv-x="1072" d="M574 131Q673 131 747 191T829 341H1004Q999 248 940 164T783 30T574 -20Q353 -20 223 127T92 531V562Q92 720 150 843T316 1034T573 1102Q755 1102 875 993T1004 710H829Q821 815 750 882T573 950Q432 950 355
+849T277 555V520Q277 333 354 232T574 131ZM604 -9L592 -61Q745 -88 745 -234Q745 -331 665 -387T442 -444L435 -337Q514 -337 557 -311T601 -238Q601 -194 569 -173T439 -143L471 -9H604Z" />
+<glyph unicode="&#xe8;" horiz-adv-x="1085" d="M589 -20Q369 -20 231 124T93 511V545Q93 706 154 832T326 1030T566 1102Q777 1102 894 963T1011 565V488H278Q282 328 371 230T599 131Q697 131 765 171T884 277L997 189Q861 -20 589 -20ZM566 950Q454 950 378
+869T284 640H826V654Q818 795 750 872T566 950ZM671 1240H512L254 1534H477L671 1240Z" />
+<glyph unicode="&#xe9;" horiz-adv-x="1085" d="M589 -20Q369 -20 231 124T93 511V545Q93 706 154 832T326 1030T566 1102Q777 1102 894 963T1011 565V488H278Q282 328 371 230T599 131Q697 131 765 171T884 277L997 189Q861 -20 589 -20ZM566 950Q454 950 378
+869T284 640H826V654Q818 795 750 872T566 950ZM656 1534H880L612 1240H463L656 1534Z" />
+<glyph unicode="&#xea;" horiz-adv-x="1085" d="M589 -20Q369 -20 231 124T93 511V545Q93 706 154 832T326 1030T566 1102Q777 1102 894 963T1011 565V488H278Q282 328 371 230T599 131Q697 131 765 171T884 277L997 189Q861 -20 589 -20ZM566 950Q454 950 378
+869T284 640H826V654Q818 795 750 872T566 950ZM868 1262V1252H715L565 1422L416 1252H263V1264L509 1536H621L868 1262Z" />
+<glyph unicode="&#xeb;" horiz-adv-x="1085" d="M589 -20Q369 -20 231 124T93 511V545Q93 706 154 832T326 1030T566 1102Q777 1102 894 963T1011 565V488H278Q282 328 371 230T599 131Q697 131 765 171T884 277L997 189Q861 -20 589 -20ZM566 950Q454 950 378
+869T284 640H826V654Q818 795 750 872T566 950ZM244 1371Q244 1416 271 1446T353 1477T435 1447T463 1371T435 1296T353 1266T272 1296T244 1371ZM674 1369Q674 1414 701 1445T783 1476T865 1445T893 1369T865 1294T783 1264T702 1294T674 1369Z" />
+<glyph unicode="&#xec;" horiz-adv-x="506" d="M341 0H155V1082H341V0ZM615 1495H456L198 1789H421L615 1495Z" />
+<glyph unicode="&#xed;" horiz-adv-x="506" d="M341 0H155V1082H341V0ZM343 1789H567L299 1495H150L343 1789Z" />
+<glyph unicode="&#xee;" horiz-adv-x="506" d="M341 0H155V1082H341V0ZM556 1261V1251H403L253 1421L104 1251H-49V1263L197 1535H309L556 1261Z" />
+<glyph unicode="&#xef;" horiz-adv-x="506" d="M341 0H155V1082H341V0ZM-68 1370Q-68 1415 -41 1445T41 1476T123 1446T151 1370T123 1295T41 1265T-40 1295T-68 1370ZM362 1368Q362 1413 389 1444T471 1475T553 1444T581 1368T553 1293T471 1263T390 1293T362 1368Z" />
+<glyph unicode="&#xf0;" horiz-adv-x="1200" d="M820 1301Q1069 1037 1069 628V535Q1069 377 1011 251T844 52T602 -20Q467 -20 357 44T187 221T126 467Q126 614 182 730T341 912T574 977Q737 977 858 863Q810 1058 669 1199L451 1051L378 1150L570 1281Q438 1372
+255 1421L312 1580Q551 1526 726 1387L915 1516L988 1416L820 1301ZM884 635L882 691Q849 752 780 788T618 825Q473 825 392 730T311 467Q311 327 394 229T606 131Q731 131 807 244T884 541V635Z" />
+<glyph unicode="&#xf1;" horiz-adv-x="1130" d="M315 1082L321 946Q445 1102 645 1102Q988 1102 991 715V0H806V716Q805 833 753 889T589 945Q499 945 431 897T325 771V0H140V1082H315ZM927 1504Q927 1396 866 1329T712 1262Q671 1262 641 1272T563 1313T493 1350T443
+1357Q402 1357 373 1326T344 1245L220 1252Q220 1359 280 1429T434 1499Q469 1499 497 1489T573 1450T646 1412T703 1403Q746 1403 774 1437T803 1516L927 1504Z" />
+<glyph unicode="&#xf2;" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729
+807 839T582 950Q445 950 361 841T277 529ZM681 1240H522L264 1534H487L681 1240Z" />
+<glyph unicode="&#xf3;" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729
+807 839T582 950Q445 950 361 841T277 529ZM666 1534H890L622 1240H473L666 1534Z" />
+<glyph unicode="&#xf4;" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729
+807 839T582 950Q445 950 361 841T277 529ZM878 1262V1252H725L575 1422L426 1252H273V1264L519 1536H631L878 1262Z" />
+<glyph unicode="&#xf5;" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729
+807 839T582 950Q445 950 361 841T277 529ZM930 1504Q930 1396 869 1329T715 1262Q674 1262 644 1272T566 1313T496 1350T446 1357Q405 1357 376 1326T347 1245L223 1252Q223 1359 283 1429T437 1499Q472 1499 500 1489T576 1450T649 1412T706 1403Q749 1403 777
+1437T806 1516L930 1504Z" />
+<glyph unicode="&#xf6;" horiz-adv-x="1168" d="M91 551Q91 710 153 837T327 1033T582 1102Q803 1102 939 949T1076 542V529Q1076 371 1016 246T843 50T584 -20Q364 -20 228 133T91 538V551ZM277 529Q277 349 360 240T584 131Q725 131 808 241T891 551Q891 729
+807 839T582 950Q445 950 361 841T277 529ZM254 1371Q254 1416 281 1446T363 1477T445 1447T473 1371T445 1296T363 1266T282 1296T254 1371ZM684 1369Q684 1414 711 1445T793 1476T875 1445T903 1369T875 1294T793 1264T712 1294T684 1369Z" />
+<glyph unicode="&#xf7;" horiz-adv-x="1169" d="M1069 600H71V784H1069V600ZM461 1098Q461 1146 489 1178T575 1210T661 1178T691 1098Q691 1051 662 1020T575 989T490 1020T461 1098ZM461 281Q461 329 489 361T575 393T661 361T691 281Q691 235 662 204T575 172T490
+203T461 281Z" />
+<glyph unicode="&#xf8;" horiz-adv-x="1160" d="M91 551Q91 710 152 836T326 1032T582 1102Q692 1102 786 1060L859 1208H983L881 1003Q1076 849 1076 529Q1076 371 1014 244T840 49T584 -20Q480 -20 394 15L320 -134H196L296 69Q91 218 91 551ZM276 529Q276 335
+373 224L716 918Q654 950 582 950Q444 950 360 841T276 529ZM890 551Q890 733 803 844L463 156Q518 131 584 131Q723 131 806 240T890 535V551Z" />
+<glyph unicode="&#xf9;" horiz-adv-x="1129" d="M808 107Q700 -20 491 -20Q318 -20 228 80T136 378V1082H321V383Q321 137 521 137Q733 137 803 295V1082H988V0H812L808 107ZM673 1240H514L256 1534H479L673 1240Z" />
+<glyph unicode="&#xfa;" horiz-adv-x="1129" d="M808 107Q700 -20 491 -20Q318 -20 228 80T136 378V1082H321V383Q321 137 521 137Q733 137 803 295V1082H988V0H812L808 107ZM658 1534H882L614 1240H465L658 1534Z" />
+<glyph unicode="&#xfb;" horiz-adv-x="1129" d="M808 107Q700 -20 491 -20Q318 -20 228 80T136 378V1082H321V383Q321 137 521 137Q733 137 803 295V1082H988V0H812L808 107ZM870 1262V1252H717L567 1422L418 1252H265V1264L511 1536H623L870 1262Z" />
+<glyph unicode="&#xfc;" horiz-adv-x="1129" d="M808 107Q700 -20 491 -20Q318 -20 228 80T136 378V1082H321V383Q321 137 521 137Q733 137 803 295V1082H988V0H812L808 107ZM246 1371Q246 1416 273 1446T355 1477T437 1447T465 1371T437 1296T355 1266T274 1296T246
+1371ZM676 1369Q676 1414 703 1445T785 1476T867 1445T895 1369T867 1294T785 1264T704 1294T676 1369Z" />
+<glyph unicode="&#xfd;" horiz-adv-x="969" d="M494 271L746 1082H944L509 -167Q408 -437 188 -437L153 -434L84 -421V-271L134 -275Q228 -275 280 -237T367 -98L408 12L22 1082H224L494 271ZM599 1534H823L555 1240H406L599 1534Z" />
+<glyph unicode="&#xfe;" horiz-adv-x="1180" d="M1063 529Q1063 282 950 131T644 -20Q447 -20 334 105V-416H149V1536H334V970Q447 1102 641 1102Q836 1102 949 955T1063 546V529ZM878 550Q878 733 800 839T586 945Q418 945 334 796V279Q417 131 588 131Q721 131
+799 236T878 550Z" />
+<glyph unicode="&#xff;" horiz-adv-x="969" d="M494 271L746 1082H944L509 -167Q408 -437 188 -437L153 -434L84 -421V-271L134 -275Q228 -275 280 -237T367 -98L408 12L22 1082H224L494 271ZM187 1371Q187 1416 214 1446T296 1477T378 1447T406 1371T378 1296T296
+1266T215 1296T187 1371ZM617 1369Q617 1414 644 1445T726 1476T808 1445T836 1369T808 1294T726 1264T645 1294T617 1369Z" />
+<glyph unicode="&#x2013;" horiz-adv-x="1344" d="M1421 651H419V802H1421V651Z" />
+<glyph unicode="&#x2014;" horiz-adv-x="1599" d="M1737 651H401V802H1737V651Z" />
+<glyph unicode="&#x2018;" horiz-adv-x="409" d="M270 1555L376 1483Q283 1356 280 1209V1073H96V1189Q96 1291 144 1391T270 1555Z" />
+<glyph unicode="&#x2019;" horiz-adv-x="409" d="M153 1046L48 1118Q141 1248 144 1392V1536H327V1406Q326 1306 278 1207T153 1046Z" />
+<glyph unicode="&#x201a;" horiz-adv-x="407" d="M141 -283L36 -210Q127 -83 130 63V181H315V81Q315 -20 266 -121T141 -283Z" />
+<glyph unicode="&#x201c;" horiz-adv-x="724" d="M278 1555L384 1483Q291 1356 288 1209V1073H104V1189Q104 1291 152 1391T278 1555ZM593 1555L699 1483Q606 1356 603 1209V1073H419V1189Q419 1291 467 1391T593 1555Z" />
+<glyph unicode="&#x201d;" horiz-adv-x="731" d="M165 1046L60 1118Q153 1248 156 1392V1536H339V1406Q338 1306 290 1207T165 1046ZM472 1046L367 1118Q460 1248 463 1392V1536H646V1406Q645 1306 597 1207T472 1046Z" />
+<glyph unicode="&#x201e;" horiz-adv-x="705" d="M141 -301L36 -229Q127 -92 130 61V246H315V82Q315 -26 266 -131T141 -301ZM437 -301L332 -229Q423 -92 426 61V246H612V82Q612 -25 564 -129T437 -301Z" />
+<glyph unicode="&#x2022;" horiz-adv-x="690" d="M138 772Q138 859 193 915T341 971Q432 971 489 917T546 769V732Q546 645 491 590T342 535Q249 535 194 590T138 734V772Z" />
+<glyph unicode="&#x2039;" horiz-adv-x="614" d="M286 550L544 153H403L108 541V560L403 949H544L286 550Z" />
+<glyph unicode="&#x203a;" horiz-adv-x="614" d="M231 949L526 560V541L231 152H89L347 550L89 949H231Z" />
+</font>
+</defs>
+</svg>
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/static/roboto-v15-latin-regular.7e367be02cd17a96d513.woff2 b/asterixdb/asterix-app/src/main/resources/dashboard/static/roboto-v15-latin-regular.7e367be02cd17a96d513.woff2
new file mode 100644
index 0000000..120796b
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/static/roboto-v15-latin-regular.7e367be02cd17a96d513.woff2
Binary files differ
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/static/roboto-v15-latin-regular.9f916e330c478bbfa2a0.eot b/asterixdb/asterix-app/src/main/resources/dashboard/static/roboto-v15-latin-regular.9f916e330c478bbfa2a0.eot
new file mode 100644
index 0000000..d26bc8f
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/static/roboto-v15-latin-regular.9f916e330c478bbfa2a0.eot
Binary files differ
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/static/scripts.da68998bdd77aff4e764.bundle.js b/asterixdb/asterix-app/src/main/resources/dashboard/static/scripts.da68998bdd77aff4e764.bundle.js
new file mode 100644
index 0000000..73c64a5
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/static/scripts.da68998bdd77aff4e764.bundle.js
@@ -0,0 +1,6 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CodeMirror=t()}(this,function(){"use strict";function e(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}function t(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function r(e,r){return t(e).appendChild(r)}function n(e,t,r,n){var i=document.createElement(e);if(r&&(i.className=r),n&&(i.style.cssText=n),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function i(e,t,r,i){var o=n(e,t,r,i);return o.setAttribute("role","presentation"),o}function o(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function l(){var e;try{e=document.activeElement}catch(t){e=document.body||null}for(;e&&e.shadowRoot&&e.shadowRoot.activeElement;)e=e.shadowRoot.activeElement;return e}function s(t,r){var n=t.className;e(r).test(n)||(t.className+=(n?" ":"")+r)}function a(t,r){for(var n=t.split(" "),i=0;i<n.length;i++)n[i]&&!e(n[i]).test(r)&&(r+=" "+n[i]);return r}function u(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function c(e,t,r){t||(t={});for(var n in e)!e.hasOwnProperty(n)||!1===r&&t.hasOwnProperty(n)||(t[n]=e[n]);return t}function f(e,t,r,n,i){null==t&&-1==(t=e.search(/[^\s\u00a0]/))&&(t=e.length);for(var o=n||0,l=i||0;;){var s=e.indexOf("\t",o);if(s<0||s>=t)return l+(t-o);l+=s-o,l+=r-l%r,o=s+1}}function h(e,t){for(var r=0;r<e.length;++r)if(e[r]==t)return r;return-1}function d(e,t,r){for(var n=0,i=0;;){var o=e.indexOf("\t",n);-1==o&&(o=e.length);var l=o-n;if(o==e.length||i+l>=t)return n+Math.min(l,t-i);if(i+=o-n,i+=r-i%r,n=o+1,i>=t)return n}}function p(e){for(;Yl.length<=e;)Yl.push(g(Yl)+" ");return Yl[e]}function g(e){return e[e.length-1]}function v(e,t){for(var r=[],n=0;n<e.length;n++)r[n]=t(e[n],n);return r}function m(e,t,r){for(var n=0,i=r(t);n<e.length&&r(e[n])<=i;)n++;e.splice(n,0,t)}function y(){}function b(e,t){var r;return Object.create?r=Object.create(e):(y.prototype=e,r=new y),t&&c(t,r),r}function w(e){return/\w/.test(e)||e>""&&(e.toUpperCase()!=e.toLowerCase()||_l.test(e))}function x(e,t){return t?!!(t.source.indexOf("\\w")>-1&&w(e))||t.test(e):w(e)}function C(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}function S(e){return e.charCodeAt(0)>=768&&ql.test(e)}function L(e,t,r){for(;(r<0?t>0:t<e.length)&&S(e.charAt(t));)t+=r;return t}function k(e,t,r){for(var n=t>r?-1:1;;){if(t==r)return t;var i=(t+r)/2,o=n<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:r;e(o)?r=o:t=o+n}}function T(e,t,r){var o=this;this.input=r,o.scrollbarFiller=n("div",null,"CodeMirror-scrollbar-filler"),o.scrollbarFiller.setAttribute("cm-not-content","true"),o.gutterFiller=n("div",null,"CodeMirror-gutter-filler"),o.gutterFiller.setAttribute("cm-not-content","true"),o.lineDiv=i("div",null,"CodeMirror-code"),o.selectionDiv=n("div",null,null,"position: relative; z-index: 1"),o.cursorDiv=n("div",null,"CodeMirror-cursors"),o.measure=n("div",null,"CodeMirror-measure"),o.lineMeasure=n("div",null,"CodeMirror-measure"),o.lineSpace=i("div",[o.measure,o.lineMeasure,o.selectionDiv,o.cursorDiv,o.lineDiv],null,"position: relative; outline: none");var l=i("div",[o.lineSpace],"CodeMirror-lines");o.mover=n("div",[l],null,"position: relative"),o.sizer=n("div",[o.mover],"CodeMirror-sizer"),o.sizerWidth=null,o.heightForcer=n("div",null,null,"position: absolute; height: "+Ul+"px; width: 1px;"),o.gutters=n("div",null,"CodeMirror-gutters"),o.lineGutter=null,o.scroller=n("div",[o.sizer,o.heightForcer,o.gutters],"CodeMirror-scroll"),o.scroller.setAttribute("tabIndex","-1"),o.wrapper=n("div",[o.scrollbarFiller,o.gutterFiller,o.scroller],"CodeMirror"),yl&&bl<8&&(o.gutters.style.zIndex=-1,o.scroller.style.paddingRight=0),wl||pl&&Ol||(o.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(o.wrapper):e(o.wrapper)),o.viewFrom=o.viewTo=t.first,o.reportedViewFrom=o.reportedViewTo=t.first,o.view=[],o.renderedView=null,o.externalMeasured=null,o.viewOffset=0,o.lastWrapHeight=o.lastWrapWidth=0,o.updateLineNumbers=null,o.nativeBarWidth=o.barHeight=o.barWidth=0,o.scrollbarsClipped=!1,o.lineNumWidth=o.lineNumInnerWidth=o.lineNumChars=null,o.alignWidgets=!1,o.cachedCharWidth=o.cachedTextHeight=o.cachedPaddingH=null,o.maxLine=null,o.maxLineLength=0,o.maxLineChanged=!1,o.wheelDX=o.wheelDY=o.wheelStartX=o.wheelStartY=null,o.shift=!1,o.selForContextMenu=null,o.activeTouch=null,r.init(o)}function M(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var r=e;!r.lines;)for(var n=0;;++n){var i=r.children[n],o=i.chunkSize();if(t<o){r=i;break}t-=o}return r.lines[t]}function N(e,t,r){var n=[],i=t.line;return e.iter(t.line,r.line+1,function(e){var o=e.text;i==r.line&&(o=o.slice(0,r.ch)),i==t.line&&(o=o.slice(t.ch)),n.push(o),++i}),n}function O(e,t,r){var n=[];return e.iter(t,r,function(e){n.push(e.text)}),n}function A(e,t){var r=t-e.height;if(r)for(var n=e;n;n=n.parent)n.height+=r}function W(e){if(null==e.parent)return null;for(var t=e.parent,r=h(t.lines,e),n=t.parent;n;t=n,n=n.parent)for(var i=0;n.children[i]!=t;++i)r+=n.children[i].chunkSize();return r+t.first}function D(e,t){var r=e.first;e:do{for(var n=0;n<e.children.length;++n){var i=e.children[n],o=i.height;if(t<o){e=i;continue e}t-=o,r+=i.chunkSize()}return r}while(!e.lines);for(var l=0;l<e.lines.length;++l){var s=e.lines[l],a=s.height;if(t<a)break;t-=a}return r+l}function H(e,t){return t>=e.first&&t<e.first+e.size}function F(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function P(e,t,r){if(void 0===r&&(r=null),!(this instanceof P))return new P(e,t,r);this.line=e,this.ch=t,this.sticky=r}function E(e,t){return e.line-t.line||e.ch-t.ch}function z(e,t){return e.sticky==t.sticky&&0==E(e,t)}function I(e){return P(e.line,e.ch)}function R(e,t){return E(e,t)<0?t:e}function B(e,t){return E(e,t)<0?e:t}function G(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function U(e,t){if(t.line<e.first)return P(e.first,0);var r=e.first+e.size-1;return t.line>r?P(r,M(e,r).text.length):V(t,M(e,t.line).text.length)}function V(e,t){var r=e.ch;return null==r||r>t?P(e.line,t):r<0?P(e.line,0):e}function K(e,t){for(var r=[],n=0;n<t.length;n++)r[n]=U(e,t[n]);return r}function j(){$l=!0}function X(){Zl=!0}function Y(e,t,r){this.marker=e,this.from=t,this.to=r}function _(e,t){if(e)for(var r=0;r<e.length;++r){var n=e[r];if(n.marker==t)return n}}function q(e,t){for(var r,n=0;n<e.length;++n)e[n]!=t&&(r||(r=[])).push(e[n]);return r}function $(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}function Z(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],l=o.marker,s=null==o.from||(l.inclusiveLeft?o.from<=t:o.from<t);if(s||o.from==t&&"bookmark"==l.type&&(!r||!o.marker.insertLeft)){var a=null==o.to||(l.inclusiveRight?o.to>=t:o.to>t);(n||(n=[])).push(new Y(l,o.from,a?null:o.to))}}return n}function Q(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],l=o.marker,s=null==o.to||(l.inclusiveRight?o.to>=t:o.to>t);if(s||o.from==t&&"bookmark"==l.type&&(!r||o.marker.insertLeft)){var a=null==o.from||(l.inclusiveLeft?o.from<=t:o.from<t);(n||(n=[])).push(new Y(l,a?null:o.from-t,null==o.to?null:o.to-t))}}return n}function J(e,t){if(t.full)return null;var r=H(e,t.from.line)&&M(e,t.from.line).markedSpans,n=H(e,t.to.line)&&M(e,t.to.line).markedSpans;if(!r&&!n)return null;var i=t.from.ch,o=t.to.ch,l=0==E(t.from,t.to),s=Z(r,i,l),a=Q(n,o,l),u=1==t.text.length,c=g(t.text).length+(u?i:0);if(s)for(var f=0;f<s.length;++f){var h=s[f];if(null==h.to){var d=_(a,h.marker);d?u&&(h.to=null==d.to?null:d.to+c):h.to=i}}if(a)for(var p=0;p<a.length;++p){var v=a[p];if(null!=v.to&&(v.to+=c),null==v.from){var m=_(s,v.marker);m||(v.from=c,u&&(s||(s=[])).push(v))}else v.from+=c,u&&(s||(s=[])).push(v)}s&&(s=ee(s)),a&&a!=s&&(a=ee(a));var y=[s];if(!u){var b,w=t.text.length-2;if(w>0&&s)for(var x=0;x<s.length;++x)null==s[x].to&&(b||(b=[])).push(new Y(s[x].marker,null,null));for(var C=0;C<w;++C)y.push(b);y.push(a)}return y}function ee(e){for(var t=0;t<e.length;++t){var r=e[t];null!=r.from&&r.from==r.to&&!1!==r.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function te(e,t,r){var n=null;if(e.iter(t.line,r.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var r=e.markedSpans[t].marker;!r.readOnly||n&&-1!=h(n,r)||(n||(n=[])).push(r)}}),!n)return null;for(var i=[{from:t,to:r}],o=0;o<n.length;++o)for(var l=n[o],s=l.find(0),a=0;a<i.length;++a){var u=i[a];if(!(E(u.to,s.from)<0||E(u.from,s.to)>0)){var c=[a,1],f=E(u.from,s.from),d=E(u.to,s.to);(f<0||!l.inclusiveLeft&&!f)&&c.push({from:u.from,to:s.from}),(d>0||!l.inclusiveRight&&!d)&&c.push({from:s.to,to:u.to}),i.splice.apply(i,c),a+=c.length-3}}return i}function re(e){var t=e.markedSpans;if(t){for(var r=0;r<t.length;++r)t[r].marker.detachLine(e);e.markedSpans=null}}function ne(e,t){if(t){for(var r=0;r<t.length;++r)t[r].marker.attachLine(e);e.markedSpans=t}}function ie(e){return e.inclusiveLeft?-1:0}function oe(e){return e.inclusiveRight?1:0}function le(e,t){var r=e.lines.length-t.lines.length;if(0!=r)return r;var n=e.find(),i=t.find(),o=E(n.from,i.from)||ie(e)-ie(t);if(o)return-o;var l=E(n.to,i.to)||oe(e)-oe(t);return l||t.id-e.id}function se(e,t){var r,n=Zl&&e.markedSpans;if(n)for(var i=void 0,o=0;o<n.length;++o)i=n[o],i.marker.collapsed&&null==(t?i.from:i.to)&&(!r||le(r,i.marker)<0)&&(r=i.marker);return r}function ae(e){return se(e,!0)}function ue(e){return se(e,!1)}function ce(e,t,r,n,i){var o=M(e,t),l=Zl&&o.markedSpans;if(l)for(var s=0;s<l.length;++s){var a=l[s];if(a.marker.collapsed){var u=a.marker.find(0),c=E(u.from,r)||ie(a.marker)-ie(i),f=E(u.to,n)||oe(a.marker)-oe(i);if(!(c>=0&&f<=0||c<=0&&f>=0)&&(c<=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?E(u.to,r)>=0:E(u.to,r)>0)||c>=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?E(u.from,n)<=0:E(u.from,n)<0)))return!0}}}function fe(e){for(var t;t=ae(e);)e=t.find(-1,!0).line;return e}function he(e){for(var t;t=ue(e);)e=t.find(1,!0).line;return e}function de(e){for(var t,r;t=ue(e);)e=t.find(1,!0).line,(r||(r=[])).push(e);return r}function pe(e,t){var r=M(e,t),n=fe(r);return r==n?t:W(n)}function ge(e,t){if(t>e.lastLine())return t;var r,n=M(e,t);if(!ve(e,n))return t;for(;r=ue(n);)n=r.find(1,!0).line;return W(n)+1}function ve(e,t){var r=Zl&&t.markedSpans;if(r)for(var n=void 0,i=0;i<r.length;++i)if(n=r[i],n.marker.collapsed){if(null==n.from)return!0;if(!n.marker.widgetNode&&0==n.from&&n.marker.inclusiveLeft&&me(e,t,n))return!0}}function me(e,t,r){if(null==r.to){var n=r.marker.find(1,!0);return me(e,n.line,_(n.line.markedSpans,r.marker))}if(r.marker.inclusiveRight&&r.to==t.text.length)return!0;for(var i=void 0,o=0;o<t.markedSpans.length;++o)if(i=t.markedSpans[o],i.marker.collapsed&&!i.marker.widgetNode&&i.from==r.to&&(null==i.to||i.to!=r.from)&&(i.marker.inclusiveLeft||r.marker.inclusiveRight)&&me(e,t,i))return!0}function ye(e){e=fe(e);for(var t=0,r=e.parent,n=0;n<r.lines.length;++n){var i=r.lines[n];if(i==e)break;t+=i.height}for(var o=r.parent;o;r=o,o=r.parent)for(var l=0;l<o.children.length;++l){var s=o.children[l];if(s==r)break;t+=s.height}return t}function be(e){if(0==e.height)return 0;for(var t,r=e.text.length,n=e;t=ae(n);){var i=t.find(0,!0);n=i.from.line,r+=i.from.ch-i.to.ch}for(n=e;t=ue(n);){var o=t.find(0,!0);r-=n.text.length-o.from.ch,n=o.to.line,r+=n.text.length-o.to.ch}return r}function we(e){var t=e.display,r=e.doc;t.maxLine=M(r,r.first),t.maxLineLength=be(t.maxLine),t.maxLineChanged=!0,r.iter(function(e){var r=be(e);r>t.maxLineLength&&(t.maxLineLength=r,t.maxLine=e)})}function xe(e,t,r,n){if(!e)return n(t,r,"ltr",0);for(var i=!1,o=0;o<e.length;++o){var l=e[o];(l.from<r&&l.to>t||t==r&&l.to==t)&&(n(Math.max(l.from,t),Math.min(l.to,r),1==l.level?"rtl":"ltr",o),i=!0)}i||n(t,r,"ltr")}function Ce(e,t,r){var n;Ql=null;for(var i=0;i<e.length;++i){var o=e[i];if(o.from<t&&o.to>t)return i;o.to==t&&(o.from!=o.to&&"before"==r?n=i:Ql=i),o.from==t&&(o.from!=o.to&&"before"!=r?n=i:Ql=i)}return null!=n?n:Ql}function Se(e,t){var r=e.order;return null==r&&(r=e.order=Jl(e.text,t)),r}function Le(e,t){return e._handlers&&e._handlers[t]||es}function ke(e,t,r){if(e.removeEventListener)e.removeEventListener(t,r,!1);else if(e.detachEvent)e.detachEvent("on"+t,r);else{var n=e._handlers,i=n&&n[t];if(i){var o=h(i,r);o>-1&&(n[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function Te(e,t){var r=Le(e,t);if(r.length)for(var n=Array.prototype.slice.call(arguments,2),i=0;i<r.length;++i)r[i].apply(null,n)}function Me(e,t,r){return"string"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),Te(e,r||t.type,e,t),He(t)||t.codemirrorIgnore}function Ne(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var r=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),n=0;n<t.length;++n)-1==h(r,t[n])&&r.push(t[n])}function Oe(e,t){return Le(e,t).length>0}function Ae(e){e.prototype.on=function(e,t){ts(this,e,t)},e.prototype.off=function(e,t){ke(this,e,t)}}function We(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function De(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function He(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Fe(e){We(e),De(e)}function Pe(e){return e.target||e.srcElement}function Ee(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),Al&&e.ctrlKey&&1==t&&(t=3),t}function ze(e){if(null==Bl){var t=n("span","​");r(e,n("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Bl=t.offsetWidth<=1&&t.offsetHeight>2&&!(yl&&bl<8))}var i=Bl?n("span","​"):n("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return i.setAttribute("cm-text",""),i}function Ie(e){if(null!=Gl)return Gl;var n=r(e,document.createTextNode("AخA")),i=Fl(n,0,1).getBoundingClientRect(),o=Fl(n,1,2).getBoundingClientRect();return t(e),!(!i||i.left==i.right)&&(Gl=o.right-i.right<3)}function Re(e){if(null!=ls)return ls;var t=r(e,n("span","x")),i=t.getBoundingClientRect(),o=Fl(t,0,1).getBoundingClientRect();return ls=Math.abs(i.left-o.left)>1}function Be(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),ss[e]=t}function Ge(e,t){as[e]=t}function Ue(e){if("string"==typeof e&&as.hasOwnProperty(e))e=as[e];else if(e&&"string"==typeof e.name&&as.hasOwnProperty(e.name)){var t=as[e.name];"string"==typeof t&&(t={name:t}),e=b(t,e),e.name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Ue("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Ue("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function Ve(e,t){t=Ue(t);var r=ss[t.name];if(!r)return Ve(e,"text/plain");var n=r(e,t);if(us.hasOwnProperty(t.name)){var i=us[t.name];for(var o in i)i.hasOwnProperty(o)&&(n.hasOwnProperty(o)&&(n["_"+o]=n[o]),n[o]=i[o])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)n[l]=t.modeProps[l];return n}function Ke(e,t){c(t,us.hasOwnProperty(e)?us[e]:us[e]={})}function je(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var r={};for(var n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function Xe(e,t){for(var r;e.innerMode&&(r=e.innerMode(t))&&r.mode!=e;)t=r.state,e=r.mode;return r||{mode:e,state:t}}function Ye(e,t,r){return!e.startState||e.startState(t,r)}function _e(e,t,r,n){var i=[e.state.modeGen],o={};rt(e,t.text,e.doc.mode,r,function(e,t){return i.push(e,t)},o,n);for(var l=r.state,s=0;s<e.state.overlays.length;++s)!function(n){r.baseTokens=i;var s=e.state.overlays[n],a=1,u=0;r.state=!0,rt(e,t.text,s.mode,r,function(e,t){for(var r=a;u<e;){var n=i[a];n>e&&i.splice(a,1,e,i[a+1],n),a+=2,u=Math.min(e,n)}if(t)if(s.opaque)i.splice(r,a-r,e,"overlay "+t),a=r+2;else for(;r<a;r+=2){var o=i[r+1];i[r+1]=(o?o+" ":"")+"overlay "+t}},o),r.state=l,r.baseTokens=null,r.baseTokenPos=1}(s);return{styles:i,classes:o.bgClass||o.textClass?o:null}}function qe(e,t,r){if(!t.styles||t.styles[0]!=e.state.modeGen){var n=$e(e,W(t)),i=t.text.length>e.options.maxHighlightLength&&je(e.doc.mode,n.state),o=_e(e,t,n);i&&(n.state=i),t.stateAfter=n.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function $e(e,t,r){var n=e.doc,i=e.display;if(!n.mode.startState)return new hs(n,!0,t);var o=nt(e,t,r),l=o>n.first&&M(n,o-1).stateAfter,s=l?hs.fromSaved(n,l,o):new hs(n,Ye(n.mode),o);return n.iter(o,t,function(r){Ze(e,r.text,s);var n=s.line;r.stateAfter=n==t-1||n%5==0||n>=i.viewFrom&&n<i.viewTo?s.save():null,s.nextLine()}),r&&(n.modeFrontier=s.line),s}function Ze(e,t,r,n){var i=e.doc.mode,o=new cs(t,e.options.tabSize,r);for(o.start=o.pos=n||0,""==t&&Qe(i,r.state);!o.eol();)Je(i,o,r.state),o.start=o.pos}function Qe(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var r=Xe(e,t);return r.mode.blankLine?r.mode.blankLine(r.state):void 0}}function Je(e,t,r,n){for(var i=0;i<10;i++){n&&(n[0]=Xe(e,r).mode);var o=e.token(t,r);if(t.pos>t.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}function et(e,t,r,n){var i,o=e.doc,l=o.mode;t=U(o,t);var s,a=M(o,t.line),u=$e(e,t.line,r),c=new cs(a.text,e.options.tabSize,u);for(n&&(s=[]);(n||c.pos<t.ch)&&!c.eol();)c.start=c.pos,i=Je(l,c,u.state),n&&s.push(new ds(c,i,je(o.mode,u.state)));return n?s:new ds(c,i,u.state)}function tt(e,t){if(e)for(;;){var r=e.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!r)break;e=e.slice(0,r.index)+e.slice(r.index+r[0].length);var n=r[1]?"bgClass":"textClass";null==t[n]?t[n]=r[2]:new RegExp("(?:^|s)"+r[2]+"(?:$|s)").test(t[n])||(t[n]+=" "+r[2])}return e}function rt(e,t,r,n,i,o,l){var s=r.flattenSpans;null==s&&(s=e.options.flattenSpans);var a,u=0,c=null,f=new cs(t,e.options.tabSize,n),h=e.options.addModeClass&&[null];for(""==t&&tt(Qe(r,n.state),o);!f.eol();){if(f.pos>e.options.maxHighlightLength?(s=!1,l&&Ze(e,t,n,f.pos),f.pos=t.length,a=null):a=tt(Je(r,f,n.state,h),o),h){var d=h[0].name;d&&(a="m-"+(a?d+" "+a:d))}if(!s||c!=a){for(;u<f.start;)u=Math.min(f.start,u+5e3),i(u,c);c=a}f.start=f.pos}for(;u<f.pos;){var p=Math.min(f.pos,u+5e3);i(p,c),u=p}}function nt(e,t,r){for(var n,i,o=e.doc,l=r?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>l;--s){if(s<=o.first)return o.first;var a=M(o,s-1),u=a.stateAfter;if(u&&(!r||s+(u instanceof fs?u.lookAhead:0)<=o.modeFrontier))return s;var c=f(a.text,null,e.options.tabSize);(null==i||n>c)&&(i=s-1,n=c)}return i}function it(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontier<t-10)){for(var r=e.first,n=t-1;n>r;n--){var i=M(e,n).stateAfter;if(i&&(!(i instanceof fs)||n+i.lookAhead<t)){r=n+1;break}}e.highlightFrontier=Math.min(e.highlightFrontier,r)}}function ot(e,t,r,n){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),re(e),ne(e,r);var i=n?n(e):1;i!=e.height&&A(e,i)}function lt(e){e.parent=null,re(e)}function st(e,t){if(!e||/^\s*$/.test(e))return null;var r=t.addModeClass?ms:vs;return r[e]||(r[e]=e.replace(/\S+/g,"cm-$&"))}function at(e,t){var r=i("span",null,null,wl?"padding-right: .1px":null),n={pre:i("pre",[r],"CodeMirror-line"),content:r,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:(yl||wl)&&e.getOption("lineWrapping")};t.measure={};for(var o=0;o<=(t.rest?t.rest.length:0);o++){var l=o?t.rest[o-1]:t.line,s=void 0;n.pos=0,n.addToken=ct,Ie(e.display.measure)&&(s=Se(l,e.doc.direction))&&(n.addToken=ht(n.addToken,s)),n.map=[];pt(l,n,qe(e,l,t!=e.display.externalMeasured&&W(l))),l.styleClasses&&(l.styleClasses.bgClass&&(n.bgClass=a(l.styleClasses.bgClass,n.bgClass||"")),l.styleClasses.textClass&&(n.textClass=a(l.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(ze(e.display.measure))),0==o?(t.measure.map=n.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(n.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(wl){var u=n.content.lastChild;(/\bcm-tab\b/.test(u.className)||u.querySelector&&u.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return Te(e,"renderLine",e,t.line,n.pre),n.pre.className&&(n.textClass=a(n.pre.className,n.textClass||"")),n}function ut(e){var t=n("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function ct(e,t,r,i,o,l,s){if(t){var a,u=e.splitSpaces?ft(t,e.trailingSpace):t,c=e.cm.state.specialChars,f=!1;if(c.test(t)){a=document.createDocumentFragment();for(var h=0;;){c.lastIndex=h;var d=c.exec(t),g=d?d.index-h:t.length-h;if(g){var v=document.createTextNode(u.slice(h,h+g));yl&&bl<9?a.appendChild(n("span",[v])):a.appendChild(v),e.map.push(e.pos,e.pos+g,v),e.col+=g,e.pos+=g}if(!d)break;h+=g+1;var m=void 0;if("\t"==d[0]){var y=e.cm.options.tabSize,b=y-e.col%y;m=a.appendChild(n("span",p(b),"cm-tab")),m.setAttribute("role","presentation"),m.setAttribute("cm-text","\t"),e.col+=b}else"\r"==d[0]||"\n"==d[0]?(m=a.appendChild(n("span","\r"==d[0]?"␍":"␤","cm-invalidchar")),m.setAttribute("cm-text",d[0]),e.col+=1):(m=e.cm.options.specialCharPlaceholder(d[0]),m.setAttribute("cm-text",d[0]),yl&&bl<9?a.appendChild(n("span",[m])):a.appendChild(m),e.col+=1);e.map.push(e.pos,e.pos+1,m),e.pos++}}else e.col+=t.length,a=document.createTextNode(u),e.map.push(e.pos,e.pos+t.length,a),yl&&bl<9&&(f=!0),e.pos+=t.length;if(e.trailingSpace=32==u.charCodeAt(t.length-1),r||i||o||f||s){var w=r||"";i&&(w+=i),o&&(w+=o);var x=n("span",[a],w,s);return l&&(x.title=l),e.content.appendChild(x)}e.content.appendChild(a)}}function ft(e,t){if(e.length>1&&!/  /.test(e))return e;for(var r=t,n="",i=0;i<e.length;i++){var o=e.charAt(i);" "!=o||!r||i!=e.length-1&&32!=e.charCodeAt(i+1)||(o=" "),n+=o,r=" "==o}return n}function ht(e,t){return function(r,n,i,o,l,s,a){i=i?i+" cm-force-border":"cm-force-border";for(var u=r.pos,c=u+n.length;;){for(var f=void 0,h=0;h<t.length&&(f=t[h],!(f.to>u&&f.from<=u));h++);if(f.to>=c)return e(r,n,i,o,l,s,a);e(r,n.slice(0,f.to-u),i,o,null,s,a),o=null,n=n.slice(f.to-u),u=f.to}}}function dt(e,t,r,n){var i=!n&&r.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!n&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",r.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function pt(e,t,r){var n=e.markedSpans,i=e.text,o=0;if(n)for(var l,s,a,u,c,f,h,d=i.length,p=0,g=1,v="",m=0;;){if(m==p){a=u=c=f=s="",h=null,m=1/0;for(var y=[],b=void 0,w=0;w<n.length;++w){var x=n[w],C=x.marker;"bookmark"==C.type&&x.from==p&&C.widgetNode?y.push(C):x.from<=p&&(null==x.to||x.to>p||C.collapsed&&x.to==p&&x.from==p)?(null!=x.to&&x.to!=p&&m>x.to&&(m=x.to,u=""),C.className&&(a+=" "+C.className),C.css&&(s=(s?s+";":"")+C.css),C.startStyle&&x.from==p&&(c+=" "+C.startStyle),C.endStyle&&x.to==m&&(b||(b=[])).push(C.endStyle,x.to),C.title&&!f&&(f=C.title),C.collapsed&&(!h||le(h.marker,C)<0)&&(h=x)):x.from>p&&m>x.from&&(m=x.from)}if(b)for(var S=0;S<b.length;S+=2)b[S+1]==m&&(u+=" "+b[S]);if(!h||h.from==p)for(var L=0;L<y.length;++L)dt(t,0,y[L]);if(h&&(h.from||0)==p){if(dt(t,(null==h.to?d+1:h.to)-p,h.marker,null==h.from),null==h.to)return;h.to==p&&(h=!1)}}if(p>=d)break;for(var k=Math.min(d,m);;){if(v){var T=p+v.length;if(!h){var M=T>k?v.slice(0,k-p):v;t.addToken(t,M,l?l+a:a,c,p+M.length==m?u:"",f,s)}if(T>=k){v=v.slice(k-p),p=k;break}p=T,c=""}v=i.slice(o,o=r[g++]),l=st(r[g++],t.cm.options)}}else for(var N=1;N<r.length;N+=2)t.addToken(t,i.slice(o,o=r[N]),st(r[N+1],t.cm.options))}function gt(e,t,r){this.line=t,this.rest=de(t),this.size=this.rest?W(g(this.rest))-r+1:1,this.node=this.text=null,this.hidden=ve(e,t)}function vt(e,t,r){for(var n,i=[],o=t;o<r;o=n){var l=new gt(e.doc,M(e.doc,o),o);n=o+l.size,i.push(l)}return i}function mt(e){ys?ys.ops.push(e):e.ownsGroup=ys={ops:[e],delayedCallbacks:[]}}function yt(e){var t=e.delayedCallbacks,r=0;do{for(;r<t.length;r++)t[r].call(null);for(var n=0;n<e.ops.length;n++){var i=e.ops[n];if(i.cursorActivityHandlers)for(;i.cursorActivityCalled<i.cursorActivityHandlers.length;)i.cursorActivityHandlers[i.cursorActivityCalled++].call(null,i.cm)}}while(r<t.length)}function bt(e,t){var r=e.ownsGroup;if(r)try{yt(r)}finally{ys=null,t(r)}}function wt(e,t){var r=Le(e,t);if(r.length){var n,i=Array.prototype.slice.call(arguments,2);ys?n=ys.delayedCallbacks:bs?n=bs:(n=bs=[],setTimeout(xt,0));for(var o=0;o<r.length;++o)!function(e){n.push(function(){return r[e].apply(null,i)})}(o)}}function xt(){var e=bs;bs=null;for(var t=0;t<e.length;++t)e[t]()}function Ct(e,t,r,n){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];"text"==o?Tt(e,t):"gutter"==o?Nt(e,t,r,n):"class"==o?Mt(e,t):"widget"==o&&Ot(e,t,n)}t.changes=null}function St(e){return e.node==e.text&&(e.node=n("div",null,null,"position: relative"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),yl&&bl<8&&(e.node.style.zIndex=2)),e.node}function Lt(e,t){var r=t.bgClass?t.bgClass+" "+(t.line.bgClass||""):t.line.bgClass;if(r&&(r+=" CodeMirror-linebackground"),t.background)r?t.background.className=r:(t.background.parentNode.removeChild(t.background),t.background=null);else if(r){var i=St(t);t.background=i.insertBefore(n("div",null,r),i.firstChild),e.display.input.setUneditable(t.background)}}function kt(e,t){var r=e.display.externalMeasured;return r&&r.line==t.line?(e.display.externalMeasured=null,t.measure=r.measure,r.built):at(e,t)}function Tt(e,t){var r=t.text.className,n=kt(e,t);t.text==t.node&&(t.node=n.pre),t.text.parentNode.replaceChild(n.pre,t.text),t.text=n.pre,n.bgClass!=t.bgClass||n.textClass!=t.textClass?(t.bgClass=n.bgClass,t.textClass=n.textClass,Mt(e,t)):r&&(t.text.className=r)}function Mt(e,t){Lt(e,t),t.line.wrapClass?St(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className="");var r=t.textClass?t.textClass+" "+(t.line.textClass||""):t.line.textClass;t.text.className=r||""}function Nt(e,t,r,i){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var o=St(t);t.gutterBackground=n("div",null,"CodeMirror-gutter-background "+t.line.gutterClass,"left: "+(e.options.fixedGutter?i.fixedPos:-i.gutterTotalWidth)+"px; width: "+i.gutterTotalWidth+"px"),e.display.input.setUneditable(t.gutterBackground),o.insertBefore(t.gutterBackground,t.text)}var l=t.line.gutterMarkers;if(e.options.lineNumbers||l){var s=St(t),a=t.gutter=n("div",null,"CodeMirror-gutter-wrapper","left: "+(e.options.fixedGutter?i.fixedPos:-i.gutterTotalWidth)+"px");if(e.display.input.setUneditable(a),s.insertBefore(a,t.text),t.line.gutterClass&&(a.className+=" "+t.line.gutterClass),!e.options.lineNumbers||l&&l["CodeMirror-linenumbers"]||(t.lineNumber=a.appendChild(n("div",F(e.options,r),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+i.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+e.display.lineNumInnerWidth+"px"))),l)for(var u=0;u<e.options.gutters.length;++u){var c=e.options.gutters[u],f=l.hasOwnProperty(c)&&l[c];f&&a.appendChild(n("div",[f],"CodeMirror-gutter-elt","left: "+i.gutterLeft[c]+"px; width: "+i.gutterWidth[c]+"px"))}}}function Ot(e,t,r){t.alignable&&(t.alignable=null);for(var n=t.node.firstChild,i=void 0;n;n=i)i=n.nextSibling,"CodeMirror-linewidget"==n.className&&t.node.removeChild(n);Wt(e,t,r)}function At(e,t,r,n){var i=kt(e,t);return t.text=t.node=i.pre,i.bgClass&&(t.bgClass=i.bgClass),i.textClass&&(t.textClass=i.textClass),Mt(e,t),Nt(e,t,r,n),Wt(e,t,n),t.node}function Wt(e,t,r){if(Dt(e,t.line,t,r,!0),t.rest)for(var n=0;n<t.rest.length;n++)Dt(e,t.rest[n],t,r,!1)}function Dt(e,t,r,i,o){if(t.widgets)for(var l=St(r),s=0,a=t.widgets;s<a.length;++s){var u=a[s],c=n("div",[u.node],"CodeMirror-linewidget");u.handleMouseEvents||c.setAttribute("cm-ignore-events","true"),Ht(u,c,r,i),e.display.input.setUneditable(c),o&&u.above?l.insertBefore(c,r.gutter||r.text):l.appendChild(c),wt(u,"redraw")}}function Ht(e,t,r,n){if(e.noHScroll){(r.alignable||(r.alignable=[])).push(t);var i=n.wrapperWidth;t.style.left=n.fixedPos+"px",e.coverGutter||(i-=n.gutterTotalWidth,t.style.paddingLeft=n.gutterTotalWidth+"px"),t.style.width=i+"px"}e.coverGutter&&(t.style.zIndex=5,t.style.position="relative",e.noHScroll||(t.style.marginLeft=-n.gutterTotalWidth+"px"))}function Ft(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!o(document.body,e.node)){var i="position: relative;";e.coverGutter&&(i+="margin-left: -"+t.display.gutters.offsetWidth+"px;"),e.noHScroll&&(i+="width: "+t.display.wrapper.clientWidth+"px;"),r(t.display.measure,n("div",[e.node],null,i))}return e.height=e.node.parentNode.offsetHeight}function Pt(e,t){for(var r=Pe(t);r!=e.wrapper;r=r.parentNode)if(!r||1==r.nodeType&&"true"==r.getAttribute("cm-ignore-events")||r.parentNode==e.sizer&&r!=e.mover)return!0}function Et(e){return e.lineSpace.offsetTop}function zt(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function It(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=r(e.measure,n("pre","x")),i=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,o={left:parseInt(i.paddingLeft),right:parseInt(i.paddingRight)};return isNaN(o.left)||isNaN(o.right)||(e.cachedPaddingH=o),o}function Rt(e){return Ul-e.display.nativeBarWidth}function Bt(e){return e.display.scroller.clientWidth-Rt(e)-e.display.barWidth}function Gt(e){return e.display.scroller.clientHeight-Rt(e)-e.display.barHeight}function Ut(e,t,r){var n=e.options.lineWrapping,i=n&&Bt(e);if(!t.measure.heights||n&&t.measure.width!=i){var o=t.measure.heights=[];if(n){t.measure.width=i;for(var l=t.text.firstChild.getClientRects(),s=0;s<l.length-1;s++){var a=l[s],u=l[s+1];Math.abs(a.bottom-u.bottom)>2&&o.push((a.bottom+u.top)/2-r.top)}}o.push(r.bottom-r.top)}}function Vt(e,t,r){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var n=0;n<e.rest.length;n++)if(e.rest[n]==t)return{map:e.measure.maps[n],cache:e.measure.caches[n]};for(var i=0;i<e.rest.length;i++)if(W(e.rest[i])>r)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Kt(e,t){t=fe(t);var n=W(t),i=e.display.externalMeasured=new gt(e.doc,t,n);i.lineN=n;var o=i.built=at(e,i);return i.text=o.pre,r(e.display.lineMeasure,o.pre),i}function jt(e,t,r,n){return _t(e,Yt(e,t),r,n)}function Xt(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[kr(e,t)];var r=e.display.externalMeasured;return r&&t>=r.lineN&&t<r.lineN+r.size?r:void 0}function Yt(e,t){var r=W(t),n=Xt(e,r);n&&!n.text?n=null:n&&n.changes&&(Ct(e,n,r,wr(e)),e.curOp.forceUpdate=!0),n||(n=Kt(e,t));var i=Vt(n,t,r);return{line:t,view:n,rect:null,map:i.map,cache:i.cache,before:i.before,hasHeights:!1}}function _t(e,t,r,n,i){t.before&&(r=-1);var o,l=r+(n||"");return t.cache.hasOwnProperty(l)?o=t.cache[l]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(Ut(e,t.view,t.rect),t.hasHeights=!0),o=Zt(e,t,r,n),o.bogus||(t.cache[l]=o)),{left:o.left,right:o.right,top:i?o.rtop:o.top,bottom:i?o.rbottom:o.bottom}}function qt(e,t,r){for(var n,i,o,l,s,a,u=0;u<e.length;u+=3)if(s=e[u],a=e[u+1],t<s?(i=0,o=1,l="left"):t<a?(i=t-s,o=i+1):(u==e.length-3||t==a&&e[u+3]>t)&&(o=a-s,i=o-1,t>=a&&(l="right")),null!=i){if(n=e[u+2],s==a&&r==(n.insertLeft?"left":"right")&&(l=r),"left"==r&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)n=e[2+(u-=3)],l="left";if("right"==r&&i==a-s)for(;u<e.length-3&&e[u+3]==e[u+4]&&!e[u+5].insertLeft;)n=e[(u+=3)+2],l="right";break}return{node:n,start:i,end:o,collapse:l,coverStart:s,coverEnd:a}}function $t(e,t){var r=ws;if("left"==t)for(var n=0;n<e.length&&(r=e[n]).left==r.right;n++);else for(var i=e.length-1;i>=0&&(r=e[i]).left==r.right;i--);return r}function Zt(e,t,r,n){var i,o=qt(t.map,r,n),l=o.node,s=o.start,a=o.end,u=o.collapse
+;if(3==l.nodeType){for(var c=0;c<4;c++){for(;s&&S(t.line.text.charAt(o.coverStart+s));)--s;for(;o.coverStart+a<o.coverEnd&&S(t.line.text.charAt(o.coverStart+a));)++a;if(i=yl&&bl<9&&0==s&&a==o.coverEnd-o.coverStart?l.parentNode.getBoundingClientRect():$t(Fl(l,s,a).getClientRects(),n),i.left||i.right||0==s)break;a=s,s-=1,u="right"}yl&&bl<11&&(i=Qt(e.display.measure,i))}else{s>0&&(u=n="right");var f;i=e.options.lineWrapping&&(f=l.getClientRects()).length>1?f["right"==n?f.length-1:0]:l.getBoundingClientRect()}if(yl&&bl<9&&!s&&(!i||!i.left&&!i.right)){var h=l.parentNode.getClientRects()[0];i=h?{left:h.left,right:h.left+br(e.display),top:h.top,bottom:h.bottom}:ws}for(var d=i.top-t.rect.top,p=i.bottom-t.rect.top,g=(d+p)/2,v=t.view.measure.heights,m=0;m<v.length-1&&!(g<v[m]);m++);var y=m?v[m-1]:0,b=v[m],w={left:("right"==u?i.right:i.left)-t.rect.left,right:("left"==u?i.left:i.right)-t.rect.left,top:y,bottom:b};return i.left||i.right||(w.bogus=!0),e.options.singleCursorHeightPerLine||(w.rtop=d,w.rbottom=p),w}function Qt(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!Re(e))return t;var r=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*r,right:t.right*r,top:t.top*n,bottom:t.bottom*n}}function Jt(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function er(e){e.display.externalMeasure=null,t(e.display.lineMeasure);for(var r=0;r<e.display.view.length;r++)Jt(e.display.view[r])}function tr(e){er(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function rr(){return Cl&&Nl?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function nr(){return Cl&&Nl?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function ir(e){var t=0;if(e.widgets)for(var r=0;r<e.widgets.length;++r)e.widgets[r].above&&(t+=Ft(e.widgets[r]));return t}function or(e,t,r,n,i){if(!i){var o=ir(t);r.top+=o,r.bottom+=o}if("line"==n)return r;n||(n="local");var l=ye(t);if("local"==n?l+=Et(e.display):l-=e.display.viewOffset,"page"==n||"window"==n){var s=e.display.lineSpace.getBoundingClientRect();l+=s.top+("window"==n?0:nr());var a=s.left+("window"==n?0:rr());r.left+=a,r.right+=a}return r.top+=l,r.bottom+=l,r}function lr(e,t,r){if("div"==r)return t;var n=t.left,i=t.top;if("page"==r)n-=rr(),i-=nr();else if("local"==r||!r){var o=e.display.sizer.getBoundingClientRect();n+=o.left,i+=o.top}var l=e.display.lineSpace.getBoundingClientRect();return{left:n-l.left,top:i-l.top}}function sr(e,t,r,n,i){return n||(n=M(e.doc,t.line)),or(e,n,jt(e,n,t.ch,i),r)}function ar(e,t,r,n,i,o){function l(t,l){var s=_t(e,i,t,l?"right":"left",o);return l?s.left=s.right:s.right=s.left,or(e,n,s,r)}function s(e,t,r){var n=a[t],i=1==n.level;return l(r?e-1:e,i!=r)}n=n||M(e.doc,t.line),i||(i=Yt(e,n));var a=Se(n,e.doc.direction),u=t.ch,c=t.sticky;if(u>=n.text.length?(u=n.text.length,c="before"):u<=0&&(u=0,c="after"),!a)return l("before"==c?u-1:u,"before"==c);var f=Ce(a,u,c),h=Ql,d=s(u,f,"before"==c);return null!=h&&(d.other=s(u,h,"before"!=c)),d}function ur(e,t){var r=0;t=U(e.doc,t),e.options.lineWrapping||(r=br(e.display)*t.ch);var n=M(e.doc,t.line),i=ye(n)+Et(e.display);return{left:r,right:r,top:i,bottom:i+n.height}}function cr(e,t,r,n,i){var o=P(e,t,r);return o.xRel=i,n&&(o.outside=!0),o}function fr(e,t,r){var n=e.doc;if((r+=e.display.viewOffset)<0)return cr(n.first,0,null,!0,-1);var i=D(n,r),o=n.first+n.size-1;if(i>o)return cr(n.first+n.size-1,M(n,o).text.length,null,!0,1);t<0&&(t=0);for(var l=M(n,i);;){var s=gr(e,l,i,t,r),a=ue(l),u=a&&a.find(0,!0);if(!a||!(s.ch>u.from.ch||s.ch==u.from.ch&&s.xRel>0))return s;i=W(l=u.to.line)}}function hr(e,t,r,n){n-=ir(t);var i=t.text.length,o=k(function(t){return _t(e,r,t-1).bottom<=n},i,0);return i=k(function(t){return _t(e,r,t).top>n},o,i),{begin:o,end:i}}function dr(e,t,r,n){return r||(r=Yt(e,t)),hr(e,t,r,or(e,t,_t(e,r,n),"line").top)}function pr(e,t,r,n){return!(e.bottom<=r)&&(e.top>r||(n?e.left:e.right)>t)}function gr(e,t,r,n,i){i-=ye(t);var o=Yt(e,t),l=ir(t),s=0,a=t.text.length,u=!0,c=Se(t,e.doc.direction);if(c){var f=(e.options.lineWrapping?mr:vr)(e,t,r,o,c,n,i);u=1!=f.level,s=u?f.from:f.to-1,a=u?f.to:f.from-1}var h,d,p=null,g=null,v=k(function(t){var r=_t(e,o,t);return r.top+=l,r.bottom+=l,!!pr(r,n,i,!1)&&(r.top<=i&&r.left<=n&&(p=t,g=r),!0)},s,a),m=!1;if(g){var y=n-g.left<g.right-n,b=y==u;v=p+(b?0:1),d=b?"after":"before",h=y?g.left:g.right}else{u||v!=a&&v!=s||v++,d=0==v?"after":v==t.text.length?"before":_t(e,o,v-(u?1:0)).bottom+l<=i==u?"after":"before";var w=ar(e,P(r,v,d),"line",t,o);h=w.left,m=i<w.top||i>=w.bottom}return v=L(t.text,v,1),cr(r,v,d,m,n-h)}function vr(e,t,r,n,i,o,l){var s=k(function(s){var a=i[s],u=1!=a.level;return pr(ar(e,P(r,u?a.to:a.from,u?"before":"after"),"line",t,n),o,l,!0)},0,i.length-1),a=i[s];if(s>0){var u=1!=a.level,c=ar(e,P(r,u?a.from:a.to,u?"after":"before"),"line",t,n);pr(c,o,l,!0)&&c.top>l&&(a=i[s-1])}return a}function mr(e,t,r,n,i,o,l){var s=hr(e,t,n,l),a=s.begin,u=s.end;/\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,f=null,h=0;h<i.length;h++){var d=i[h];if(!(d.from>=u||d.to<=a)){var p=1!=d.level,g=_t(e,n,p?Math.min(u,d.to)-1:Math.max(a,d.from)).right,v=g<o?o-g+1e9:g-o;(!c||f>v)&&(c=d,f=v)}}return c||(c=i[i.length-1]),c.from<a&&(c={from:a,to:c.to,level:c.level}),c.to>u&&(c={from:c.from,to:u,level:c.level}),c}function yr(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==gs){gs=n("pre");for(var i=0;i<49;++i)gs.appendChild(document.createTextNode("x")),gs.appendChild(n("br"));gs.appendChild(document.createTextNode("x"))}r(e.measure,gs);var o=gs.offsetHeight/50;return o>3&&(e.cachedTextHeight=o),t(e.measure),o||1}function br(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=n("span","xxxxxxxxxx"),i=n("pre",[t]);r(e.measure,i);var o=t.getBoundingClientRect(),l=(o.right-o.left)/10;return l>2&&(e.cachedCharWidth=l),l||10}function wr(e){for(var t=e.display,r={},n={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l)r[e.options.gutters[l]]=o.offsetLeft+o.clientLeft+i,n[e.options.gutters[l]]=o.clientWidth;return{fixedPos:xr(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:r,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function xr(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function Cr(e){var t=yr(e.display),r=e.options.lineWrapping,n=r&&Math.max(5,e.display.scroller.clientWidth/br(e.display)-3);return function(i){if(ve(e.doc,i))return 0;var o=0;if(i.widgets)for(var l=0;l<i.widgets.length;l++)i.widgets[l].height&&(o+=i.widgets[l].height);return r?o+(Math.ceil(i.text.length/n)||1)*t:o+t}}function Sr(e){var t=e.doc,r=Cr(e);t.iter(function(e){var t=r(e);t!=e.height&&A(e,t)})}function Lr(e,t,r,n){var i=e.display;if(!r&&"true"==Pe(t).getAttribute("cm-not-content"))return null;var o,l,s=i.lineSpace.getBoundingClientRect();try{o=t.clientX-s.left,l=t.clientY-s.top}catch(t){return null}var a,u=fr(e,o,l);if(n&&1==u.xRel&&(a=M(e.doc,u.line).text).length==u.ch){var c=f(a,a.length,e.options.tabSize)-a.length;u=P(u.line,Math.max(0,Math.round((o-It(e.display).left)/br(e.display))-c))}return u}function kr(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var r=e.display.view,n=0;n<r.length;n++)if((t-=r[n].size)<0)return n}function Tr(e){e.display.input.showSelection(e.display.input.prepareSelection())}function Mr(e,t){void 0===t&&(t=!0);for(var r=e.doc,n={},i=n.cursors=document.createDocumentFragment(),o=n.selection=document.createDocumentFragment(),l=0;l<r.sel.ranges.length;l++)if(t||l!=r.sel.primIndex){var s=r.sel.ranges[l];if(!(s.from().line>=e.display.viewTo||s.to().line<e.display.viewFrom)){var a=s.empty();(a||e.options.showCursorWhenSelecting)&&Nr(e,s.head,i),a||Ar(e,s,o)}}return n}function Nr(e,t,r){var i=ar(e,t,"div",null,null,!e.options.singleCursorHeightPerLine),o=r.appendChild(n("div"," ","CodeMirror-cursor"));if(o.style.left=i.left+"px",o.style.top=i.top+"px",o.style.height=Math.max(0,i.bottom-i.top)*e.options.cursorHeight+"px",i.other){var l=r.appendChild(n("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));l.style.display="",l.style.left=i.other.left+"px",l.style.top=i.other.top+"px",l.style.height=.85*(i.other.bottom-i.other.top)+"px"}}function Or(e,t){return e.top-t.top||e.left-t.left}function Ar(e,t,r){function i(e,t,r,i){t<0&&(t=0),t=Math.round(t),i=Math.round(i),a.appendChild(n("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n                             top: "+t+"px; width: "+(null==r?f-e:r)+"px;\n                             height: "+(i-t)+"px"))}function o(t,r,n){function o(r,n){return sr(e,P(t,r),"div",d,n)}function l(t,r,n){var i=dr(e,d,null,t),l="ltr"==r==("after"==n)?"left":"right";return o("after"==n?i.begin:i.end-(/\s/.test(d.text.charAt(i.end-1))?2:1),l)[l]}var a,u,d=M(s,t),p=d.text.length,g=Se(d,s.direction);return xe(g,r||0,null==n?p:n,function(e,t,s,d){var v="ltr"==s,m=o(e,v?"left":"right"),y=o(t-1,v?"right":"left"),b=null==r&&0==e,w=null==n&&t==p,x=0==d,C=!g||d==g.length-1;if(y.top-m.top<=3){var S=(h?b:w)&&x,L=(h?w:b)&&C,k=S?c:(v?m:y).left,T=L?f:(v?y:m).right;i(k,m.top,T-k,m.bottom)}else{var M,N,O,A;v?(M=h&&b&&x?c:m.left,N=h?f:l(e,s,"before"),O=h?c:l(t,s,"after"),A=h&&w&&C?f:y.right):(M=h?l(e,s,"before"):c,N=!h&&b&&x?f:m.right,O=!h&&w&&C?c:y.left,A=h?l(t,s,"after"):f),i(M,m.top,N-M,m.bottom),m.bottom<y.top&&i(c,m.bottom,null,y.top),i(O,y.top,A-O,y.bottom)}(!a||Or(m,a)<0)&&(a=m),Or(y,a)<0&&(a=y),(!u||Or(m,u)<0)&&(u=m),Or(y,u)<0&&(u=y)}),{start:a,end:u}}var l=e.display,s=e.doc,a=document.createDocumentFragment(),u=It(e.display),c=u.left,f=Math.max(l.sizerWidth,Bt(e)-l.sizer.offsetLeft)-u.right,h="ltr"==s.direction,d=t.from(),p=t.to();if(d.line==p.line)o(d.line,d.ch,p.ch);else{var g=M(s,d.line),v=M(s,p.line),m=fe(g)==fe(v),y=o(d.line,d.ch,m?g.text.length+1:null).end,b=o(p.line,m?0:null,p.ch).start;m&&(y.top<b.top-2?(i(y.right,y.top,null,y.bottom),i(c,b.top,b.left,b.bottom)):i(y.right,y.top,b.left-y.right,y.bottom)),y.bottom<b.top&&i(c,y.bottom,null,b.top)}r.appendChild(a)}function Wr(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var r=!0;t.cursorDiv.style.visibility="",e.options.cursorBlinkRate>0?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(r=!r)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Dr(e){e.state.focused||(e.display.input.focus(),Fr(e))}function Hr(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,Pr(e))},100)}function Fr(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(Te(e,"focus",e,t),e.state.focused=!0,s(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),wl&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),Wr(e))}function Pr(e,t){e.state.delayingBlurEvent||(e.state.focused&&(Te(e,"blur",e,t),e.state.focused=!1,zl(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function Er(e){for(var t=e.display,r=t.lineDiv.offsetTop,n=0;n<t.view.length;n++){var i=t.view[n],o=void 0;if(!i.hidden){if(yl&&bl<8){var l=i.node.offsetTop+i.node.offsetHeight;o=l-r,r=l}else{var s=i.node.getBoundingClientRect();o=s.bottom-s.top}var a=i.line.height-o;if(o<2&&(o=yr(t)),(a>.005||a<-.005)&&(A(i.line,o),zr(i.line),i.rest))for(var u=0;u<i.rest.length;u++)zr(i.rest[u])}}}function zr(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var r=e.widgets[t],n=r.node.parentNode;n&&(r.height=n.offsetHeight)}}function Ir(e,t,r){var n=r&&null!=r.top?Math.max(0,r.top):e.scroller.scrollTop;n=Math.floor(n-Et(e));var i=r&&null!=r.bottom?r.bottom:n+e.wrapper.clientHeight,o=D(t,n),l=D(t,i);if(r&&r.ensure){var s=r.ensure.from.line,a=r.ensure.to.line;s<o?(o=s,l=D(t,ye(M(t,s))+e.wrapper.clientHeight)):Math.min(a,t.lastLine())>=l&&(o=D(t,ye(M(t,a))-e.wrapper.clientHeight),l=a)}return{from:o,to:Math.max(l,o+1)}}function Rr(e){var t=e.display,r=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var n=xr(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=n+"px",l=0;l<r.length;l++)if(!r[l].hidden){e.options.fixedGutter&&(r[l].gutter&&(r[l].gutter.style.left=o),r[l].gutterBackground&&(r[l].gutterBackground.style.left=o));var s=r[l].alignable;if(s)for(var a=0;a<s.length;a++)s[a].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=n+i+"px")}}function Br(e){if(!e.options.lineNumbers)return!1;var t=e.doc,r=F(e.options,t.first+t.size-1),i=e.display;if(r.length!=i.lineNumChars){var o=i.measure.appendChild(n("div",[n("div",r)],"CodeMirror-linenumber CodeMirror-gutter-elt")),l=o.firstChild.offsetWidth,s=o.offsetWidth-l;return i.lineGutter.style.width="",i.lineNumInnerWidth=Math.max(l,i.lineGutter.offsetWidth-s)+1,i.lineNumWidth=i.lineNumInnerWidth+s,i.lineNumChars=i.lineNumInnerWidth?r.length:-1,i.lineGutter.style.width=i.lineNumWidth+"px",Dn(e),!0}return!1}function Gr(e,t){if(!Me(e,"scrollCursorIntoView")){var r=e.display,i=r.sizer.getBoundingClientRect(),o=null;if(t.top+i.top<0?o=!0:t.bottom+i.top>(window.innerHeight||document.documentElement.clientHeight)&&(o=!1),null!=o&&!Tl){var l=n("div","​",null,"position: absolute;\n                         top: "+(t.top-r.viewOffset-Et(e.display))+"px;\n                         height: "+(t.bottom-t.top+Rt(e)+r.barHeight)+"px;\n                         left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(l),l.scrollIntoView(o),e.display.lineSpace.removeChild(l)}}}function Ur(e,t,r,n){null==n&&(n=0);var i;e.options.lineWrapping||t!=r||(t=t.ch?P(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t,r="before"==t.sticky?P(t.line,t.ch+1,"before"):t);for(var o=0;o<5;o++){var l=!1,s=ar(e,t),a=r&&r!=t?ar(e,r):s;i={left:Math.min(s.left,a.left),top:Math.min(s.top,a.top)-n,right:Math.max(s.left,a.left),bottom:Math.max(s.bottom,a.bottom)+n};var u=Kr(e,i),c=e.doc.scrollTop,f=e.doc.scrollLeft;if(null!=u.scrollTop&&(Zr(e,u.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(l=!0)),null!=u.scrollLeft&&(Jr(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-f)>1&&(l=!0)),!l)break}return i}function Vr(e,t){var r=Kr(e,t);null!=r.scrollTop&&Zr(e,r.scrollTop),null!=r.scrollLeft&&Jr(e,r.scrollLeft)}function Kr(e,t){var r=e.display,n=yr(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:r.scroller.scrollTop,o=Gt(e),l={};t.bottom-t.top>o&&(t.bottom=t.top+o);var s=e.doc.height+zt(r),a=t.top<n,u=t.bottom>s-n;if(t.top<i)l.scrollTop=a?0:t.top;else if(t.bottom>i+o){var c=Math.min(t.top,(u?s:t.bottom)-o);c!=i&&(l.scrollTop=c)}var f=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:r.scroller.scrollLeft,h=Bt(e)-(e.options.fixedGutter?r.gutters.offsetWidth:0),d=t.right-t.left>h;return d&&(t.right=t.left+h),t.left<10?l.scrollLeft=0:t.left<f?l.scrollLeft=Math.max(0,t.left-(d?0:10)):t.right>h+f-3&&(l.scrollLeft=t.right+(d?0:10)-h),l}function jr(e,t){null!=t&&(qr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Xr(e){qr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Yr(e,t,r){null==t&&null==r||qr(e),null!=t&&(e.curOp.scrollLeft=t),null!=r&&(e.curOp.scrollTop=r)}function _r(e,t){qr(e),e.curOp.scrollToPos=t}function qr(e){var t=e.curOp.scrollToPos;if(t){e.curOp.scrollToPos=null;$r(e,ur(e,t.from),ur(e,t.to),t.margin)}}function $r(e,t,r,n){var i=Kr(e,{left:Math.min(t.left,r.left),top:Math.min(t.top,r.top)-n,right:Math.max(t.right,r.right),bottom:Math.max(t.bottom,r.bottom)+n});Yr(e,i.scrollLeft,i.scrollTop)}function Zr(e,t){Math.abs(e.doc.scrollTop-t)<2||(pl||An(e,{top:t}),Qr(e,t,!0),pl&&An(e),Sn(e,100))}function Qr(e,t,r){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||r)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Jr(e,t,r,n){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(r?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!n||(e.doc.scrollLeft=t,Rr(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function en(e){var t=e.display,r=t.gutters.offsetWidth,n=Math.round(e.doc.height+zt(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?r:0,docHeight:n,scrollHeight:n+Rt(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:r}}function tn(e,t){t||(t=en(e));var r=e.display.barWidth,n=e.display.barHeight;rn(e,t);for(var i=0;i<4&&r!=e.display.barWidth||n!=e.display.barHeight;i++)r!=e.display.barWidth&&e.options.lineWrapping&&Er(e),rn(e,en(e)),r=e.display.barWidth,n=e.display.barHeight}function rn(e,t){var r=e.display,n=r.scrollbars.update(t);r.sizer.style.paddingRight=(r.barWidth=n.right)+"px",r.sizer.style.paddingBottom=(r.barHeight=n.bottom)+"px",r.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(r.scrollbarFiller.style.display="block",r.scrollbarFiller.style.height=n.bottom+"px",r.scrollbarFiller.style.width=n.right+"px"):r.scrollbarFiller.style.display="",n.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(r.gutterFiller.style.display="block",r.gutterFiller.style.height=n.bottom+"px",r.gutterFiller.style.width=t.gutterWidth+"px"):r.gutterFiller.style.display=""}function nn(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&zl(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Ss[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),ts(t,"mousedown",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute("cm-not-content","true")},function(t,r){"horizontal"==r?Jr(e,t):Zr(e,t)},e),e.display.scrollbars.addClass&&s(e.display.wrapper,e.display.scrollbars.addClass)}function on(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ls},mt(e.curOp)}function ln(e){bt(e.curOp,function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;sn(e)})}function sn(e){for(var t=e.ops,r=0;r<t.length;r++)an(t[r]);for(var n=0;n<t.length;n++)un(t[n]);for(var i=0;i<t.length;i++)cn(t[i]);for(var o=0;o<t.length;o++)fn(t[o]);for(var l=0;l<t.length;l++)hn(t[l])}function an(e){var t=e.cm,r=t.display;kn(t),e.updateMaxLine&&we(t),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<r.viewFrom||e.scrollToPos.to.line>=r.viewTo)||r.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new ks(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function un(e){e.updatedDisplay=e.mustUpdate&&Nn(e.cm,e.update)}function cn(e){var t=e.cm,r=t.display;e.updatedDisplay&&Er(t),e.barMeasure=en(t),r.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=jt(t,r.maxLine,r.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(r.scroller.clientWidth,r.sizer.offsetLeft+e.adjustWidthTo+Rt(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,r.sizer.offsetLeft+e.adjustWidthTo-Bt(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=r.input.prepareSelection())}function fn(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft<t.doc.scrollLeft&&Jr(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var r=e.focus&&e.focus==l();e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,r),(e.updatedDisplay||e.startHeight!=t.doc.height)&&tn(t,e.barMeasure),e.updatedDisplay&&Hn(t,e.barMeasure),e.selectionChanged&&Wr(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),r&&Dr(e.cm)}function hn(e){var t=e.cm,r=t.display,n=t.doc;if(e.updatedDisplay&&On(t,e.update),null==r.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(r.wheelStartX=r.wheelStartY=null),null!=e.scrollTop&&Qr(t,e.scrollTop,e.forceScroll),null!=e.scrollLeft&&Jr(t,e.scrollLeft,!0,!0),e.scrollToPos){Gr(t,Ur(t,U(n,e.scrollToPos.from),U(n,e.scrollToPos.to),e.scrollToPos.margin))}var i=e.maybeHiddenMarkers,o=e.maybeUnhiddenMarkers;if(i)for(var l=0;l<i.length;++l)i[l].lines.length||Te(i[l],"hide");if(o)for(var s=0;s<o.length;++s)o[s].lines.length&&Te(o[s],"unhide");r.wrapper.offsetHeight&&(n.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&Te(t,"changes",t,e.changeObjs),e.update&&e.update.finish()}function dn(e,t){if(e.curOp)return t();on(e);try{return t()}finally{ln(e)}}function pn(e,t){return function(){if(e.curOp)return t.apply(e,arguments);on(e);try{return t.apply(e,arguments)}finally{ln(e)}}}function gn(e){return function(){if(this.curOp)return e.apply(this,arguments);on(this);try{return e.apply(this,arguments)}finally{ln(this)}}}function vn(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);on(t);try{return e.apply(this,arguments)}finally{ln(t)}}}function mn(e,t,r,n){null==t&&(t=e.doc.first),null==r&&(r=e.doc.first+e.doc.size),n||(n=0);var i=e.display;if(n&&r<i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>t)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Zl&&pe(e.doc,t)<i.viewTo&&bn(e);else if(r<=i.viewFrom)Zl&&ge(e.doc,r+n)>i.viewFrom?bn(e):(i.viewFrom+=n,i.viewTo+=n);else if(t<=i.viewFrom&&r>=i.viewTo)bn(e);else if(t<=i.viewFrom){var o=wn(e,r,r+n,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=n):bn(e)}else if(r>=i.viewTo){var l=wn(e,t,t,-1);l?(i.view=i.view.slice(0,l.index),i.viewTo=l.lineN):bn(e)}else{var s=wn(e,t,t,-1),a=wn(e,r,r+n,1);s&&a?(i.view=i.view.slice(0,s.index).concat(vt(e,s.lineN,a.lineN)).concat(i.view.slice(a.index)),i.viewTo+=n):bn(e)}var u=i.externalMeasured;u&&(r<u.lineN?u.lineN+=n:t<u.lineN+u.size&&(i.externalMeasured=null))}function yn(e,t,r){e.curOp.viewChanged=!0;var n=e.display,i=e.display.externalMeasured;if(i&&t>=i.lineN&&t<i.lineN+i.size&&(n.externalMeasured=null),!(t<n.viewFrom||t>=n.viewTo)){var o=n.view[kr(e,t)];if(null!=o.node){var l=o.changes||(o.changes=[]);-1==h(l,r)&&l.push(r)}}}function bn(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function wn(e,t,r,n){var i,o=kr(e,t),l=e.display.view;if(!Zl||r==e.doc.first+e.doc.size)return{index:o,lineN:r};for(var s=e.display.viewFrom,a=0;a<o;a++)s+=l[a].size;if(s!=t){if(n>0){if(o==l.length-1)return null;i=s+l[o].size-t,o++}else i=s-t;t+=i,r+=i}for(;pe(e.doc,r)!=r;){if(o==(n<0?0:l.length-1))return null;r+=n*l[o-(n<0?1:0)].size,o+=n}return{index:o,lineN:r}}function xn(e,t,r){var n=e.display;0==n.view.length||t>=n.viewTo||r<=n.viewFrom?(n.view=vt(e,t,r),n.viewFrom=t):(n.viewFrom>t?n.view=vt(e,t,n.viewFrom).concat(n.view):n.viewFrom<t&&(n.view=n.view.slice(kr(e,t))),n.viewFrom=t,n.viewTo<r?n.view=n.view.concat(vt(e,n.viewTo,r)):n.viewTo>r&&(n.view=n.view.slice(0,kr(e,r)))),n.viewTo=r}function Cn(e){for(var t=e.display.view,r=0,n=0;n<t.length;n++){var i=t[n];i.hidden||i.node&&!i.changes||++r}return r}function Sn(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,u(Ln,e))}function Ln(e){var t=e.doc;if(!(t.highlightFrontier>=e.display.viewTo)){var r=+new Date+e.options.workTime,n=$e(e,t.highlightFrontier),i=[];t.iter(n.line,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(n.line>=e.display.viewFrom){var l=o.styles,s=o.text.length>e.options.maxHighlightLength?je(t.mode,n.state):null,a=_e(e,o,n,!0);s&&(n.state=s),o.styles=a.styles;var u=o.styleClasses,c=a.classes;c?o.styleClasses=c:u&&(o.styleClasses=null);for(var f=!l||l.length!=o.styles.length||u!=c&&(!u||!c||u.bgClass!=c.bgClass||u.textClass!=c.textClass),h=0;!f&&h<l.length;++h)f=l[h]!=o.styles[h];f&&i.push(n.line),o.stateAfter=n.save(),n.nextLine()}else o.text.length<=e.options.maxHighlightLength&&Ze(e,o.text,n),o.stateAfter=n.line%5==0?n.save():null,n.nextLine();if(+new Date>r)return Sn(e,e.options.workDelay),!0}),t.highlightFrontier=n.line,t.modeFrontier=Math.max(t.modeFrontier,n.line),i.length&&dn(e,function(){for(var t=0;t<i.length;t++)yn(e,i[t],"text")})}}function kn(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=Rt(e)+"px",t.sizer.style.marginBottom=-t.nativeBarWidth+"px",t.sizer.style.borderRightWidth=Rt(e)+"px",t.scrollbarsClipped=!0)}function Tn(e){if(e.hasFocus())return null;var t=l();if(!t||!o(e.display.lineDiv,t))return null;var r={activeElt:t};if(window.getSelection){var n=window.getSelection();n.anchorNode&&n.extend&&o(e.display.lineDiv,n.anchorNode)&&(r.anchorNode=n.anchorNode,r.anchorOffset=n.anchorOffset,r.focusNode=n.focusNode,r.focusOffset=n.focusOffset)}return r}function Mn(e){if(e&&e.activeElt&&e.activeElt!=l()&&(e.activeElt.focus(),e.anchorNode&&o(document.body,e.anchorNode)&&o(document.body,e.focusNode))){var t=window.getSelection(),r=document.createRange();r.setEnd(e.anchorNode,e.anchorOffset),r.collapse(!1),t.removeAllRanges(),t.addRange(r),t.extend(e.focusNode,e.focusOffset)}}function Nn(e,r){var n=e.display,i=e.doc;if(r.editorIsHidden)return bn(e),!1;if(!r.force&&r.visible.from>=n.viewFrom&&r.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==Cn(e))return!1;Br(e)&&(bn(e),r.dims=wr(e));var o=i.first+i.size,l=Math.max(r.visible.from-e.options.viewportMargin,i.first),s=Math.min(o,r.visible.to+e.options.viewportMargin);n.viewFrom<l&&l-n.viewFrom<20&&(l=Math.max(i.first,n.viewFrom)),n.viewTo>s&&n.viewTo-s<20&&(s=Math.min(o,n.viewTo)),Zl&&(l=pe(e.doc,l),s=ge(e.doc,s));var a=l!=n.viewFrom||s!=n.viewTo||n.lastWrapHeight!=r.wrapperHeight||n.lastWrapWidth!=r.wrapperWidth;xn(e,l,s),n.viewOffset=ye(M(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var u=Cn(e);if(!a&&0==u&&!r.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var c=Tn(e);return u>4&&(n.lineDiv.style.display="none"),Wn(e,n.updateLineNumbers,r.dims),u>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,Mn(c),t(n.cursorDiv),t(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,a&&(n.lastWrapHeight=r.wrapperHeight,n.lastWrapWidth=r.wrapperWidth,Sn(e,400)),n.updateLineNumbers=null,!0}function On(e,t){for(var r=t.viewport,n=!0;(n&&e.options.lineWrapping&&t.oldDisplayWidth!=Bt(e)||(r&&null!=r.top&&(r={top:Math.min(e.doc.height+zt(e.display)-Gt(e),r.top)}),t.visible=Ir(e.display,e.doc,r),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&Nn(e,t);n=!1){Er(e);var i=en(e);Tr(e),tn(e,i),Hn(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function An(e,t){var r=new ks(e,t);if(Nn(e,r)){Er(e),On(e,r);var n=en(e);Tr(e),tn(e,n),Hn(e,n),r.finish()}}function Wn(e,r,n){function i(t){var r=t.nextSibling;return wl&&Al&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),r}for(var o=e.display,l=e.options.lineNumbers,s=o.lineDiv,a=s.firstChild,u=o.view,c=o.viewFrom,f=0;f<u.length;f++){var d=u[f];if(d.hidden);else if(d.node&&d.node.parentNode==s){for(;a!=d.node;)a=i(a);var p=l&&null!=r&&r<=c&&d.lineNumber;d.changes&&(h(d.changes,"gutter")>-1&&(p=!1),Ct(e,d,c,n)),p&&(t(d.lineNumber),d.lineNumber.appendChild(document.createTextNode(F(e.options,c)))),a=d.node.nextSibling}else{var g=At(e,d,c,n);s.insertBefore(g,a)}c+=d.size}for(;a;)a=i(a)}function Dn(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+"px"}function Hn(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Rt(e)+"px"}function Fn(e){var r=e.display.gutters,i=e.options.gutters;t(r);for(var o=0;o<i.length;++o){var l=i[o],s=r.appendChild(n("div",null,"CodeMirror-gutter "+l));"CodeMirror-linenumbers"==l&&(e.display.lineGutter=s,s.style.width=(e.display.lineNumWidth||1)+"px")}r.style.display=o?"":"none",Dn(e)}function Pn(e){var t=h(e.gutters,"CodeMirror-linenumbers");-1==t&&e.lineNumbers?e.gutters=e.gutters.concat(["CodeMirror-linenumbers"]):t>-1&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}function En(e){var t=e.wheelDeltaX,r=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==r&&e.detail&&e.axis==e.VERTICAL_AXIS?r=e.detail:null==r&&(r=e.wheelDelta),{x:t,y:r}}function zn(e){var t=En(e);return t.x*=Ms,t.y*=Ms,t}function In(e,t){var r=En(t),n=r.x,i=r.y,o=e.display,l=o.scroller,s=l.scrollWidth>l.clientWidth,a=l.scrollHeight>l.clientHeight;if(n&&s||i&&a){if(i&&Al&&wl)e:for(var u=t.target,c=o.view;u!=l;u=u.parentNode)for(var f=0;f<c.length;f++)if(c[f].node==u){e.display.currentWheelTarget=u;break e}if(n&&!pl&&!Sl&&null!=Ms)return i&&a&&Zr(e,Math.max(0,l.scrollTop+i*Ms)),Jr(e,Math.max(0,l.scrollLeft+n*Ms)),(!i||i&&a)&&We(t),void(o.wheelStartX=null);if(i&&null!=Ms){var h=i*Ms,d=e.doc.scrollTop,p=d+o.wrapper.clientHeight;h<0?d=Math.max(0,d+h-50):p=Math.min(e.doc.height,p+h+50),An(e,{top:d,bottom:p})}Ts<20&&(null==o.wheelStartX?(o.wheelStartX=l.scrollLeft,o.wheelStartY=l.scrollTop,o.wheelDX=n,o.wheelDY=i,setTimeout(function(){if(null!=o.wheelStartX){var e=l.scrollLeft-o.wheelStartX,t=l.scrollTop-o.wheelStartY,r=t&&o.wheelDY&&t/o.wheelDY||e&&o.wheelDX&&e/o.wheelDX;o.wheelStartX=o.wheelStartY=null,r&&(Ms=(Ms*Ts+r)/(Ts+1),++Ts)}},200)):(o.wheelDX+=n,o.wheelDY+=i))}}function Rn(e,t){var r=e[t];e.sort(function(e,t){return E(e.from(),t.from())}),t=h(e,r);for(var n=1;n<e.length;n++){var i=e[n],o=e[n-1];if(E(o.to(),i.from())>=0){var l=B(o.from(),i.from()),s=R(o.to(),i.to()),a=o.empty()?i.from()==i.head:o.from()==o.head;n<=t&&--t,e.splice(--n,2,new Os(a?s:l,a?l:s))}}return new Ns(e,t)}function Bn(e,t){return new Ns([new Os(e,t||e)],0)}function Gn(e){return e.text?P(e.from.line+e.text.length-1,g(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Un(e,t){if(E(e,t.from)<0)return e;if(E(e,t.to)<=0)return Gn(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,n=e.ch;return e.line==t.to.line&&(n+=Gn(t).ch-t.to.ch),P(r,n)}function Vn(e,t){for(var r=[],n=0;n<e.sel.ranges.length;n++){var i=e.sel.ranges[n];r.push(new Os(Un(i.anchor,t),Un(i.head,t)))}return Rn(r,e.sel.primIndex)}function Kn(e,t,r){return e.line==t.line?P(r.line,e.ch-t.ch+r.ch):P(r.line+(e.line-t.line),e.ch)}function jn(e,t,r){for(var n=[],i=P(e.first,0),o=i,l=0;l<t.length;l++){var s=t[l],a=Kn(s.from,i,o),u=Kn(Gn(s),i,o);if(i=s.to,o=u,"around"==r){var c=e.sel.ranges[l],f=E(c.head,c.anchor)<0;n[l]=new Os(f?u:a,f?a:u)}else n[l]=new Os(a,a)}return new Ns(n,e.sel.primIndex)}function Xn(e){e.doc.mode=Ve(e.options,e.doc.modeOption),Yn(e)}function Yn(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,Sn(e,100),
+e.state.modeGen++,e.curOp&&mn(e)}function _n(e,t){return 0==t.from.ch&&0==t.to.ch&&""==g(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function qn(e,t,r,n){function i(e){return r?r[e]:null}function o(e,r,i){ot(e,r,i,n),wt(e,"change",e,t)}function l(e,t){for(var r=[],o=e;o<t;++o)r.push(new ps(u[o],i(o),n));return r}var s=t.from,a=t.to,u=t.text,c=M(e,s.line),f=M(e,a.line),h=g(u),d=i(u.length-1),p=a.line-s.line;if(t.full)e.insert(0,l(0,u.length)),e.remove(u.length,e.size-u.length);else if(_n(e,t)){var v=l(0,u.length-1);o(f,f.text,d),p&&e.remove(s.line,p),v.length&&e.insert(s.line,v)}else if(c==f)if(1==u.length)o(c,c.text.slice(0,s.ch)+h+c.text.slice(a.ch),d);else{var m=l(1,u.length-1);m.push(new ps(h+c.text.slice(a.ch),d,n)),o(c,c.text.slice(0,s.ch)+u[0],i(0)),e.insert(s.line+1,m)}else if(1==u.length)o(c,c.text.slice(0,s.ch)+u[0]+f.text.slice(a.ch),i(0)),e.remove(s.line+1,p);else{o(c,c.text.slice(0,s.ch)+u[0],i(0)),o(f,h+f.text.slice(a.ch),d);var y=l(1,u.length-1);p>1&&e.remove(s.line+1,p-1),e.insert(s.line+1,y)}wt(e,"change",e,t)}function $n(e,t,r){function n(e,i,o){if(e.linked)for(var l=0;l<e.linked.length;++l){var s=e.linked[l];if(s.doc!=i){var a=o&&s.sharedHist;r&&!a||(t(s.doc,a),n(s.doc,e,a))}}}n(e,null,!0)}function Zn(e,t){if(t.cm)throw new Error("This document is already in use.");e.doc=t,t.cm=e,Sr(e),Xn(e),Qn(e),e.options.lineWrapping||we(e),e.options.mode=t.modeOption,mn(e)}function Qn(e){("rtl"==e.doc.direction?s:zl)(e.display.lineDiv,"CodeMirror-rtl")}function Jn(e){dn(e,function(){Qn(e),mn(e)})}function ei(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function ti(e,t){var r={from:I(t.from),to:Gn(t),text:N(e,t.from,t.to)};return ai(e,r,t.from.line,t.to.line+1),$n(e,function(e){return ai(e,r,t.from.line,t.to.line+1)},!0),r}function ri(e){for(;e.length;){if(!g(e).ranges)break;e.pop()}}function ni(e,t){return t?(ri(e.done),g(e.done)):e.done.length&&!g(e.done).ranges?g(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),g(e.done)):void 0}function ii(e,t,r,n){var i=e.history;i.undone.length=0;var o,l,s=+new Date;if((i.lastOp==n||i.lastOrigin==t.origin&&t.origin&&("+"==t.origin.charAt(0)&&e.cm&&i.lastModTime>s-e.cm.options.historyEventDelay||"*"==t.origin.charAt(0)))&&(o=ni(i,i.lastOp==n)))l=g(o.changes),0==E(t.from,t.to)&&0==E(t.from,l.to)?l.to=Gn(t):o.changes.push(ti(e,t));else{var a=g(i.done);for(a&&a.ranges||si(e.sel,i.done),o={changes:[ti(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(r),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=n,i.lastOrigin=i.lastSelOrigin=t.origin,l||Te(e,"historyAdded")}function oi(e,t,r,n){var i=t.charAt(0);return"*"==i||"+"==i&&r.ranges.length==n.ranges.length&&r.somethingSelected()==n.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}function li(e,t,r,n){var i=e.history,o=n&&n.origin;r==i.lastSelOp||o&&i.lastSelOrigin==o&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==o||oi(e,o,g(i.done),t))?i.done[i.done.length-1]=t:si(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=o,i.lastSelOp=r,n&&!1!==n.clearRedo&&ri(i.undone)}function si(e,t){var r=g(t);r&&r.ranges&&r.equals(e)||t.push(e)}function ai(e,t,r,n){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,r),Math.min(e.first+e.size,n),function(r){r.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=r.markedSpans),++o})}function ui(e){if(!e)return null;for(var t,r=0;r<e.length;++r)e[r].marker.explicitlyCleared?t||(t=e.slice(0,r)):t&&t.push(e[r]);return t?t.length?t:null:e}function ci(e,t){var r=t["spans_"+e.id];if(!r)return null;for(var n=[],i=0;i<t.text.length;++i)n.push(ui(r[i]));return n}function fi(e,t){var r=ci(e,t),n=J(e,t);if(!r)return n;if(!n)return r;for(var i=0;i<r.length;++i){var o=r[i],l=n[i];if(o&&l)e:for(var s=0;s<l.length;++s){for(var a=l[s],u=0;u<o.length;++u)if(o[u].marker==a.marker)continue e;o.push(a)}else l&&(r[i]=l)}return r}function hi(e,t,r){for(var n=[],i=0;i<e.length;++i){var o=e[i];if(o.ranges)n.push(r?Ns.prototype.deepCopy.call(o):o);else{var l=o.changes,s=[];n.push({changes:s});for(var a=0;a<l.length;++a){var u=l[a],c=void 0;if(s.push({from:u.from,to:u.to,text:u.text}),t)for(var f in u)(c=f.match(/^spans_(\d+)$/))&&h(t,Number(c[1]))>-1&&(g(s)[f]=u[f],delete u[f])}}}return n}function di(e,t,r,n){if(n){var i=e.anchor;if(r){var o=E(t,i)<0;o!=E(r,i)<0?(i=t,t=r):o!=E(t,r)<0&&(t=r)}return new Os(i,t)}return new Os(r||t,t)}function pi(e,t,r,n,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),wi(e,new Ns([di(e.sel.primary(),t,r,i)],0),n)}function gi(e,t,r){for(var n=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o<e.sel.ranges.length;o++)n[o]=di(e.sel.ranges[o],t[o],null,i);wi(e,Rn(n,e.sel.primIndex),r)}function vi(e,t,r,n){var i=e.sel.ranges.slice(0);i[t]=r,wi(e,Rn(i,e.sel.primIndex),n)}function mi(e,t,r,n){wi(e,Bn(t,r),n)}function yi(e,t,r){var n={ranges:t.ranges,update:function(t){var r=this;this.ranges=[];for(var n=0;n<t.length;n++)r.ranges[n]=new Os(U(e,t[n].anchor),U(e,t[n].head))},origin:r&&r.origin};return Te(e,"beforeSelectionChange",e,n),e.cm&&Te(e.cm,"beforeSelectionChange",e.cm,n),n.ranges!=t.ranges?Rn(n.ranges,n.ranges.length-1):t}function bi(e,t,r){var n=e.history.done,i=g(n);i&&i.ranges?(n[n.length-1]=t,xi(e,t,r)):wi(e,t,r)}function wi(e,t,r){xi(e,t,r),li(e,e.sel,e.cm?e.cm.curOp.id:NaN,r)}function xi(e,t,r){(Oe(e,"beforeSelectionChange")||e.cm&&Oe(e.cm,"beforeSelectionChange"))&&(t=yi(e,t,r)),Ci(e,Li(e,t,r&&r.bias||(E(t.primary().head,e.sel.primary().head)<0?-1:1),!0)),r&&!1===r.scroll||!e.cm||Xr(e.cm)}function Ci(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=e.cm.curOp.selectionChanged=!0,Ne(e.cm)),wt(e,"cursorActivity",e))}function Si(e){Ci(e,Li(e,e.sel,null,!1))}function Li(e,t,r,n){for(var i,o=0;o<t.ranges.length;o++){var l=t.ranges[o],s=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],a=Ti(e,l.anchor,s&&s.anchor,r,n),u=Ti(e,l.head,s&&s.head,r,n);(i||a!=l.anchor||u!=l.head)&&(i||(i=t.ranges.slice(0,o)),i[o]=new Os(a,u))}return i?Rn(i,t.primIndex):t}function ki(e,t,r,n,i){var o=M(e,t.line);if(o.markedSpans)for(var l=0;l<o.markedSpans.length;++l){var s=o.markedSpans[l],a=s.marker;if((null==s.from||(a.inclusiveLeft?s.from<=t.ch:s.from<t.ch))&&(null==s.to||(a.inclusiveRight?s.to>=t.ch:s.to>t.ch))){if(i&&(Te(a,"beforeCursorEnter"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(!a.atomic)continue;if(r){var u=a.find(n<0?1:-1),c=void 0;if((n<0?a.inclusiveRight:a.inclusiveLeft)&&(u=Mi(e,u,-n,u&&u.line==t.line?o:null)),u&&u.line==t.line&&(c=E(u,r))&&(n<0?c<0:c>0))return ki(e,u,t,n,i)}var f=a.find(n<0?-1:1);return(n<0?a.inclusiveLeft:a.inclusiveRight)&&(f=Mi(e,f,n,f.line==t.line?o:null)),f?ki(e,f,t,n,i):null}}return t}function Ti(e,t,r,n,i){var o=n||1,l=ki(e,t,r,o,i)||!i&&ki(e,t,r,o,!0)||ki(e,t,r,-o,i)||!i&&ki(e,t,r,-o,!0);return l||(e.cantEdit=!0,P(e.first,0))}function Mi(e,t,r,n){return r<0&&0==t.ch?t.line>e.first?U(e,P(t.line-1)):null:r>0&&t.ch==(n||M(e,t.line)).text.length?t.line<e.first+e.size-1?P(t.line+1,0):null:new P(t.line,t.ch+r)}function Ni(e){e.setSelection(P(e.firstLine(),0),P(e.lastLine()),Kl)}function Oi(e,t,r){var n={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){return n.canceled=!0}};return r&&(n.update=function(t,r,i,o){t&&(n.from=U(e,t)),r&&(n.to=U(e,r)),i&&(n.text=i),void 0!==o&&(n.origin=o)}),Te(e,"beforeChange",e,n),e.cm&&Te(e.cm,"beforeChange",e.cm,n),n.canceled?null:{from:n.from,to:n.to,text:n.text,origin:n.origin}}function Ai(e,t,r){if(e.cm){if(!e.cm.curOp)return pn(e.cm,Ai)(e,t,r);if(e.cm.state.suppressEdits)return}if(!(Oe(e,"beforeChange")||e.cm&&Oe(e.cm,"beforeChange"))||(t=Oi(e,t,!0))){var n=$l&&!r&&te(e,t.from,t.to);if(n)for(var i=n.length-1;i>=0;--i)Wi(e,{from:n[i].from,to:n[i].to,text:i?[""]:t.text,origin:t.origin});else Wi(e,t)}}function Wi(e,t){if(1!=t.text.length||""!=t.text[0]||0!=E(t.from,t.to)){var r=Vn(e,t);ii(e,t,r,e.cm?e.cm.curOp.id:NaN),Fi(e,t,r,J(e,t));var n=[];$n(e,function(e,r){r||-1!=h(n,e.history)||(Ri(e.history,t),n.push(e.history)),Fi(e,t,null,J(e,t))})}}function Di(e,t,r){if(!e.cm||!e.cm.state.suppressEdits||r){for(var n,i=e.history,o=e.sel,l="undo"==t?i.done:i.undone,s="undo"==t?i.undone:i.done,a=0;a<l.length&&(n=l[a],r?!n.ranges||n.equals(e.sel):n.ranges);a++);if(a!=l.length){for(i.lastOrigin=i.lastSelOrigin=null;n=l.pop(),n.ranges;){if(si(n,s),r&&!n.equals(e.sel))return void wi(e,n,{clearRedo:!1});o=n}var u=[];si(o,s),s.push({changes:u,generation:i.generation}),i.generation=n.generation||++i.maxGeneration;for(var c=Oe(e,"beforeChange")||e.cm&&Oe(e.cm,"beforeChange"),f=n.changes.length-1;f>=0;--f){var d=function(r){var i=n.changes[r];if(i.origin=t,c&&!Oi(e,i,!1))return l.length=0,{};u.push(ti(e,i));var o=r?Vn(e,i):g(l);Fi(e,i,o,fi(e,i)),!r&&e.cm&&e.cm.scrollIntoView({from:i.from,to:Gn(i)});var s=[];$n(e,function(e,t){t||-1!=h(s,e.history)||(Ri(e.history,i),s.push(e.history)),Fi(e,i,null,fi(e,i))})}(f);if(d)return d.v}}}}function Hi(e,t){if(0!=t&&(e.first+=t,e.sel=new Ns(v(e.sel.ranges,function(e){return new Os(P(e.anchor.line+t,e.anchor.ch),P(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){mn(e.cm,e.first,e.first-t,t);for(var r=e.cm.display,n=r.viewFrom;n<r.viewTo;n++)yn(e.cm,n,"gutter")}}function Fi(e,t,r,n){if(e.cm&&!e.cm.curOp)return pn(e.cm,Fi)(e,t,r,n);if(t.to.line<e.first)return void Hi(e,t.text.length-1-(t.to.line-t.from.line));if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var i=t.text.length-1-(e.first-t.from.line);Hi(e,i),t={from:P(e.first,0),to:P(t.to.line+i,t.to.ch),text:[g(t.text)],origin:t.origin}}var o=e.lastLine();t.to.line>o&&(t={from:t.from,to:P(o,M(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=N(e,t.from,t.to),r||(r=Vn(e,t)),e.cm?Pi(e.cm,t,n):qn(e,t,n),xi(e,r,Kl)}}function Pi(e,t,r){var n=e.doc,i=e.display,o=t.from,l=t.to,s=!1,a=o.line;e.options.lineWrapping||(a=W(fe(M(n,o.line))),n.iter(a,l.line+1,function(e){if(e==i.maxLine)return s=!0,!0})),n.sel.contains(t.from,t.to)>-1&&Ne(e),qn(n,t,r,Cr(e)),e.options.lineWrapping||(n.iter(a,o.line+t.text.length,function(e){var t=be(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0)),it(n,o.line),Sn(e,400);var u=t.text.length-(l.line-o.line)-1;t.full?mn(e):o.line!=l.line||1!=t.text.length||_n(e.doc,t)?mn(e,o.line,l.line+1,u):yn(e,o.line,"text");var c=Oe(e,"changes"),f=Oe(e,"change");if(f||c){var h={from:o,to:l,text:t.text,removed:t.removed,origin:t.origin};f&&wt(e,"change",e,h),c&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(h)}e.display.selForContextMenu=null}function Ei(e,t,r,n,i){if(n||(n=r),E(n,r)<0){var o;o=[n,r],r=o[0],n=o[1]}"string"==typeof t&&(t=e.splitLines(t)),Ai(e,{from:r,to:n,text:t,origin:i})}function zi(e,t,r,n){r<e.line?e.line+=n:t<e.line&&(e.line=t,e.ch=0)}function Ii(e,t,r,n){for(var i=0;i<e.length;++i){var o=e[i],l=!0;if(o.ranges){o.copied||(o=e[i]=o.deepCopy(),o.copied=!0);for(var s=0;s<o.ranges.length;s++)zi(o.ranges[s].anchor,t,r,n),zi(o.ranges[s].head,t,r,n)}else{for(var a=0;a<o.changes.length;++a){var u=o.changes[a];if(r<u.from.line)u.from=P(u.from.line+n,u.from.ch),u.to=P(u.to.line+n,u.to.ch);else if(t<=u.to.line){l=!1;break}}l||(e.splice(0,i+1),i=0)}}}function Ri(e,t){var r=t.from.line,n=t.to.line,i=t.text.length-(n-r)-1;Ii(e.done,r,n,i),Ii(e.undone,r,n,i)}function Bi(e,t,r,n){var i=t,o=t;return"number"==typeof t?o=M(e,G(e,t)):i=W(t),null==i?null:(n(o,i)&&e.cm&&yn(e.cm,i,r),o)}function Gi(e){var t=this;this.lines=e,this.parent=null;for(var r=0,n=0;n<e.length;++n)e[n].parent=t,r+=e[n].height;this.height=r}function Ui(e){var t=this;this.children=e;for(var r=0,n=0,i=0;i<e.length;++i){var o=e[i];r+=o.chunkSize(),n+=o.height,o.parent=t}this.size=r,this.height=n,this.parent=null}function Vi(e,t,r){ye(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&jr(e,r)}function Ki(e,t,r,n){var i=new As(e,r,n),o=e.cm;return o&&i.noHScroll&&(o.display.alignWidgets=!0),Bi(e,t,"widget",function(t){var r=t.widgets||(t.widgets=[]);if(null==i.insertAt?r.push(i):r.splice(Math.min(r.length-1,Math.max(0,i.insertAt)),0,i),i.line=t,o&&!ve(e,t)){var n=ye(t)<e.scrollTop;A(t,t.height+Ft(i)),n&&jr(o,i.height),o.curOp.forceUpdate=!0}return!0}),wt(o,"lineWidgetAdded",o,i,"number"==typeof t?t:W(t)),i}function ji(e,t,r,n,o){if(n&&n.shared)return Xi(e,t,r,n,o);if(e.cm&&!e.cm.curOp)return pn(e.cm,ji)(e,t,r,n,o);var l=new Ds(e,o),s=E(t,r);if(n&&c(n,l,!1),s>0||0==s&&!1!==l.clearWhenEmpty)return l;if(l.replacedWith&&(l.collapsed=!0,l.widgetNode=i("span",[l.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||l.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(l.widgetNode.insertLeft=!0)),l.collapsed){if(ce(e,t.line,t,r,l)||t.line!=r.line&&ce(e,r.line,t,r,l))throw new Error("Inserting collapsed marker partially overlapping an existing one");X()}l.addToHistory&&ii(e,{from:t,to:r,origin:"markText"},e.sel,NaN);var a,u=t.line,f=e.cm;if(e.iter(u,r.line+1,function(e){f&&l.collapsed&&!f.options.lineWrapping&&fe(e)==f.display.maxLine&&(a=!0),l.collapsed&&u!=t.line&&A(e,0),$(e,new Y(l,u==t.line?t.ch:null,u==r.line?r.ch:null)),++u}),l.collapsed&&e.iter(t.line,r.line+1,function(t){ve(e,t)&&A(t,0)}),l.clearOnEnter&&ts(l,"beforeCursorEnter",function(){return l.clear()}),l.readOnly&&(j(),(e.history.done.length||e.history.undone.length)&&e.clearHistory()),l.collapsed&&(l.id=++Ws,l.atomic=!0),f){if(a&&(f.curOp.updateMaxLine=!0),l.collapsed)mn(f,t.line,r.line+1);else if(l.className||l.title||l.startStyle||l.endStyle||l.css)for(var h=t.line;h<=r.line;h++)yn(f,h,"text");l.atomic&&Si(f.doc),wt(f,"markerAdded",f,l)}return l}function Xi(e,t,r,n,i){n=c(n),n.shared=!1;var o=[ji(e,t,r,n,i)],l=o[0],s=n.widgetNode;return $n(e,function(e){s&&(n.widgetNode=s.cloneNode(!0)),o.push(ji(e,U(e,t),U(e,r),n,i));for(var a=0;a<e.linked.length;++a)if(e.linked[a].isParent)return;l=g(o)}),new Hs(o,l)}function Yi(e){return e.findMarks(P(e.first,0),e.clipPos(P(e.lastLine())),function(e){return e.parent})}function _i(e,t){for(var r=0;r<t.length;r++){var n=t[r],i=n.find(),o=e.clipPos(i.from),l=e.clipPos(i.to);if(E(o,l)){var s=ji(e,o,l,n.primary,n.primary.type);n.markers.push(s),s.parent=n}}}function qi(e){for(var t=0;t<e.length;t++)!function(t){var r=e[t],n=[r.primary.doc];$n(r.primary.doc,function(e){return n.push(e)});for(var i=0;i<r.markers.length;i++){var o=r.markers[i];-1==h(n,o.doc)&&(o.parent=null,r.markers.splice(i--,1))}}(t)}function $i(e){var t=this;if(Ji(t),!Me(t,e)&&!Pt(t.display,e)){We(e),yl&&(Es=+new Date);var r=Lr(t,e,!0),n=e.dataTransfer.files;if(r&&!t.isReadOnly())if(n&&n.length&&window.FileReader&&window.File)for(var i=n.length,o=Array(i),l=0,s=0;s<i;++s)!function(e,n){if(!t.options.allowDropFileTypes||-1!=h(t.options.allowDropFileTypes,e.type)){var s=new FileReader;s.onload=pn(t,function(){var e=s.result;if(/[\x00-\x08\x0e-\x1f]{2}/.test(e)&&(e=""),o[n]=e,++l==i){r=U(t.doc,r);var a={from:r,to:r,text:t.doc.splitLines(o.join(t.doc.lineSeparator())),origin:"paste"};Ai(t.doc,a),bi(t.doc,Bn(r,Gn(a)))}}),s.readAsText(e)}}(n[s],s);else{if(t.state.draggingText&&t.doc.sel.contains(r)>-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var a=e.dataTransfer.getData("Text");if(a){var u;if(t.state.draggingText&&!t.state.draggingText.copy&&(u=t.listSelections()),xi(t.doc,Bn(r,r)),u)for(var c=0;c<u.length;++c)Ei(t.doc,"",u[c].anchor,u[c].head,"drag");t.replaceSelection(a,"around","paste"),t.display.input.focus()}}catch(e){}}}}function Zi(e,t){if(yl&&(!e.state.draggingText||+new Date-Es<100))return void Fe(t);if(!Me(e,t)&&!Pt(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!Ll)){var r=n("img",null,null,"position: fixed; left: 0; top: 0;");r.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",Sl&&(r.width=r.height=1,e.display.wrapper.appendChild(r),r._top=r.offsetTop),t.dataTransfer.setDragImage(r,0,0),Sl&&r.parentNode.removeChild(r)}}function Qi(e,t){var i=Lr(e,t);if(i){var o=document.createDocumentFragment();Nr(e,i,o),e.display.dragCursor||(e.display.dragCursor=n("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),r(e.display.dragCursor,o)}}function Ji(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function eo(e){if(document.getElementsByClassName)for(var t=document.getElementsByClassName("CodeMirror"),r=0;r<t.length;r++){var n=t[r].CodeMirror;n&&e(n)}}function to(){zs||(ro(),zs=!0)}function ro(){var e;ts(window,"resize",function(){null==e&&(e=setTimeout(function(){e=null,eo(no)},100))}),ts(window,"blur",function(){return eo(Pr)})}function no(e){var t=e.display;t.lastWrapHeight==t.wrapper.clientHeight&&t.lastWrapWidth==t.wrapper.clientWidth||(t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize())}function io(e){var t=e.split(/-(?!$)/);e=t[t.length-1];for(var r,n,i,o,l=0;l<t.length-1;l++){var s=t[l];if(/^(cmd|meta|m)$/i.test(s))o=!0;else if(/^a(lt)?$/i.test(s))r=!0;else if(/^(c|ctrl|control)$/i.test(s))n=!0;else{if(!/^s(hift)?$/i.test(s))throw new Error("Unrecognized modifier name: "+s);i=!0}}return r&&(e="Alt-"+e),n&&(e="Ctrl-"+e),o&&(e="Cmd-"+e),i&&(e="Shift-"+e),e}function oo(e){var t={};for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];if(/^(name|fallthrough|(de|at)tach)$/.test(r))continue;if("..."==n){delete e[r];continue}for(var i=v(r.split(" "),io),o=0;o<i.length;o++){var l=void 0,s=void 0;o==i.length-1?(s=i.join(" "),l=n):(s=i.slice(0,o+1).join(" "),l="...");var a=t[s];if(a){if(a!=l)throw new Error("Inconsistent bindings for "+s)}else t[s]=l}delete e[r]}for(var u in t)e[u]=t[u];return e}function lo(e,t,r,n){t=co(t);var i=t.call?t.call(e,n):t[e];if(!1===i)return"nothing";if("..."===i)return"multi";if(null!=i&&r(i))return"handled";if(t.fallthrough){if("[object Array]"!=Object.prototype.toString.call(t.fallthrough))return lo(e,t.fallthrough,r,n);for(var o=0;o<t.fallthrough.length;o++){var l=lo(e,t.fallthrough[o],r,n);if(l)return l}}}function so(e){var t="string"==typeof e?e:Is[e.keyCode];return"Ctrl"==t||"Alt"==t||"Shift"==t||"Mod"==t}function ao(e,t,r){var n=e;return t.altKey&&"Alt"!=n&&(e="Alt-"+e),(Pl?t.metaKey:t.ctrlKey)&&"Ctrl"!=n&&(e="Ctrl-"+e),(Pl?t.ctrlKey:t.metaKey)&&"Cmd"!=n&&(e="Cmd-"+e),!r&&t.shiftKey&&"Shift"!=n&&(e="Shift-"+e),e}function uo(e,t){if(Sl&&34==e.keyCode&&e.char)return!1;var r=Is[e.keyCode];return null!=r&&!e.altGraphKey&&ao(r,e,t)}function co(e){return"string"==typeof e?Us[e]:e}function fo(e,t){for(var r=e.doc.sel.ranges,n=[],i=0;i<r.length;i++){for(var o=t(r[i]);n.length&&E(o.from,g(n).to)<=0;){var l=n.pop();if(E(l.from,o.from)<0){o.from=l.from;break}}n.push(o)}dn(e,function(){for(var t=n.length-1;t>=0;t--)Ei(e.doc,"",n[t].from,n[t].to,"+delete");Xr(e)})}function ho(e,t,r){var n=L(e.text,t+r,r);return n<0||n>e.text.length?null:n}function po(e,t,r){var n=ho(e,t.ch,r);return null==n?null:new P(t.line,n,r<0?"after":"before")}function go(e,t,r,n,i){if(e){var o=Se(r,t.doc.direction);if(o){var l,s=i<0?g(o):o[0],a=i<0==(1==s.level),u=a?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var c=Yt(t,r);l=i<0?r.text.length-1:0;var f=_t(t,c,l).top;l=k(function(e){return _t(t,c,e).top==f},i<0==(1==s.level)?s.from:s.to-1,l),"before"==u&&(l=ho(r,l,1))}else l=i<0?s.to:s.from;return new P(n,l,u)}}return new P(n,i<0?r.text.length:0,i<0?"before":"after")}function vo(e,t,r,n){var i=Se(t,e.doc.direction);if(!i)return po(t,r,n);r.ch>=t.text.length?(r.ch=t.text.length,r.sticky="before"):r.ch<=0&&(r.ch=0,r.sticky="after");var o=Ce(i,r.ch,r.sticky),l=i[o];if("ltr"==e.doc.direction&&l.level%2==0&&(n>0?l.to>r.ch:l.from<r.ch))return po(t,r,n);var s,a=function(e,r){return ho(t,e instanceof P?e.ch:e,r)},u=function(r){return e.options.lineWrapping?(s=s||Yt(e,t),dr(e,t,s,r)):{begin:0,end:t.text.length}},c=u("before"==r.sticky?a(r,-1):r.ch);if("rtl"==e.doc.direction||1==l.level){var f=1==l.level==n<0,h=a(r,f?1:-1);if(null!=h&&(f?h<=l.to&&h<=c.end:h>=l.from&&h>=c.begin)){var d=f?"before":"after";return new P(r.line,h,d)}}var p=function(e,t,n){for(var o=function(e,t){return t?new P(r.line,a(e,1),"before"):new P(r.line,e,"after")};e>=0&&e<i.length;e+=t){var l=i[e],s=t>0==(1!=l.level),u=s?n.begin:a(n.end,-1);if(l.from<=u&&u<l.to)return o(u,s);if(u=s?l.from:a(l.to,-1),n.begin<=u&&u<n.end)return o(u,s)}},g=p(o+n,n,c);if(g)return g;var v=n>0?c.end:a(c.begin,-1);return null==v||n>0&&v==t.text.length||!(g=p(n>0?0:i.length-1,n,u(v)))?null:g}function mo(e,t){var r=M(e.doc,t),n=fe(r);return n!=r&&(t=W(n)),go(!0,e,n,t,1)}function yo(e,t){var r=M(e.doc,t),n=he(r);return n!=r&&(t=W(n)),go(!0,e,r,t,-1)}function bo(e,t){var r=mo(e,t.line),n=M(e.doc,r.line),i=Se(n,e.doc.direction);if(!i||0==i[0].level){var o=Math.max(0,n.text.search(/\S/)),l=t.line==r.line&&t.ch<=o&&t.ch;return P(r.line,l?0:o,r.sticky)}return r}function wo(e,t,r){if("string"==typeof t&&!(t=Vs[t]))return!1;e.display.input.ensurePolled();var n=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),r&&(e.display.shift=!1),i=t(e)!=Vl}finally{e.display.shift=n,e.state.suppressEdits=!1}return i}function xo(e,t,r){for(var n=0;n<e.state.keyMaps.length;n++){var i=lo(t,e.state.keyMaps[n],r,e);if(i)return i}return e.options.extraKeys&&lo(t,e.options.extraKeys,r,e)||lo(t,e.options.keyMap,r,e)}function Co(e,t,r,n){var i=e.state.keySeq;if(i){if(so(t))return"handled";if(/\'$/.test(t)?e.state.keySeq=null:Ks.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),So(e,i+" "+t,r,n))return!0}return So(e,t,r,n)}function So(e,t,r,n){var i=xo(e,t,n);return"multi"==i&&(e.state.keySeq=t),"handled"==i&&wt(e,"keyHandled",e,t,r),"handled"!=i&&"multi"!=i||(We(r),Wr(e)),!!i}function Lo(e,t){var r=uo(t,!0);return!!r&&(t.shiftKey&&!e.state.keySeq?Co(e,"Shift-"+r,t,function(t){return wo(e,t,!0)})||Co(e,r,t,function(t){if("string"==typeof t?/^go[A-Z]/.test(t):t.motion)return wo(e,t)}):Co(e,r,t,function(t){return wo(e,t)}))}function ko(e,t,r){return Co(e,"'"+r+"'",t,function(t){return wo(e,t,!0)})}function To(e){var t=this;if(t.curOp.focus=l(),!Me(t,e)){yl&&bl<11&&27==e.keyCode&&(e.returnValue=!1);var r=e.keyCode;t.display.shift=16==r||e.shiftKey;var n=Lo(t,e);Sl&&(js=n?r:null,!n&&88==r&&!os&&(Al?e.metaKey:e.ctrlKey)&&t.replaceSelection("",null,"cut")),18!=r||/\bCodeMirror-crosshair\b/.test(t.display.lineDiv.className)||Mo(t)}}function Mo(e){function t(e){18!=e.keyCode&&e.altKey||(zl(r,"CodeMirror-crosshair"),ke(document,"keyup",t),ke(document,"mouseover",t))}var r=e.display.lineDiv;s(r,"CodeMirror-crosshair"),ts(document,"keyup",t),ts(document,"mouseover",t)}function No(e){16==e.keyCode&&(this.doc.sel.shift=!1),Me(this,e)}function Oo(e){var t=this;if(!(Pt(t.display,e)||Me(t,e)||e.ctrlKey&&!e.altKey||Al&&e.metaKey)){var r=e.keyCode,n=e.charCode;if(Sl&&r==js)return js=null,void We(e);if(!Sl||e.which&&!(e.which<10)||!Lo(t,e)){var i=String.fromCharCode(null==n?r:n);"\b"!=i&&(ko(t,e,i)||t.display.input.onKeyPress(e))}}}function Ao(e,t){var r=+new Date;return _s&&_s.compare(r,e,t)?(Ys=_s=null,"triple"):Ys&&Ys.compare(r,e,t)?(_s=new Xs(r,e,t),Ys=null,"double"):(Ys=new Xs(r,e,t),_s=null,"single")}function Wo(e){var t=this,r=t.display;if(!(Me(t,e)||r.activeTouch&&r.input.supportsTouch())){if(r.input.ensurePolled(),r.shift=e.shiftKey,Pt(r,e))return void(wl||(r.scroller.draggable=!1,setTimeout(function(){return r.scroller.draggable=!0},100)));if(!Bo(t,e)){var n=Lr(t,e),i=Ee(e),o=n?Ao(n,i):"single";window.focus(),1==i&&t.state.selectingText&&t.state.selectingText(e),n&&Do(t,i,n,o,e)||(1==i?n?Fo(t,n,o,e):Pe(e)==r.scroller&&We(e):2==i?(n&&pi(t.doc,n),setTimeout(function(){return r.input.focus()},20)):3==i&&(El?Go(t,e):Hr(t)))}}}function Do(e,t,r,n,i){var o="Click";return"double"==n?o="Double"+o:"triple"==n&&(o="Triple"+o),o=(1==t?"Left":2==t?"Middle":"Right")+o,Co(e,ao(o,i),i,function(t){if("string"==typeof t&&(t=Vs[t]),!t)return!1;var n=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n=t(e,r)!=Vl}finally{e.state.suppressEdits=!1}return n})}function Ho(e,t,r){var n=e.getOption("configureMouse"),i=n?n(e,t,r):{};if(null==i.unit){var o=Wl?r.shiftKey&&r.metaKey:r.altKey;i.unit=o?"rectangle":"single"==t?"char":"double"==t?"word":"line"}return(null==i.extend||e.doc.extend)&&(i.extend=e.doc.extend||r.shiftKey),null==i.addNew&&(i.addNew=Al?r.metaKey:r.ctrlKey),null==i.moveOnDrag&&(i.moveOnDrag=!(Al?r.altKey:r.ctrlKey)),i}function Fo(e,t,r,n){yl?setTimeout(u(Dr,e),0):e.curOp.focus=l();var i,o=Ho(e,r,n),s=e.doc.sel;e.options.dragDrop&&rs&&!e.isReadOnly()&&"single"==r&&(i=s.contains(t))>-1&&(E((i=s.ranges[i]).from(),t)<0||t.xRel>0)&&(E(i.to(),t)>0||t.xRel<0)?Po(e,n,t,o):zo(e,n,t,o)}function Po(e,t,r,n){var i=e.display,o=!1,l=pn(e,function(t){wl&&(i.scroller.draggable=!1),e.state.draggingText=!1,ke(document,"mouseup",l),ke(document,"mousemove",s),ke(i.scroller,"dragstart",a),ke(i.scroller,"drop",l),o||(We(t),n.addNew||pi(e.doc,r,null,null,n.extend),wl||yl&&9==bl?setTimeout(function(){document.body.focus(),i.input.focus()},20):i.input.focus())}),s=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},a=function(){return o=!0};wl&&(i.scroller.draggable=!0),e.state.draggingText=l,l.copy=!n.moveOnDrag,i.scroller.dragDrop&&i.scroller.dragDrop(),ts(document,"mouseup",l),ts(document,"mousemove",s),ts(i.scroller,"dragstart",a),ts(i.scroller,"drop",l),Hr(e),setTimeout(function(){return i.input.focus()},20)}function Eo(e,t,r){if("char"==r)return new Os(t,t);if("word"==r)return e.findWordAt(t);if("line"==r)return new Os(P(t.line,0),U(e.doc,P(t.line+1,0)));var n=r(e,t);return new Os(n.from,n.to)}function zo(e,t,r,n){function i(t){if(0!=E(m,t))if(m=t,"rectangle"==n.unit){for(var i=[],o=e.options.tabSize,l=f(M(u,r.line).text,r.ch,o),s=f(M(u,t.line).text,t.ch,o),a=Math.min(l,s),g=Math.max(l,s),v=Math.min(r.line,t.line),y=Math.min(e.lastLine(),Math.max(r.line,t.line));v<=y;v++){var b=M(u,v).text,w=d(b,a,o);a==g?i.push(new Os(P(v,w),P(v,w))):b.length>w&&i.push(new Os(P(v,w),P(v,d(b,g,o))))}i.length||i.push(new Os(r,r)),wi(u,Rn(p.ranges.slice(0,h).concat(i),h),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var x,C=c,S=Eo(e,t,n.unit),L=C.anchor;E(S.anchor,L)>0?(x=S.head,L=B(C.from(),S.anchor)):(x=S.anchor,L=R(C.to(),S.head));var k=p.ranges.slice(0);k[h]=Io(e,new Os(U(u,L),x)),wi(u,Rn(k,h),jl)}}function o(t){var r=++b,s=Lr(e,t,!0,"rectangle"==n.unit);if(s)if(0!=E(s,m)){e.curOp.focus=l(),i(s);var c=Ir(a,u);(s.line>=c.to||s.line<c.from)&&setTimeout(pn(e,function(){b==r&&o(t)}),150)}else{var f=t.clientY<y.top?-20:t.clientY>y.bottom?20:0;f&&setTimeout(pn(e,function(){b==r&&(a.scroller.scrollTop+=f,o(t))}),50)}}function s(t){e.state.selectingText=!1,b=1/0,We(t),a.input.focus(),ke(document,"mousemove",w),ke(document,"mouseup",x),u.history.lastSelOrigin=null}var a=e.display,u=e.doc;We(t);var c,h,p=u.sel,g=p.ranges;if(n.addNew&&!n.extend?(h=u.sel.contains(r),c=h>-1?g[h]:new Os(r,r)):(c=u.sel.primary(),h=u.sel.primIndex),"rectangle"==n.unit)n.addNew||(c=new Os(r,r)),r=Lr(e,t,!0,!0),h=-1;else{var v=Eo(e,r,n.unit);c=n.extend?di(c,v.anchor,v.head,n.extend):v}n.addNew?-1==h?(h=g.length,wi(u,Rn(g.concat([c]),h),{scroll:!1,origin:"*mouse"})):g.length>1&&g[h].empty()&&"char"==n.unit&&!n.extend?(wi(u,Rn(g.slice(0,h).concat(g.slice(h+1)),0),{scroll:!1,origin:"*mouse"}),p=u.sel):vi(u,h,c,jl):(h=0,wi(u,new Ns([c],0),jl),p=u.sel);var m=r,y=a.wrapper.getBoundingClientRect(),b=0,w=pn(e,function(e){Ee(e)?o(e):s(e)}),x=pn(e,s);e.state.selectingText=x,ts(document,"mousemove",w),ts(document,"mouseup",x)}function Io(e,t){var r=t.anchor,n=t.head,i=M(e.doc,r.line);if(0==E(r,n)&&r.sticky==n.sticky)return t;var o=Se(i);if(!o)return t;var l=Ce(o,r.ch,r.sticky),s=o[l];if(s.from!=r.ch&&s.to!=r.ch)return t;var a=l+(s.from==r.ch==(1!=s.level)?0:1);if(0==a||a==o.length)return t;var u;if(n.line!=r.line)u=(n.line-r.line)*("ltr"==e.doc.direction?1:-1)>0;else{var c=Ce(o,n.ch,n.sticky),f=c-l||(n.ch-r.ch)*(1==s.level?-1:1);u=c==a-1||c==a?f<0:f>0}var h=o[a+(u?-1:0)],d=u==(1==h.level),p=d?h.from:h.to,g=d?"after":"before";return r.ch==p&&r.sticky==g?t:new Os(new P(r.line,p,g),n)}function Ro(e,t,r,n){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;n&&We(t);var l=e.display,s=l.lineDiv.getBoundingClientRect();if(o>s.bottom||!Oe(e,r))return He(t);o-=s.top-l.viewOffset;for(var a=0;a<e.options.gutters.length;++a){var u=l.gutters.childNodes[a];if(u&&u.getBoundingClientRect().right>=i){return Te(e,r,e,D(e.doc,o),e.options.gutters[a],t),He(t)}}}function Bo(e,t){return Ro(e,t,"gutterClick",!0)}function Go(e,t){Pt(e.display,t)||Uo(e,t)||Me(e,t,"contextmenu")||e.display.input.onContextMenu(t)}function Uo(e,t){return!!Oe(e,"gutterContextMenu")&&Ro(e,t,"gutterContextMenu",!1)}function Vo(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),tr(e)}function Ko(e){Fn(e),mn(e),Rr(e)}function jo(e,t,r){if(!t!=!(r&&r!=qs)){var n=e.display.dragFunctions,i=t?ts:ke;i(e.display.scroller,"dragstart",n.start),i(e.display.scroller,"dragenter",n.enter),i(e.display.scroller,"dragover",n.over),i(e.display.scroller,"dragleave",n.leave),i(e.display.scroller,"drop",n.drop)}}function Xo(e){e.options.lineWrapping?(s(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(zl(e.display.wrapper,"CodeMirror-wrap"),we(e)),Sr(e),mn(e),tr(e),setTimeout(function(){return tn(e)},100)}function Yo(e,t){var r=this;if(!(this instanceof Yo))return new Yo(e,t);this.options=t=t?c(t):{},c($s,t,!1),Pn(t);var n=t.value;"string"==typeof n&&(n=new Ps(n,t.mode,null,t.lineSeparator,t.direction)),this.doc=n;var i=new Yo.inputStyles[t.inputStyle](this),o=this.display=new T(e,n,i);o.wrapper.CodeMirror=this,Fn(this),Vo(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),nn(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new Rl,keySeq:null,specialChars:null},t.autofocus&&!Ol&&o.input.focus(),yl&&bl<11&&setTimeout(function(){return r.display.input.reset(!0)},20),_o(this),to(),on(this),this.curOp.forceUpdate=!0,Zn(this,n),t.autofocus&&!Ol||this.hasFocus()?setTimeout(u(Fr,this),20):Pr(this);for(var l in Zs)Zs.hasOwnProperty(l)&&Zs[l](r,t[l],qs);Br(this),t.finishInit&&t.finishInit(this);for(var s=0;s<Qs.length;++s)Qs[s](r);ln(this),wl&&t.lineWrapping&&"optimizelegibility"==getComputedStyle(o.lineDiv).textRendering&&(o.lineDiv.style.textRendering="auto")}function _o(e){function t(){i.activeTouch&&(o=setTimeout(function(){return i.activeTouch=null},1e3),l=i.activeTouch,l.end=+new Date)}function r(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}function n(e,t){if(null==t.left)return!0;var r=t.left-e.left,n=t.top-e.top;return r*r+n*n>400}var i=e.display;ts(i.scroller,"mousedown",pn(e,Wo)),yl&&bl<11?ts(i.scroller,"dblclick",pn(e,function(t){if(!Me(e,t)){var r=Lr(e,t);if(r&&!Bo(e,t)&&!Pt(e.display,t)){We(t);var n=e.findWordAt(r);pi(e.doc,n.anchor,n.head)}}})):ts(i.scroller,"dblclick",function(t){return Me(e,t)||We(t)}),El||ts(i.scroller,"contextmenu",function(t){return Go(e,t)});var o,l={end:0};ts(i.scroller,"touchstart",function(t){if(!Me(e,t)&&!r(t)&&!Bo(e,t)){i.input.ensurePolled(),clearTimeout(o);var n=+new Date;i.activeTouch={start:n,moved:!1,prev:n-l.end<=300?l:null},1==t.touches.length&&(i.activeTouch.left=t.touches[0].pageX,i.activeTouch.top=t.touches[0].pageY)}}),ts(i.scroller,"touchmove",function(){i.activeTouch&&(i.activeTouch.moved=!0)}),
+ts(i.scroller,"touchend",function(r){var o=i.activeTouch;if(o&&!Pt(i,r)&&null!=o.left&&!o.moved&&new Date-o.start<300){var l,s=e.coordsChar(i.activeTouch,"page");l=!o.prev||n(o,o.prev)?new Os(s,s):!o.prev.prev||n(o,o.prev.prev)?e.findWordAt(s):new Os(P(s.line,0),U(e.doc,P(s.line+1,0))),e.setSelection(l.anchor,l.head),e.focus(),We(r)}t()}),ts(i.scroller,"touchcancel",t),ts(i.scroller,"scroll",function(){i.scroller.clientHeight&&(Zr(e,i.scroller.scrollTop),Jr(e,i.scroller.scrollLeft,!0),Te(e,"scroll",e))}),ts(i.scroller,"mousewheel",function(t){return In(e,t)}),ts(i.scroller,"DOMMouseScroll",function(t){return In(e,t)}),ts(i.wrapper,"scroll",function(){return i.wrapper.scrollTop=i.wrapper.scrollLeft=0}),i.dragFunctions={enter:function(t){Me(e,t)||Fe(t)},over:function(t){Me(e,t)||(Qi(e,t),Fe(t))},start:function(t){return Zi(e,t)},drop:pn(e,$i),leave:function(t){Me(e,t)||Ji(e)}};var s=i.input.getField();ts(s,"keyup",function(t){return No.call(e,t)}),ts(s,"keydown",pn(e,To)),ts(s,"keypress",pn(e,Oo)),ts(s,"focus",function(t){return Fr(e,t)}),ts(s,"blur",function(t){return Pr(e,t)})}function qo(e,t,r,n){var i,o=e.doc;null==r&&(r="add"),"smart"==r&&(o.mode.indent?i=$e(e,t).state:r="prev");var l=e.options.tabSize,s=M(o,t),a=f(s.text,null,l);s.stateAfter&&(s.stateAfter=null);var u,c=s.text.match(/^\s*/)[0];if(n||/\S/.test(s.text)){if("smart"==r&&((u=o.mode.indent(i,s.text.slice(c.length),s.text))==Vl||u>150)){if(!n)return;r="prev"}}else u=0,r="not";"prev"==r?u=t>o.first?f(M(o,t-1).text,null,l):0:"add"==r?u=a+e.options.indentUnit:"subtract"==r?u=a-e.options.indentUnit:"number"==typeof r&&(u=a+r),u=Math.max(0,u);var h="",d=0;if(e.options.indentWithTabs)for(var g=Math.floor(u/l);g;--g)d+=l,h+="\t";if(d<u&&(h+=p(u-d)),h!=c)return Ei(o,h,P(t,0),P(t,c.length),"+input"),s.stateAfter=null,!0;for(var v=0;v<o.sel.ranges.length;v++){var m=o.sel.ranges[v];if(m.head.line==t&&m.head.ch<c.length){var y=P(t,c.length);vi(o,v,new Os(y,y));break}}}function $o(e){Js=e}function Zo(e,t,r,n,i){var o=e.doc;e.display.shift=!1,n||(n=o.sel);var l=e.state.pasteIncoming||"paste"==i,s=ns(t),a=null;if(l&&n.ranges.length>1)if(Js&&Js.text.join("\n")==t){if(n.ranges.length%Js.text.length==0){a=[];for(var u=0;u<Js.text.length;u++)a.push(o.splitLines(Js.text[u]))}}else s.length==n.ranges.length&&e.options.pasteLinesPerSelection&&(a=v(s,function(e){return[e]}));for(var c,f=n.ranges.length-1;f>=0;f--){var h=n.ranges[f],d=h.from(),p=h.to();h.empty()&&(r&&r>0?d=P(d.line,d.ch-r):e.state.overwrite&&!l?p=P(p.line,Math.min(M(o,p.line).text.length,p.ch+g(s).length)):Js&&Js.lineWise&&Js.text.join("\n")==t&&(d=p=P(d.line,0))),c=e.curOp.updateInput;var m={from:d,to:p,text:a?a[f%a.length]:s,origin:i||(l?"paste":e.state.cutIncoming?"cut":"+input")};Ai(e.doc,m),wt(e,"inputRead",e,m)}t&&!l&&Jo(e,t),Xr(e),e.curOp.updateInput=c,e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function Qo(e,t){var r=e.clipboardData&&e.clipboardData.getData("Text");if(r)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||dn(t,function(){return Zo(t,r,0,null,"paste")}),!0}function Jo(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var r=e.doc.sel,n=r.ranges.length-1;n>=0;n--){var i=r.ranges[n];if(!(i.head.ch>100||n&&r.ranges[n-1].head.line==i.head.line)){var o=e.getModeAt(i.head),l=!1;if(o.electricChars){for(var s=0;s<o.electricChars.length;s++)if(t.indexOf(o.electricChars.charAt(s))>-1){l=qo(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(M(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=qo(e,i.head.line,"smart"));l&&wt(e,"electricInput",e,i.head.line)}}}function el(e){for(var t=[],r=[],n=0;n<e.doc.sel.ranges.length;n++){var i=e.doc.sel.ranges[n].head.line,o={anchor:P(i,0),head:P(i+1,0)};r.push(o),t.push(e.getRange(o.anchor,o.head))}return{text:t,ranges:r}}function tl(e,t){e.setAttribute("autocorrect","off"),e.setAttribute("autocapitalize","off"),e.setAttribute("spellcheck",!!t)}function rl(){var e=n("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),t=n("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return wl?e.style.width="1000px":e.setAttribute("wrap","off"),Ml&&(e.style.border="1px solid black"),tl(e),t}function nl(e,t,r,n,i){function o(){var n=t.line+r;return!(n<e.first||n>=e.first+e.size)&&(t=new P(n,t.ch,t.sticky),u=M(e,n))}function l(n){var l;if(null==(l=i?vo(e.cm,u,t,r):po(u,t,r))){if(n||!o())return!1;t=go(i,e.cm,u,t.line,r)}else t=l;return!0}var s=t,a=r,u=M(e,t.line);if("char"==n)l();else if("column"==n)l(!0);else if("word"==n||"group"==n)for(var c=null,f="group"==n,h=e.cm&&e.cm.getHelper(t,"wordChars"),d=!0;!(r<0)||l(!d);d=!1){var p=u.text.charAt(t.ch)||"\n",g=x(p,h)?"w":f&&"\n"==p?"n":!f||/\s/.test(p)?null:"p";if(!f||d||g||(g="s"),c&&c!=g){r<0&&(r=1,l(),t.sticky="after");break}if(g&&(c=g),r>0&&!l(!d))break}var v=Ti(e,t,s,a,!0);return z(s,v)&&(v.hitSide=!0),v}function il(e,t,r,n){var i,o=e.doc,l=t.left;if("page"==n){var s=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),a=Math.max(s-.5*yr(e.display),3);i=(r>0?t.bottom:t.top)+r*a}else"line"==n&&(i=r>0?t.bottom+3:t.top-3);for(var u;u=fr(e,l,i),u.outside;){if(r<0?i<=0:i>=o.height){u.hitSide=!0;break}i+=5*r}return u}function ol(e,t){var r=Xt(e,t.line);if(!r||r.hidden)return null;var n=M(e.doc,t.line),i=Vt(r,n,t.line),o=Se(n,e.doc.direction),l="left";if(o){l=Ce(o,t.ch)%2?"right":"left"}var s=qt(i.map,t.ch,l);return s.offset="right"==s.collapse?s.end:s.start,s}function ll(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}function sl(e,t){return t&&(e.bad=!0),e}function al(e,t,r,n,i){function o(e){return function(t){return t.id==e}}function l(){c&&(u+=f,c=!1)}function s(e){e&&(l(),u+=e)}function a(t){if(1==t.nodeType){var r=t.getAttribute("cm-text");if(null!=r)return void s(r||t.textContent.replace(/\u200b/g,""));var u,h=t.getAttribute("cm-marker");if(h){var d=e.findMarks(P(n,0),P(i+1,0),o(+h));return void(d.length&&(u=d[0].find(0))&&s(N(e.doc,u.from,u.to).join(f)))}if("false"==t.getAttribute("contenteditable"))return;var p=/^(pre|div|p)$/i.test(t.nodeName);p&&l();for(var g=0;g<t.childNodes.length;g++)a(t.childNodes[g]);p&&(c=!0)}else 3==t.nodeType&&s(t.nodeValue)}for(var u="",c=!1,f=e.doc.lineSeparator();a(t),t!=r;)t=t.nextSibling;return u}function ul(e,t,r){var n;if(t==e.display.lineDiv){if(!(n=e.display.lineDiv.childNodes[r]))return sl(e.clipPos(P(e.display.viewTo-1)),!0);t=null,r=0}else for(n=t;;n=n.parentNode){if(!n||n==e.display.lineDiv)return null;if(n.parentNode&&n.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var o=e.display.view[i];if(o.node==n)return cl(o,t,r)}}function cl(e,t,r){function n(t,r,n){for(var i=-1;i<(f?f.length:0);i++)for(var o=i<0?c.map:f[i],l=0;l<o.length;l+=3){var s=o[l+2];if(s==t||s==r){var a=W(i<0?e.line:e.rest[i]),u=o[l]+n;return(n<0||s!=t)&&(u=o[l+(n?1:0)]),P(a,u)}}}var i=e.text.firstChild,l=!1;if(!t||!o(i,t))return sl(P(W(e.line),0),!0);if(t==i&&(l=!0,t=i.childNodes[r],r=0,!t)){var s=e.rest?g(e.rest):e.line;return sl(P(W(s),s.text.length),l)}var a=3==t.nodeType?t:null,u=t;for(a||1!=t.childNodes.length||3!=t.firstChild.nodeType||(a=t.firstChild,r&&(r=a.nodeValue.length));u.parentNode!=i;)u=u.parentNode;var c=e.measure,f=c.maps,h=n(a,u,r);if(h)return sl(h,l);for(var d=u.nextSibling,p=a?a.nodeValue.length-r:0;d;d=d.nextSibling){if(h=n(d,d.firstChild,0))return sl(P(h.line,h.ch-p),l);p+=d.textContent.length}for(var v=u.previousSibling,m=r;v;v=v.previousSibling){if(h=n(v,v.firstChild,-1))return sl(P(h.line,h.ch+m),l);m+=v.textContent.length}}function fl(e,t){function r(){e.value=a.getValue()}if(t=t?c(t):{},t.value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var n=l();t.autofocus=n==e||null!=e.getAttribute("autofocus")&&n==document.body}var i;if(e.form&&(ts(e.form,"submit",r),!t.leaveSubmitMethodAlone)){var o=e.form;i=o.submit;try{var s=o.submit=function(){r(),o.submit=i,o.submit(),o.submit=s}}catch(e){}}t.finishInit=function(t){t.save=r,t.getTextArea=function(){return e},t.toTextArea=function(){t.toTextArea=isNaN,r(),e.parentNode.removeChild(t.getWrapperElement()),e.style.display="",e.form&&(ke(e.form,"submit",r),"function"==typeof e.form.submit&&(e.form.submit=i))}},e.style.display="none";var a=Yo(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return a}var hl=navigator.userAgent,dl=navigator.platform,pl=/gecko\/\d/i.test(hl),gl=/MSIE \d/.test(hl),vl=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(hl),ml=/Edge\/(\d+)/.exec(hl),yl=gl||vl||ml,bl=yl&&(gl?document.documentMode||6:+(ml||vl)[1]),wl=!ml&&/WebKit\//.test(hl),xl=wl&&/Qt\/\d+\.\d+/.test(hl),Cl=!ml&&/Chrome\//.test(hl),Sl=/Opera\//.test(hl),Ll=/Apple Computer/.test(navigator.vendor),kl=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(hl),Tl=/PhantomJS/.test(hl),Ml=!ml&&/AppleWebKit/.test(hl)&&/Mobile\/\w+/.test(hl),Nl=/Android/.test(hl),Ol=Ml||Nl||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(hl),Al=Ml||/Mac/.test(dl),Wl=/\bCrOS\b/.test(hl),Dl=/win/i.test(dl),Hl=Sl&&hl.match(/Version\/(\d*\.\d*)/);Hl&&(Hl=Number(Hl[1])),Hl&&Hl>=15&&(Sl=!1,wl=!0);var Fl,Pl=Al&&(xl||Sl&&(null==Hl||Hl<12.11)),El=pl||yl&&bl>=9,zl=function(t,r){var n=t.className,i=e(r).exec(n);if(i){var o=n.slice(i.index+i[0].length);t.className=n.slice(0,i.index)+(o?i[1]+o:"")}};Fl=document.createRange?function(e,t,r,n){var i=document.createRange();return i.setEnd(n||e,r),i.setStart(e,t),i}:function(e,t,r){var n=document.body.createTextRange();try{n.moveToElementText(e.parentNode)}catch(e){return n}return n.collapse(!0),n.moveEnd("character",r),n.moveStart("character",t),n};var Il=function(e){e.select()};Ml?Il=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:yl&&(Il=function(e){try{e.select()}catch(e){}});var Rl=function(){this.id=null};Rl.prototype.set=function(e,t){clearTimeout(this.id),this.id=setTimeout(t,e)};var Bl,Gl,Ul=30,Vl={toString:function(){return"CodeMirror.Pass"}},Kl={scroll:!1},jl={origin:"*mouse"},Xl={origin:"+move"},Yl=[""],_l=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,ql=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/,$l=!1,Zl=!1,Ql=null,Jl=function(){function e(e){return e<=247?r.charAt(e):1424<=e&&e<=1524?"R":1536<=e&&e<=1785?n.charAt(e-1536):1774<=e&&e<=2220?"r":8192<=e&&e<=8203?"w":8204==e?"b":"L"}function t(e,t,r){this.level=e,this.from=t,this.to=r}var r="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",n="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111",i=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,o=/[stwN]/,l=/[LRr]/,s=/[Lb1n]/,a=/[1n]/;return function(r,n){var u="ltr"==n?"L":"R";if(0==r.length||"ltr"==n&&!i.test(r))return!1;for(var c=r.length,f=[],h=0;h<c;++h)f.push(e(r.charCodeAt(h)));for(var d=0,p=u;d<c;++d){var v=f[d];"m"==v?f[d]=p:p=v}for(var m=0,y=u;m<c;++m){var b=f[m];"1"==b&&"r"==y?f[m]="n":l.test(b)&&(y=b,"r"==b&&(f[m]="R"))}for(var w=1,x=f[0];w<c-1;++w){var C=f[w];"+"==C&&"1"==x&&"1"==f[w+1]?f[w]="1":","!=C||x!=f[w+1]||"1"!=x&&"n"!=x||(f[w]=x),x=C}for(var S=0;S<c;++S){var L=f[S];if(","==L)f[S]="N";else if("%"==L){var k=void 0;for(k=S+1;k<c&&"%"==f[k];++k);for(var T=S&&"!"==f[S-1]||k<c&&"1"==f[k]?"1":"N",M=S;M<k;++M)f[M]=T;S=k-1}}for(var N=0,O=u;N<c;++N){var A=f[N];"L"==O&&"1"==A?f[N]="L":l.test(A)&&(O=A)}for(var W=0;W<c;++W)if(o.test(f[W])){var D=void 0;for(D=W+1;D<c&&o.test(f[D]);++D);for(var H="L"==(W?f[W-1]:u),F="L"==(D<c?f[D]:u),P=H==F?H?"L":"R":u,E=W;E<D;++E)f[E]=P;W=D-1}for(var z,I=[],R=0;R<c;)if(s.test(f[R])){var B=R;for(++R;R<c&&s.test(f[R]);++R);I.push(new t(0,B,R))}else{var G=R,U=I.length;for(++R;R<c&&"L"!=f[R];++R);for(var V=G;V<R;)if(a.test(f[V])){G<V&&I.splice(U,0,new t(1,G,V));var K=V;for(++V;V<R&&a.test(f[V]);++V);I.splice(U,0,new t(2,K,V)),G=V}else++V;G<R&&I.splice(U,0,new t(1,G,R))}return"ltr"==n&&(1==I[0].level&&(z=r.match(/^\s+/))&&(I[0].from=z[0].length,I.unshift(new t(0,0,z[0].length))),1==g(I).level&&(z=r.match(/\s+$/))&&(g(I).to-=z[0].length,I.push(new t(0,c-z[0].length,c)))),"rtl"==n?I.reverse():I}}(),es=[],ts=function(e,t,r){if(e.addEventListener)e.addEventListener(t,r,!1);else if(e.attachEvent)e.attachEvent("on"+t,r);else{var n=e._handlers||(e._handlers={});n[t]=(n[t]||es).concat(r)}},rs=function(){if(yl&&bl<9)return!1;var e=n("div");return"draggable"in e||"dragDrop"in e}(),ns=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,r=[],n=e.length;t<=n;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),l=o.indexOf("\r");-1!=l?(r.push(o.slice(0,l)),t+=l+1):(r.push(o),t=i+1)}return r}:function(e){return e.split(/\r\n?|\n/)},is=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},os=function(){var e=n("div");return"oncopy"in e||(e.setAttribute("oncopy","return;"),"function"==typeof e.oncopy)}(),ls=null,ss={},as={},us={},cs=function(e,t,r){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=r};cs.prototype.eol=function(){return this.pos>=this.string.length},cs.prototype.sol=function(){return this.pos==this.lineStart},cs.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},cs.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},cs.prototype.eat=function(e){var t=this.string.charAt(this.pos);if("string"==typeof e?t==e:t&&(e.test?e.test(t):e(t)))return++this.pos,t},cs.prototype.eatWhile=function(e){for(var t=this.pos;this.eat(e););return this.pos>t},cs.prototype.eatSpace=function(){for(var e=this,t=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++e.pos;return this.pos>t},cs.prototype.skipToEnd=function(){this.pos=this.string.length},cs.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},cs.prototype.backUp=function(e){this.pos-=e},cs.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=f(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?f(this.string,this.lineStart,this.tabSize):0)},cs.prototype.indentation=function(){return f(this.string,null,this.tabSize)-(this.lineStart?f(this.string,this.lineStart,this.tabSize):0)},cs.prototype.match=function(e,t,r){if("string"!=typeof e){var n=this.string.slice(this.pos).match(e);return n&&n.index>0?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var i=function(e){return r?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},cs.prototype.current=function(){return this.string.slice(this.start,this.pos)},cs.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},cs.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},cs.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var fs=function(e,t){this.state=e,this.lookAhead=t},hs=function(e,t,r,n){this.state=t,this.doc=e,this.line=r,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};hs.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},hs.prototype.baseToken=function(e){var t=this;if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)t.baseTokenPos+=2;var r=this.baseTokens[this.baseTokenPos+1];return{type:r&&r.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},hs.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},hs.fromSaved=function(e,t,r){return t instanceof fs?new hs(e,je(e.mode,t.state),r,t.lookAhead):new hs(e,je(e.mode,t),r)},hs.prototype.save=function(e){var t=!1!==e?je(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new fs(t,this.maxLookAhead):t};var ds=function(e,t,r){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=r},ps=function(e,t,r){this.text=e,ne(this,t),this.height=r?r(this):1};ps.prototype.lineNo=function(){return W(this)},Ae(ps);var gs,vs={},ms={},ys=null,bs=null,ws={left:0,right:0,top:0,bottom:0},xs=function(e,t,r){this.cm=r;var i=this.vert=n("div",[n("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),o=this.horiz=n("div",[n("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");e(i),e(o),ts(i,"scroll",function(){i.clientHeight&&t(i.scrollTop,"vertical")}),ts(o,"scroll",function(){o.clientWidth&&t(o.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,yl&&bl<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};xs.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,n=e.nativeBarWidth;if(r){this.vert.style.display="block",this.vert.style.bottom=t?n+"px":"0";var i=e.viewHeight-(t?n:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=r?n+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(r?n:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?n:0,bottom:t?n:0}},xs.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},xs.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},xs.prototype.zeroWidthHack=function(){var e=Al&&!kl?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new Rl,this.disableVert=new Rl},xs.prototype.enableZeroWidthBar=function(e,t,r){function n(){var i=e.getBoundingClientRect();("vert"==r?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.pointerEvents="none":t.set(1e3,n)}e.style.pointerEvents="auto",t.set(1e3,n)},xs.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Cs=function(){};Cs.prototype.update=function(){return{bottom:0,right:0}},Cs.prototype.setScrollLeft=function(){},Cs.prototype.setScrollTop=function(){},Cs.prototype.clear=function(){};var Ss={native:xs,null:Cs},Ls=0,ks=function(e,t,r){var n=e.display;this.viewport=t,this.visible=Ir(n,e.doc,t),this.editorIsHidden=!n.wrapper.offsetWidth,this.wrapperHeight=n.wrapper.clientHeight,this.wrapperWidth=n.wrapper.clientWidth,this.oldDisplayWidth=Bt(e),this.force=r,this.dims=wr(e),this.events=[]};ks.prototype.signal=function(e,t){Oe(e,t)&&this.events.push(arguments)},ks.prototype.finish=function(){for(var e=this,t=0;t<this.events.length;t++)Te.apply(null,e.events[t])};var Ts=0,Ms=null;yl?Ms=-.53:pl?Ms=15:Cl?Ms=-.7:Ll&&(Ms=-1/3);var Ns=function(e,t){this.ranges=e,this.primIndex=t};Ns.prototype.primary=function(){return this.ranges[this.primIndex]},Ns.prototype.equals=function(e){var t=this;if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var r=0;r<this.ranges.length;r++){var n=t.ranges[r],i=e.ranges[r];if(!z(n.anchor,i.anchor)||!z(n.head,i.head))return!1}return!0},Ns.prototype.deepCopy=function(){for(var e=this,t=[],r=0;r<this.ranges.length;r++)t[r]=new Os(I(e.ranges[r].anchor),I(e.ranges[r].head));return new Ns(t,this.primIndex)},Ns.prototype.somethingSelected=function(){for(var e=this,t=0;t<this.ranges.length;t++)if(!e.ranges[t].empty())return!0;return!1},Ns.prototype.contains=function(e,t){var r=this;t||(t=e);for(var n=0;n<this.ranges.length;n++){var i=r.ranges[n];if(E(t,i.from())>=0&&E(e,i.to())<=0)return n}return-1};var Os=function(e,t){this.anchor=e,this.head=t};Os.prototype.from=function(){return B(this.anchor,this.head)},Os.prototype.to=function(){return R(this.anchor,this.head)},Os.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},Gi.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var r=this,n=e,i=e+t;n<i;++n){var o=r.lines[n];r.height-=o.height,lt(o),wt(o,"delete")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,r){var n=this;this.height+=r,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var i=0;i<t.length;++i)t[i].parent=n},iterN:function(e,t,r){for(var n=this,i=e+t;e<i;++e)if(r(n.lines[e]))return!0}},Ui.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){var r=this;this.size-=t;for(var n=0;n<this.children.length;++n){var i=r.children[n],o=i.chunkSize();if(e<o){var l=Math.min(t,o-e),s=i.height;if(i.removeInner(e,l),r.height-=s-i.height,o==l&&(r.children.splice(n--,1),i.parent=null),0==(t-=l))break;e=0}else e-=o}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof Gi))){var a=[];this.collapse(a),this.children=[new Gi(a)],this.children[0].parent=this}},collapse:function(e){for(var t=this,r=0;r<this.children.length;++r)t.children[r].collapse(e)},insertInner:function(e,t,r){var n=this;this.size+=t.length,this.height+=r;for(var i=0;i<this.children.length;++i){var o=n.children[i],l=o.chunkSize();if(e<=l){if(o.insertInner(e,t,r),o.lines&&o.lines.length>50){for(var s=o.lines.length%25+25,a=s;a<o.lines.length;){var u=new Gi(o.lines.slice(a,a+=25));o.height-=u.height,n.children.splice(++i,0,u),u.parent=n}o.lines=o.lines.slice(0,s),n.maybeSpill()}break}e-=l}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=e.children.splice(e.children.length-5,5),r=new Ui(t);if(e.parent){e.size-=r.size,e.height-=r.height;var n=h(e.parent.children,e);e.parent.children.splice(n+1,0,r)}else{var i=new Ui(e.children);i.parent=e,e.children=[i,r],e=i}r.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()}},iterN:function(e,t,r){for(var n=this,i=0;i<this.children.length;++i){var o=n.children[i],l=o.chunkSize();if(e<l){var s=Math.min(t,l-e);if(o.iterN(e,s,r))return!0;if(0==(t-=s))break;e=0}else e-=l}}};var As=function(e,t,r){var n=this;if(r)for(var i in r)r.hasOwnProperty(i)&&(n[i]=r[i]);this.doc=e,this.node=t};As.prototype.clear=function(){var e=this,t=this.doc.cm,r=this.line.widgets,n=this.line,i=W(n);if(null!=i&&r){for(var o=0;o<r.length;++o)r[o]==e&&r.splice(o--,1);r.length||(n.widgets=null);var l=Ft(this);A(n,Math.max(0,n.height-l)),t&&(dn(t,function(){Vi(t,n,-l),yn(t,i,"widget")}),wt(t,"lineWidgetCleared",t,this,i))}},As.prototype.changed=function(){var e=this,t=this.height,r=this.doc.cm,n=this.line;this.height=null;var i=Ft(this)-t;i&&(A(n,n.height+i),r&&dn(r,function(){r.curOp.forceUpdate=!0,Vi(r,n,i),wt(r,"lineWidgetChanged",r,e,W(n))}))},Ae(As);var Ws=0,Ds=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++Ws};Ds.prototype.clear=function(){var e=this;if(!this.explicitlyCleared){var t=this.doc.cm,r=t&&!t.curOp;if(r&&on(t),Oe(this,"clear")){var n=this.find();n&&wt(this,"clear",n.from,n.to)}for(var i=null,o=null,l=0;l<this.lines.length;++l){var s=e.lines[l],a=_(s.markedSpans,e);t&&!e.collapsed?yn(t,W(s),"text"):t&&(null!=a.to&&(o=W(s)),null!=a.from&&(i=W(s))),s.markedSpans=q(s.markedSpans,a),null==a.from&&e.collapsed&&!ve(e.doc,s)&&t&&A(s,yr(t.display))}if(t&&this.collapsed&&!t.options.lineWrapping)for(var u=0;u<this.lines.length;++u){var c=fe(e.lines[u]),f=be(c);f>t.display.maxLineLength&&(t.display.maxLine=c,t.display.maxLineLength=f,t.display.maxLineChanged=!0)}null!=i&&t&&this.collapsed&&mn(t,i,o+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Si(t.doc)),t&&wt(t,"markerCleared",t,this,i,o),r&&ln(t),this.parent&&this.parent.clear()}},Ds.prototype.find=function(e,t){var r=this;null==e&&"bookmark"==this.type&&(e=1);for(var n,i,o=0;o<this.lines.length;++o){var l=r.lines[o],s=_(l.markedSpans,r);if(null!=s.from&&(n=P(t?l:W(l),s.from),-1==e))return n;if(null!=s.to&&(i=P(t?l:W(l),s.to),1==e))return i}return n&&{from:n,to:i}},Ds.prototype.changed=function(){var e=this,t=this.find(-1,!0),r=this,n=this.doc.cm;t&&n&&dn(n,function(){var i=t.line,o=W(t.line),l=Xt(n,o);if(l&&(Jt(l),n.curOp.selectionChanged=n.curOp.forceUpdate=!0),n.curOp.updateMaxLine=!0,!ve(r.doc,i)&&null!=r.height){var s=r.height;r.height=null;var a=Ft(r)-s;a&&A(i,i.height+a)}wt(n,"markerChanged",n,e)})},Ds.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=h(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},Ds.prototype.detachLine=function(e){if(this.lines.splice(h(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}},Ae(Ds);var Hs=function(e,t){var r=this;this.markers=e,this.primary=t;for(var n=0;n<e.length;++n)e[n].parent=r};Hs.prototype.clear=function(){var e=this;if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var t=0;t<this.markers.length;++t)e.markers[t].clear();wt(this,"clear")}},Hs.prototype.find=function(e,t){return this.primary.find(e,t)},Ae(Hs);var Fs=0,Ps=function(e,t,r,n,i){if(!(this instanceof Ps))return new Ps(e,t,r,n,i);null==r&&(r=0),Ui.call(this,[new Gi([new ps("",null)])]),this.first=r,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=r;var o=P(r,0);this.sel=Bn(o),this.history=new ei(null),this.id=++Fs,this.modeOption=t,this.lineSep=n,this.direction="rtl"==i?"rtl":"ltr",this.extend=!1,"string"==typeof e&&(e=this.splitLines(e)),qn(this,{from:o,to:o,text:e}),wi(this,Bn(o),Kl)};Ps.prototype=b(Ui.prototype,{constructor:Ps,iter:function(e,t,r){r?this.iterN(e-this.first,t-e,r):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var r=0,n=0;n<t.length;++n)r+=t[n].height;this.insertInner(e-this.first,t,r)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=O(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:vn(function(e){var t=P(this.first,0),r=this.first+this.size-1;Ai(this,{from:t,to:P(r,M(this,r).text.length),text:this.splitLines(e),origin:"setValue",full:!0},!0),this.cm&&Yr(this.cm,0,0),wi(this,Bn(t),Kl)}),replaceRange:function(e,t,r,n){t=U(this,t),r=r?U(this,r):t,Ei(this,e,t,r,n)},getRange:function(e,t,r){var n=N(this,U(this,e),U(this,t));return!1===r?n:n.join(r||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){if(H(this,e))return M(this,e)},getLineNumber:function(e){return W(e)},getLineHandleVisualStart:function(e){return"number"==typeof e&&(e=M(this,e)),fe(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return U(this,e)},getCursor:function(e){var t=this.sel.primary();return null==e||"head"==e?t.head:"anchor"==e?t.anchor:"end"==e||"to"==e||!1===e?t.to():t.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:vn(function(e,t,r){mi(this,U(this,"number"==typeof e?P(e,t||0):e),null,r)}),setSelection:vn(function(e,t,r){mi(this,U(this,e),U(this,t||e),r)}),extendSelection:vn(function(e,t,r){pi(this,U(this,e),t&&U(this,t),r)}),extendSelections:vn(function(e,t){gi(this,K(this,e),t)}),extendSelectionsBy:vn(function(e,t){gi(this,K(this,v(this.sel.ranges,e)),t)}),setSelections:vn(function(e,t,r){var n=this;if(e.length){for(var i=[],o=0;o<e.length;o++)i[o]=new Os(U(n,e[o].anchor),U(n,e[o].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),wi(this,Rn(i,t),r)}}),addSelection:vn(function(e,t,r){var n=this.sel.ranges.slice(0);n.push(new Os(U(this,e),U(this,t||e))),wi(this,Rn(n,n.length-1),r)}),getSelection:function(e){for(var t,r=this,n=this.sel.ranges,i=0;i<n.length;i++){var o=N(r,n[i].from(),n[i].to());t=t?t.concat(o):o}return!1===e?t:t.join(e||this.lineSeparator())},getSelections:function(e){for(var t=this,r=[],n=this.sel.ranges,i=0;i<n.length;i++){var o=N(t,n[i].from(),n[i].to());!1!==e&&(o=o.join(e||t.lineSeparator())),r[i]=o}return r},replaceSelection:function(e,t,r){for(var n=[],i=0;i<this.sel.ranges.length;i++)n[i]=e;this.replaceSelections(n,t,r||"+input")},replaceSelections:vn(function(e,t,r){for(var n=this,i=[],o=this.sel,l=0;l<o.ranges.length;l++){var s=o.ranges[l];i[l]={from:s.from(),to:s.to(),text:n.splitLines(e[l]),origin:r}}for(var a=t&&"end"!=t&&jn(this,i,t),u=i.length-1;u>=0;u--)Ai(n,i[u]);a?bi(this,a):this.cm&&Xr(this.cm)}),undo:vn(function(){Di(this,"undo")}),redo:vn(function(){Di(this,"redo")}),undoSelection:vn(function(){Di(this,"undo",!0)}),redoSelection:vn(function(){Di(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,r=0,n=0;n<e.done.length;n++)e.done[n].ranges||++t;for(var i=0;i<e.undone.length;i++)e.undone[i].ranges||++r;return{undo:t,redo:r}},clearHistory:function(){this.history=new ei(this.history.maxGeneration)},
+markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:hi(this.history.done),undone:hi(this.history.undone)}},setHistory:function(e){var t=this.history=new ei(this.history.maxGeneration);t.done=hi(e.done.slice(0),null,!0),t.undone=hi(e.undone.slice(0),null,!0)},setGutterMarker:vn(function(e,t,r){return Bi(this,e,"gutter",function(e){var n=e.gutterMarkers||(e.gutterMarkers={});return n[t]=r,!r&&C(n)&&(e.gutterMarkers=null),!0})}),clearGutter:vn(function(e){var t=this;this.iter(function(r){r.gutterMarkers&&r.gutterMarkers[e]&&Bi(t,r,"gutter",function(){return r.gutterMarkers[e]=null,C(r.gutterMarkers)&&(r.gutterMarkers=null),!0})})}),lineInfo:function(e){var t;if("number"==typeof e){if(!H(this,e))return null;if(t=e,!(e=M(this,e)))return null}else if(null==(t=W(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:vn(function(t,r,n){return Bi(this,t,"gutter"==r?"gutter":"class",function(t){var i="text"==r?"textClass":"background"==r?"bgClass":"gutter"==r?"gutterClass":"wrapClass";if(t[i]){if(e(n).test(t[i]))return!1;t[i]+=" "+n}else t[i]=n;return!0})}),removeLineClass:vn(function(t,r,n){return Bi(this,t,"gutter"==r?"gutter":"class",function(t){var i="text"==r?"textClass":"background"==r?"bgClass":"gutter"==r?"gutterClass":"wrapClass",o=t[i];if(!o)return!1;if(null==n)t[i]=null;else{var l=o.match(e(n));if(!l)return!1;var s=l.index+l[0].length;t[i]=o.slice(0,l.index)+(l.index&&s!=o.length?" ":"")+o.slice(s)||null}return!0})}),addLineWidget:vn(function(e,t,r){return Ki(this,e,t,r)}),removeLineWidget:function(e){e.clear()},markText:function(e,t,r){return ji(this,U(this,e),U(this,t),r,r&&r.type||"range")},setBookmark:function(e,t){var r={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return e=U(this,e),ji(this,e,e,r,"bookmark")},findMarksAt:function(e){e=U(this,e);var t=[],r=M(this,e.line).markedSpans;if(r)for(var n=0;n<r.length;++n){var i=r[n];(null==i.from||i.from<=e.ch)&&(null==i.to||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,r){e=U(this,e),t=U(this,t);var n=[],i=e.line;return this.iter(e.line,t.line+1,function(o){var l=o.markedSpans;if(l)for(var s=0;s<l.length;s++){var a=l[s];null!=a.to&&i==e.line&&e.ch>=a.to||null==a.from&&i!=e.line||null!=a.from&&i==t.line&&a.from>=t.ch||r&&!r(a.marker)||n.push(a.marker.parent||a.marker)}++i}),n},getAllMarks:function(){var e=[];return this.iter(function(t){var r=t.markedSpans;if(r)for(var n=0;n<r.length;++n)null!=r[n].from&&e.push(r[n].marker)}),e},posFromIndex:function(e){var t,r=this.first,n=this.lineSeparator().length;return this.iter(function(i){var o=i.text.length+n;if(o>e)return t=e,!0;e-=o,++r}),U(this,P(r,t))},indexFromPos:function(e){e=U(this,e);var t=e.ch;if(e.line<this.first||e.ch<0)return 0;var r=this.lineSeparator().length;return this.iter(this.first,e.line,function(e){t+=e.text.length+r}),t},copy:function(e){var t=new Ps(O(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,r=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<r&&(r=e.to);var n=new Ps(O(this,t,r),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(n.history=this.history),(this.linked||(this.linked=[])).push({doc:n,sharedHist:e.sharedHist}),n.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],_i(n,Yi(this)),n},unlinkDoc:function(e){var t=this;if(e instanceof Yo&&(e=e.doc),this.linked)for(var r=0;r<this.linked.length;++r){var n=t.linked[r];if(n.doc==e){t.linked.splice(r,1),e.unlinkDoc(t),qi(Yi(t));break}}if(e.history==this.history){var i=[e.id];$n(e,function(e){return i.push(e.id)},!0),e.history=new ei(null),e.history.done=hi(this.history.done,i),e.history.undone=hi(this.history.undone,i)}},iterLinkedDocs:function(e){$n(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):ns(e)},lineSeparator:function(){return this.lineSep||"\n"},setDirection:vn(function(e){"rtl"!=e&&(e="ltr"),e!=this.direction&&(this.direction=e,this.iter(function(e){return e.order=null}),this.cm&&Jn(this.cm))})}),Ps.prototype.eachLine=Ps.prototype.iter;for(var Es=0,zs=!1,Is={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",127:"Delete",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},Rs=0;Rs<10;Rs++)Is[Rs+48]=Is[Rs+96]=String(Rs);for(var Bs=65;Bs<=90;Bs++)Is[Bs]=String.fromCharCode(Bs);for(var Gs=1;Gs<=12;Gs++)Is[Gs+111]=Is[Gs+63235]="F"+Gs;var Us={};Us.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Us.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Us.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Us.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Us.default=Al?Us.macDefault:Us.pcDefault;var Vs={selectAll:Ni,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),Kl)},killLine:function(e){return fo(e,function(t){if(t.empty()){var r=M(e.doc,t.head.line).text.length;return t.head.ch==r&&t.head.line<e.lastLine()?{from:t.head,to:P(t.head.line+1,0)}:{from:t.head,to:P(t.head.line,r)}}return{from:t.from(),to:t.to()}})},deleteLine:function(e){return fo(e,function(t){return{from:P(t.from().line,0),to:U(e.doc,P(t.to().line+1,0))}})},delLineLeft:function(e){return fo(e,function(e){return{from:P(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(e){return fo(e,function(t){var r=e.charCoords(t.head,"div").top+5;return{from:e.coordsChar({left:0,top:r},"div"),to:t.from()}})},delWrappedLineRight:function(e){return fo(e,function(t){var r=e.charCoords(t.head,"div").top+5,n=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:r},"div");return{from:t.from(),to:n}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(P(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(P(e.lastLine()))},goLineStart:function(e){return e.extendSelectionsBy(function(t){return mo(e,t.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(e){return e.extendSelectionsBy(function(t){return bo(e,t.head)},{origin:"+move",bias:1})},goLineEnd:function(e){return e.extendSelectionsBy(function(t){return yo(e,t.head.line)},{origin:"+move",bias:-1})},goLineRight:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,"div").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:r},"div")},Xl)},goLineLeft:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,"div").top+5;return e.coordsChar({left:0,top:r},"div")},Xl)},goLineLeftSmart:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,"div").top+5,n=e.coordsChar({left:0,top:r},"div");return n.ch<e.getLine(n.line).search(/\S/)?bo(e,t.head):n},Xl)},goLineUp:function(e){return e.moveV(-1,"line")},goLineDown:function(e){return e.moveV(1,"line")},goPageUp:function(e){return e.moveV(-1,"page")},goPageDown:function(e){return e.moveV(1,"page")},goCharLeft:function(e){return e.moveH(-1,"char")},goCharRight:function(e){return e.moveH(1,"char")},goColumnLeft:function(e){return e.moveH(-1,"column")},goColumnRight:function(e){return e.moveH(1,"column")},goWordLeft:function(e){return e.moveH(-1,"word")},goGroupRight:function(e){return e.moveH(1,"group")},goGroupLeft:function(e){return e.moveH(-1,"group")},goWordRight:function(e){return e.moveH(1,"word")},delCharBefore:function(e){return e.deleteH(-1,"char")},delCharAfter:function(e){return e.deleteH(1,"char")},delWordBefore:function(e){return e.deleteH(-1,"word")},delWordAfter:function(e){return e.deleteH(1,"word")},delGroupBefore:function(e){return e.deleteH(-1,"group")},delGroupAfter:function(e){return e.deleteH(1,"group")},indentAuto:function(e){return e.indentSelection("smart")},indentMore:function(e){return e.indentSelection("add")},indentLess:function(e){return e.indentSelection("subtract")},insertTab:function(e){return e.replaceSelection("\t")},insertSoftTab:function(e){for(var t=[],r=e.listSelections(),n=e.options.tabSize,i=0;i<r.length;i++){var o=r[i].from(),l=f(e.getLine(o.line),o.ch,n);t.push(p(n-l%n))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection("add"):e.execCommand("insertTab")},transposeChars:function(e){return dn(e,function(){for(var t=e.listSelections(),r=[],n=0;n<t.length;n++)if(t[n].empty()){var i=t[n].head,o=M(e.doc,i.line).text;if(o)if(i.ch==o.length&&(i=new P(i.line,i.ch-1)),i.ch>0)i=new P(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),P(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var l=M(e.doc,i.line-1).text;l&&(i=new P(i.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),P(i.line-1,l.length-1),i,"+transpose"))}r.push(new Os(i,i))}e.setSelections(r)})},newlineAndIndent:function(e){return dn(e,function(){for(var t=e.listSelections(),r=t.length-1;r>=0;r--)e.replaceRange(e.doc.lineSeparator(),t[r].anchor,t[r].head,"+input");t=e.listSelections();for(var n=0;n<t.length;n++)e.indentLine(t[n].from().line,null,!0);Xr(e)})},openLine:function(e){return e.replaceSelection("\n","start")},toggleOverwrite:function(e){return e.toggleOverwrite()}},Ks=new Rl,js=null,Xs=function(e,t,r){this.time=e,this.pos=t,this.button=r};Xs.prototype.compare=function(e,t,r){return this.time+400>e&&0==E(t,this.pos)&&r==this.button};var Ys,_s,qs={toString:function(){return"CodeMirror.Init"}},$s={},Zs={};Yo.defaults=$s,Yo.optionHandlers=Zs;var Qs=[];Yo.defineInitHook=function(e){return Qs.push(e)};var Js=null,ea=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new Rl,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};ea.prototype.init=function(e){function t(e){if(!Me(i,e)){if(i.somethingSelected())$o({lineWise:!1,text:i.getSelections()}),"cut"==e.type&&i.replaceSelection("",null,"cut");else{if(!i.options.lineWiseCopyCut)return;var t=el(i);$o({lineWise:!0,text:t.text}),"cut"==e.type&&i.operation(function(){i.setSelections(t.ranges,0,Kl),i.replaceSelection("",null,"cut")})}if(e.clipboardData){e.clipboardData.clearData();var r=Js.text.join("\n");if(e.clipboardData.setData("Text",r),e.clipboardData.getData("Text")==r)return void e.preventDefault()}var l=rl(),s=l.firstChild;i.display.lineSpace.insertBefore(l,i.display.lineSpace.firstChild),s.value=Js.text.join("\n");var a=document.activeElement;Il(s),setTimeout(function(){i.display.lineSpace.removeChild(l),a.focus(),a==o&&n.showPrimarySelection()},50)}}var r=this,n=this,i=n.cm,o=n.div=e.lineDiv;tl(o,i.options.spellcheck),ts(o,"paste",function(e){Me(i,e)||Qo(e,i)||bl<=11&&setTimeout(pn(i,function(){return r.updateFromDOM()}),20)}),ts(o,"compositionstart",function(e){r.composing={data:e.data,done:!1}}),ts(o,"compositionupdate",function(e){r.composing||(r.composing={data:e.data,done:!1})}),ts(o,"compositionend",function(e){r.composing&&(e.data!=r.composing.data&&r.readFromDOMSoon(),r.composing.done=!0)}),ts(o,"touchstart",function(){return n.forceCompositionEnd()}),ts(o,"input",function(){r.composing||r.readFromDOMSoon()}),ts(o,"copy",t),ts(o,"cut",t)},ea.prototype.prepareSelection=function(){var e=Mr(this.cm,!1);return e.focus=this.cm.state.focused,e},ea.prototype.showSelection=function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},ea.prototype.showPrimarySelection=function(){var e=window.getSelection(),t=this.cm,r=t.doc.sel.primary(),n=r.from(),i=r.to();if(t.display.viewTo==t.display.viewFrom||n.line>=t.display.viewTo||i.line<t.display.viewFrom)return void e.removeAllRanges();var o=ul(t,e.anchorNode,e.anchorOffset),l=ul(t,e.focusNode,e.focusOffset);if(!o||o.bad||!l||l.bad||0!=E(B(o,l),n)||0!=E(R(o,l),i)){var s=t.display.view,a=n.line>=t.display.viewFrom&&ol(t,n)||{node:s[0].measure.map[2],offset:0},u=i.line<t.display.viewTo&&ol(t,i);if(!u){var c=s[s.length-1].measure,f=c.maps?c.maps[c.maps.length-1]:c.map;u={node:f[f.length-1],offset:f[f.length-2]-f[f.length-3]}}if(!a||!u)return void e.removeAllRanges();var h,d=e.rangeCount&&e.getRangeAt(0);try{h=Fl(a.node,a.offset,u.offset,u.node)}catch(e){}h&&(!pl&&t.state.focused?(e.collapse(a.node,a.offset),h.collapsed||(e.removeAllRanges(),e.addRange(h))):(e.removeAllRanges(),e.addRange(h)),d&&null==e.anchorNode?e.addRange(d):pl&&this.startGracePeriod()),this.rememberSelection()}},ea.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged=!0})},20)},ea.prototype.showMultipleSelections=function(e){r(this.cm.display.cursorDiv,e.cursors),r(this.cm.display.selectionDiv,e.selection)},ea.prototype.rememberSelection=function(){var e=window.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},ea.prototype.selectionInEditor=function(){var e=window.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return o(this.div,t)},ea.prototype.focus=function(){"nocursor"!=this.cm.options.readOnly&&(this.selectionInEditor()||this.showSelection(this.prepareSelection(),!0),this.div.focus())},ea.prototype.blur=function(){this.div.blur()},ea.prototype.getField=function(){return this.div},ea.prototype.supportsTouch=function(){return!0},ea.prototype.receivedFocus=function(){function e(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,e))}var t=this;this.selectionInEditor()?this.pollSelection():dn(this.cm,function(){return t.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,e)},ea.prototype.selectionChanged=function(){var e=window.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},ea.prototype.pollSelection=function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e=window.getSelection(),t=this.cm;if(Nl&&Cl&&this.cm.options.gutters.length&&ll(e.anchorNode))return this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var r=ul(t,e.anchorNode,e.anchorOffset),n=ul(t,e.focusNode,e.focusOffset);r&&n&&dn(t,function(){wi(t.doc,Bn(r,n),Kl),(r.bad||n.bad)&&(t.curOp.selectionChanged=!0)})}}},ea.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e=this.cm,t=e.display,r=e.doc.sel.primary(),n=r.from(),i=r.to();if(0==n.ch&&n.line>e.firstLine()&&(n=P(n.line-1,M(e.doc,n.line-1).length)),i.ch==M(e.doc,i.line).text.length&&i.line<e.lastLine()&&(i=P(i.line+1,0)),n.line<t.viewFrom||i.line>t.viewTo-1)return!1;var o,l,s;n.line==t.viewFrom||0==(o=kr(e,n.line))?(l=W(t.view[0].line),s=t.view[0].node):(l=W(t.view[o].line),s=t.view[o-1].node.nextSibling);var a,u,c=kr(e,i.line);if(c==t.view.length-1?(a=t.viewTo-1,u=t.lineDiv.lastChild):(a=W(t.view[c+1].line)-1,u=t.view[c+1].node.previousSibling),!s)return!1;for(var f=e.doc.splitLines(al(e,s,u,l,a)),h=N(e.doc,P(l,0),P(a,M(e.doc,a).text.length));f.length>1&&h.length>1;)if(g(f)==g(h))f.pop(),h.pop(),a--;else{if(f[0]!=h[0])break;f.shift(),h.shift(),l++}for(var d=0,p=0,v=f[0],m=h[0],y=Math.min(v.length,m.length);d<y&&v.charCodeAt(d)==m.charCodeAt(d);)++d;for(var b=g(f),w=g(h),x=Math.min(b.length-(1==f.length?d:0),w.length-(1==h.length?d:0));p<x&&b.charCodeAt(b.length-p-1)==w.charCodeAt(w.length-p-1);)++p;if(1==f.length&&1==h.length&&l==n.line)for(;d&&d>n.ch&&b.charCodeAt(b.length-p-1)==w.charCodeAt(w.length-p-1);)d--,p++;f[f.length-1]=b.slice(0,b.length-p).replace(/^\u200b+/,""),f[0]=f[0].slice(d).replace(/\u200b+$/,"");var C=P(l,d),S=P(a,h.length?g(h).length-p:0);return f.length>1||f[0]||E(C,S)?(Ei(e.doc,f,C,S,"+input"),!0):void 0},ea.prototype.ensurePolled=function(){this.forceCompositionEnd()},ea.prototype.reset=function(){this.forceCompositionEnd()},ea.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},ea.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},ea.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||dn(this.cm,function(){return mn(e.cm)})},ea.prototype.setUneditable=function(e){e.contentEditable="false"},ea.prototype.onKeyPress=function(e){0!=e.charCode&&(e.preventDefault(),this.cm.isReadOnly()||pn(this.cm,Zo)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},ea.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},ea.prototype.onContextMenu=function(){},ea.prototype.resetPosition=function(){},ea.prototype.needsContentAttribute=!0;var ta=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new Rl,this.hasSelection=!1,this.composing=null};ta.prototype.init=function(e){function t(e){if(!Me(i,e)){if(i.somethingSelected())$o({lineWise:!1,text:i.getSelections()});else{if(!i.options.lineWiseCopyCut)return;var t=el(i);$o({lineWise:!0,text:t.text}),"cut"==e.type?i.setSelections(t.ranges,null,Kl):(n.prevInput="",l.value=t.text.join("\n"),Il(l))}"cut"==e.type&&(i.state.cutIncoming=!0)}}var r=this,n=this,i=this.cm,o=this.wrapper=rl(),l=this.textarea=o.firstChild;e.wrapper.insertBefore(o,e.wrapper.firstChild),Ml&&(l.style.width="0px"),ts(l,"input",function(){yl&&bl>=9&&r.hasSelection&&(r.hasSelection=null),n.poll()}),ts(l,"paste",function(e){Me(i,e)||Qo(e,i)||(i.state.pasteIncoming=!0,n.fastPoll())}),ts(l,"cut",t),ts(l,"copy",t),ts(e.scroller,"paste",function(t){Pt(e,t)||Me(i,t)||(i.state.pasteIncoming=!0,n.focus())}),ts(e.lineSpace,"selectstart",function(t){Pt(e,t)||We(t)}),ts(l,"compositionstart",function(){var e=i.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:i.markText(e,i.getCursor("to"),{className:"CodeMirror-composing"})}}),ts(l,"compositionend",function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)})},ta.prototype.prepareSelection=function(){var e=this.cm,t=e.display,r=e.doc,n=Mr(e);if(e.options.moveInputWithCursor){var i=ar(e,r.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+l.top-o.top)),n.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+l.left-o.left))}return n},ta.prototype.showSelection=function(e){var t=this.cm,n=t.display;r(n.cursorDiv,e.cursors),r(n.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},ta.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var r=t.getSelection();this.textarea.value=r,t.state.focused&&Il(this.textarea),yl&&bl>=9&&(this.hasSelection=r)}else e||(this.prevInput=this.textarea.value="",yl&&bl>=9&&(this.hasSelection=null))}},ta.prototype.getField=function(){return this.textarea},ta.prototype.supportsTouch=function(){return!1},ta.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!Ol||l()!=this.textarea))try{this.textarea.focus()}catch(e){}},ta.prototype.blur=function(){this.textarea.blur()},ta.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},ta.prototype.receivedFocus=function(){this.slowPoll()},ta.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},ta.prototype.fastPoll=function(){function e(){r.poll()||t?(r.pollingFast=!1,r.slowPoll()):(t=!0,r.polling.set(60,e))}var t=!1,r=this;r.pollingFast=!0,r.polling.set(20,e)},ta.prototype.poll=function(){var e=this,t=this.cm,r=this.textarea,n=this.prevInput;if(this.contextMenuPending||!t.state.focused||is(r)&&!n&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=r.value;if(i==n&&!t.somethingSelected())return!1;if(yl&&bl>=9&&this.hasSelection===i||Al&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||n||(n="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var l=0,s=Math.min(n.length,i.length);l<s&&n.charCodeAt(l)==i.charCodeAt(l);)++l;return dn(t,function(){Zo(t,i.slice(l),n.length-l,null,e.composing?"*compose":null),i.length>1e3||i.indexOf("\n")>-1?r.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},ta.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},ta.prototype.onKeyPress=function(){yl&&bl>=9&&(this.hasSelection=null),this.fastPoll()},ta.prototype.onContextMenu=function(e){function t(){if(null!=l.selectionStart){var e=i.somethingSelected(),t="​"+(e?l.value:"");l.value="⇚",l.value=t,n.prevInput=e?"":"​",l.selectionStart=1,l.selectionEnd=t.length,o.selForContextMenu=i.doc.sel}}function r(){if(n.contextMenuPending=!1,n.wrapper.style.cssText=c,l.style.cssText=u,yl&&bl<9&&o.scrollbars.setScrollTop(o.scroller.scrollTop=a),null!=l.selectionStart){(!yl||yl&&bl<9)&&t();var e=0,r=function(){o.selForContextMenu==i.doc.sel&&0==l.selectionStart&&l.selectionEnd>0&&"​"==n.prevInput?pn(i,Ni)(i):e++<10?o.detectingSelectAll=setTimeout(r,500):(o.selForContextMenu=null,o.input.reset())};o.detectingSelectAll=setTimeout(r,200)}}var n=this,i=n.cm,o=i.display,l=n.textarea,s=Lr(i,e),a=o.scroller.scrollTop;if(s&&!Sl){i.options.resetSelectionOnContextMenu&&-1==i.doc.sel.contains(s)&&pn(i,wi)(i.doc,Bn(s),Kl);var u=l.style.cssText,c=n.wrapper.style.cssText;n.wrapper.style.cssText="position: absolute";var f=n.wrapper.getBoundingClientRect();l.style.cssText="position: absolute; width: 30px; height: 30px;\n      top: "+(e.clientY-f.top-5)+"px; left: "+(e.clientX-f.left-5)+"px;\n      z-index: 1000; background: "+(yl?"rgba(255, 255, 255, .05)":"transparent")+";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";var h;if(wl&&(h=window.scrollY),o.input.focus(),wl&&window.scrollTo(null,h),o.input.reset(),i.somethingSelected()||(l.value=n.prevInput=" "),n.contextMenuPending=!0,o.selForContextMenu=i.doc.sel,clearTimeout(o.detectingSelectAll),yl&&bl>=9&&t(),El){Fe(e);var d=function(){ke(window,"mouseup",d),setTimeout(r,20)};ts(window,"mouseup",d)}else setTimeout(r,50)}},ta.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e},ta.prototype.setUneditable=function(){},ta.prototype.needsContentAttribute=!1,function(e){function t(t,n,i,o){e.defaults[t]=n,i&&(r[t]=o?function(e,t,r){r!=qs&&i(e,t,r)}:i)}var r=e.optionHandlers;e.defineOption=t,e.Init=qs,t("value","",function(e,t){return e.setValue(t)},!0),t("mode",null,function(e,t){e.doc.modeOption=t,Xn(e)},!0),t("indentUnit",2,Xn,!0),t("indentWithTabs",!1),t("smartIndent",!0),t("tabSize",4,function(e){Yn(e),tr(e),mn(e)},!0),t("lineSeparator",null,function(e,t){if(e.doc.lineSep=t,t){var r=[],n=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,r.push(P(n,o))}n++});for(var i=r.length-1;i>=0;i--)Ei(e.doc,t,r[i],P(r[i].line,r[i].ch+t.length))}}),t("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,function(e,t,r){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),r!=qs&&e.refresh()}),t("specialCharPlaceholder",ut,function(e){return e.refresh()},!0),t("electricChars",!0),t("inputStyle",Ol?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),t("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),t("rtlMoveVisually",!Dl),t("wholeLineUpdateBefore",!0),t("theme","default",function(e){Vo(e),Ko(e)},!0),t("keyMap","default",function(e,t,r){var n=co(t),i=r!=qs&&co(r);i&&i.detach&&i.detach(e,n),n.attach&&n.attach(e,i||null)}),t("extraKeys",null),t("configureMouse",null),t("lineWrapping",!1,Xo,!0),t("gutters",[],function(e){Pn(e.options),Ko(e)},!0),t("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?xr(e.display)+"px":"0",e.refresh()},!0),t("coverGutterNextToScrollbar",!1,function(e){return tn(e)},!0),t("scrollbarStyle","native",function(e){nn(e),tn(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),t("lineNumbers",!1,function(e){Pn(e.options),Ko(e)},!0),t("firstLineNumber",1,Ko,!0),t("lineNumberFormatter",function(e){return e},Ko,!0),t("showCursorWhenSelecting",!1,Tr,!0),t("resetSelectionOnContextMenu",!0),t("lineWiseCopyCut",!0),t("pasteLinesPerSelection",!0),t("readOnly",!1,function(e,t){"nocursor"==t&&(Pr(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),t("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),t("dragDrop",!0,jo),t("allowDropFileTypes",null),t("cursorBlinkRate",530),t("cursorScrollMargin",0),t("cursorHeight",1,Tr,!0),t("singleCursorHeightPerLine",!0,Tr,!0),t("workTime",100),t("workDelay",100),t("flattenSpans",!0,Yn,!0),t("addModeClass",!1,Yn,!0),t("pollInterval",100),t("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),t("historyEventDelay",1250),t("viewportMargin",10,function(e){return e.refresh()},!0),t("maxHighlightLength",1e4,Yn,!0),t("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),t("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),t("autofocus",null),t("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0)}(Yo),function(e){var t=e.optionHandlers,r=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,r){var n=this.options,i=n[e];n[e]==r&&"mode"!=e||(n[e]=r,t.hasOwnProperty(e)&&pn(this,t[e])(this,r,i),Te(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](co(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,r=0;r<t.length;++r)if(t[r]==e||t[r].name==e)return t.splice(r,1),!0},addOverlay:gn(function(t,r){var n=t.token?t:e.getMode(this.options,t);if(n.startState)throw new Error("Overlays may not be stateful.");m(this.state.overlays,{mode:n,modeSpec:t,opaque:r&&r.opaque,priority:r&&r.priority||0},function(e){return e.priority}),this.state.modeGen++,mn(this)}),removeOverlay:gn(function(e){for(var t=this,r=this.state.overlays,n=0;n<r.length;++n){var i=r[n].modeSpec;if(i==e||"string"==typeof e&&i.name==e)return r.splice(n,1),t.state.modeGen++,void mn(t)}}),indentLine:gn(function(e,t,r){"string"!=typeof t&&"number"!=typeof t&&(t=null==t?this.options.smartIndent?"smart":"prev":t?"add":"subtract"),H(this.doc,e)&&qo(this,e,t,r)}),indentSelection:gn(function(e){for(var t=this,r=this.doc.sel.ranges,n=-1,i=0;i<r.length;i++){var o=r[i];if(o.empty())o.head.line>n&&(qo(t,o.head.line,e,!0),n=o.head.line,i==t.doc.sel.primIndex&&Xr(t));else{var l=o.from(),s=o.to(),a=Math.max(n,l.line);n=Math.min(t.lastLine(),s.line-(s.ch?0:1))+1;for(var u=a;u<n;++u)qo(t,u,e);var c=t.doc.sel.ranges;0==l.ch&&r.length==c.length&&c[i].from().ch>0&&vi(t.doc,i,new Os(l,c[i].to()),Kl)}}}),getTokenAt:function(e,t){return et(this,e,t)},getLineTokens:function(e,t){return et(this,P(e),t,!0)},getTokenTypeAt:function(e){e=U(this.doc,e);var t,r=qe(this,M(this.doc,e.line)),n=0,i=(r.length-1)/2,o=e.ch;if(0==o)t=r[2];else for(;;){var l=n+i>>1;if((l?r[2*l-1]:0)>=o)i=l;else{if(!(r[2*l+1]<o)){t=r[2*l+2];break}n=l+1}}var s=t?t.indexOf("overlay "):-1;return s<0?t:0==s?null:t.slice(0,s-1)},getModeAt:function(t){var r=this.doc.mode;return r.innerMode?e.innerMode(r,this.getTokenAt(t).state).mode:r},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var n=this,i=[];if(!r.hasOwnProperty(t))return i;var o=r[t],l=this.getModeAt(e);if("string"==typeof l[t])o[l[t]]&&i.push(o[l[t]]);else if(l[t])for(var s=0;s<l[t].length;s++){var a=o[l[t][s]];a&&i.push(a)}else l.helperType&&o[l.helperType]?i.push(o[l.helperType]):o[l.name]&&i.push(o[l.name]);for(var u=0;u<o._global.length;u++){var c=o._global[u];c.pred(l,n)&&-1==h(i,c.val)&&i.push(c.val)}return i},getStateAfter:function(e,t){var r=this.doc;return e=G(r,null==e?r.first+r.size-1:e),$e(this,e+1,t).state},cursorCoords:function(e,t){var r,n=this.doc.sel.primary()
+;return r=null==e?n.head:"object"==typeof e?U(this.doc,e):e?n.from():n.to(),ar(this,r,t||"page")},charCoords:function(e,t){return sr(this,U(this.doc,e),t||"page")},coordsChar:function(e,t){return e=lr(this,e,t||"page"),fr(this,e.left,e.top)},lineAtHeight:function(e,t){return e=lr(this,{top:e,left:0},t||"page").top,D(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,r){var n,i=!1;if("number"==typeof e){var o=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:e>o&&(e=o,i=!0),n=M(this.doc,e)}else n=e;return or(this,n,{top:0,left:0},t||"page",r||i).top+(i?this.doc.height-ye(n):0)},defaultTextHeight:function(){return yr(this.display)},defaultCharWidth:function(){return br(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,r,n,i){var o=this.display;e=ar(this,U(this.doc,e));var l=e.bottom,s=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),o.sizer.appendChild(t),"over"==n)l=e.top;else if("above"==n||"near"==n){var a=Math.max(o.wrapper.clientHeight,this.doc.height),u=Math.max(o.sizer.clientWidth,o.lineSpace.clientWidth);("above"==n||e.bottom+t.offsetHeight>a)&&e.top>t.offsetHeight?l=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=a&&(l=e.bottom),s+t.offsetWidth>u&&(s=u-t.offsetWidth)}t.style.top=l+"px",t.style.left=t.style.right="","right"==i?(s=o.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?s=0:"middle"==i&&(s=(o.sizer.clientWidth-t.offsetWidth)/2),t.style.left=s+"px"),r&&Vr(this,{left:s,top:l,right:s+t.offsetWidth,bottom:l+t.offsetHeight})},triggerOnKeyDown:gn(To),triggerOnKeyPress:gn(Oo),triggerOnKeyUp:No,triggerOnMouseDown:gn(Wo),execCommand:function(e){if(Vs.hasOwnProperty(e))return Vs[e].call(null,this)},triggerElectric:gn(function(e){Jo(this,e)}),findPosH:function(e,t,r,n){var i=this,o=1;t<0&&(o=-1,t=-t);for(var l=U(this.doc,e),s=0;s<t&&(l=nl(i.doc,l,o,r,n),!l.hitSide);++s);return l},moveH:gn(function(e,t){var r=this;this.extendSelectionsBy(function(n){return r.display.shift||r.doc.extend||n.empty()?nl(r.doc,n.head,e,t,r.options.rtlMoveVisually):e<0?n.from():n.to()},Xl)}),deleteH:gn(function(e,t){var r=this.doc.sel,n=this.doc;r.somethingSelected()?n.replaceSelection("",null,"+delete"):fo(this,function(r){var i=nl(n,r.head,e,t,!1);return e<0?{from:i,to:r.head}:{from:r.head,to:i}})}),findPosV:function(e,t,r,n){var i=this,o=1,l=n;t<0&&(o=-1,t=-t);for(var s=U(this.doc,e),a=0;a<t;++a){var u=ar(i,s,"div");if(null==l?l=u.left:u.left=l,s=il(i,u,o,r),s.hitSide)break}return s},moveV:gn(function(e,t){var r=this,n=this.doc,i=[],o=!this.display.shift&&!n.extend&&n.sel.somethingSelected();if(n.extendSelectionsBy(function(l){if(o)return e<0?l.from():l.to();var s=ar(r,l.head,"div");null!=l.goalColumn&&(s.left=l.goalColumn),i.push(s.left);var a=il(r,s,e,t);return"page"==t&&l==n.sel.primary()&&jr(r,sr(r,a,"div").top-s.top),a},Xl),i.length)for(var l=0;l<n.sel.ranges.length;l++)n.sel.ranges[l].goalColumn=i[l]}),findWordAt:function(e){var t=this.doc,r=M(t,e.line).text,n=e.ch,i=e.ch;if(r){var o=this.getHelper(e,"wordChars");"before"!=e.sticky&&i!=r.length||!n?++i:--n;for(var l=r.charAt(n),s=x(l,o)?function(e){return x(e,o)}:/\s/.test(l)?function(e){return/\s/.test(e)}:function(e){return!/\s/.test(e)&&!x(e)};n>0&&s(r.charAt(n-1));)--n;for(;i<r.length&&s(r.charAt(i));)++i}return new Os(P(e.line,n),P(e.line,i))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?s(this.display.cursorDiv,"CodeMirror-overwrite"):zl(this.display.cursorDiv,"CodeMirror-overwrite"),Te(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==l()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:gn(function(e,t){Yr(this,e,t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-Rt(this)-this.display.barHeight,width:e.scrollWidth-Rt(this)-this.display.barWidth,clientHeight:Gt(this),clientWidth:Bt(this)}},scrollIntoView:gn(function(e,t){null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):"number"==typeof e?e={from:P(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line?_r(this,e):$r(this,e.from,e.to,e.margin)}),setSize:gn(function(e,t){var r=this,n=function(e){return"number"==typeof e||/^\d+$/.test(String(e))?e+"px":e};null!=e&&(this.display.wrapper.style.width=n(e)),null!=t&&(this.display.wrapper.style.height=n(t)),this.options.lineWrapping&&er(this);var i=this.display.viewFrom;this.doc.iter(i,this.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){yn(r,i,"widget");break}++i}),this.curOp.forceUpdate=!0,Te(this,"refresh",this)}),operation:function(e){return dn(this,e)},startOperation:function(){return on(this)},endOperation:function(){return ln(this)},refresh:gn(function(){var e=this.display.cachedTextHeight;mn(this),this.curOp.forceUpdate=!0,tr(this),Yr(this,this.doc.scrollLeft,this.doc.scrollTop),Dn(this),(null==e||Math.abs(e-yr(this.display))>.5)&&Sr(this),Te(this,"refresh",this)}),swapDoc:gn(function(e){var t=this.doc;return t.cm=null,Zn(this,e),tr(this),this.display.input.reset(),Yr(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,wt(this,"swapDoc",this,t),t}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Ae(e),e.registerHelper=function(t,n,i){r.hasOwnProperty(t)||(r[t]=e[t]={_global:[]}),r[t][n]=i},e.registerGlobalHelper=function(t,n,i,o){e.registerHelper(t,n,o),r[t]._global.push({pred:i,val:o})}}(Yo);var ra="iter insert remove copy getEditor constructor".split(" ");for(var na in Ps.prototype)Ps.prototype.hasOwnProperty(na)&&h(ra,na)<0&&(Yo.prototype[na]=function(e){return function(){return e.apply(this.doc,arguments)}}(Ps.prototype[na]));return Ae(Ps),Yo.inputStyles={textarea:ta,contenteditable:ea},Yo.defineMode=function(e){Yo.defaults.mode||"null"==e||(Yo.defaults.mode=e),Be.apply(this,arguments)},Yo.defineMIME=Ge,Yo.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),Yo.defineMIME("text/plain","null"),Yo.defineExtension=function(e,t){Yo.prototype[e]=t},Yo.defineDocExtension=function(e,t){Ps.prototype[e]=t},Yo.fromTextArea=fl,function(e){e.off=ke,e.on=ts,e.wheelEventPixels=zn,e.Doc=Ps,e.splitLines=ns,e.countColumn=f,e.findColumn=d,e.isWordChar=w,e.Pass=Vl,e.signal=Te,e.Line=ps,e.changeEnd=Gn,e.scrollbarModel=Ss,e.Pos=P,e.cmpPos=E,e.modes=ss,e.mimeModes=as,e.resolveMode=Ue,e.getMode=Ve,e.modeExtensions=us,e.extendMode=Ke,e.copyState=je,e.startState=Ye,e.innerMode=Xe,e.commands=Vs,e.keyMap=Us,e.keyName=uo,e.isModifierKey=so,e.lookupKey=lo,e.normalizeKeyMap=oo,e.StringStream=cs,e.SharedTextMarker=Hs,e.TextMarker=Ds,e.LineWidget=As,e.e_preventDefault=We,e.e_stopPropagation=De,e.e_stop=Fe,e.addClass=s,e.contains=o,e.rmClass=zl,e.keyNames=Is}(Yo),Yo.version="5.32.0",Yo});
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/static/styles.9f50282210bba5318775.bundle.css b/asterixdb/asterix-app/src/main/resources/dashboard/static/styles.9f50282210bba5318775.bundle.css
new file mode 100644
index 0000000..8b566dc
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/static/styles.9f50282210bba5318775.bundle.css
@@ -0,0 +1 @@
+html{box-sizing:border-box}body{font-family:Roboto Mono,monospace;font-size:.8rem;font-weight:500}.ui-datatable .ui-sortable-column div.ui-dt-c{padding-right:15px!important}.mat-elevation-z0{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-elevation-z1{box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}.mat-elevation-z2{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mat-elevation-z3{box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)}.mat-elevation-z4{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.mat-elevation-z5{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 5px 8px 0 rgba(0,0,0,.14),0 1px 14px 0 rgba(0,0,0,.12)}.mat-elevation-z6{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-elevation-z7{box-shadow:0 4px 5px -2px rgba(0,0,0,.2),0 7px 10px 1px rgba(0,0,0,.14),0 2px 16px 1px rgba(0,0,0,.12)}.mat-elevation-z8{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.mat-elevation-z9{box-shadow:0 5px 6px -3px rgba(0,0,0,.2),0 9px 12px 1px rgba(0,0,0,.14),0 3px 16px 2px rgba(0,0,0,.12)}.mat-elevation-z10{box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12)}.mat-elevation-z11{box-shadow:0 6px 7px -4px rgba(0,0,0,.2),0 11px 15px 1px rgba(0,0,0,.14),0 4px 20px 3px rgba(0,0,0,.12)}.mat-elevation-z12{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-elevation-z13{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12)}.mat-elevation-z14{box-shadow:0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12)}.mat-elevation-z15{box-shadow:0 8px 9px -5px rgba(0,0,0,.2),0 15px 22px 2px rgba(0,0,0,.14),0 6px 28px 5px rgba(0,0,0,.12)}.mat-elevation-z16{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.mat-elevation-z17{box-shadow:0 8px 11px -5px rgba(0,0,0,.2),0 17px 26px 2px rgba(0,0,0,.14),0 6px 32px 5px rgba(0,0,0,.12)}.mat-elevation-z18{box-shadow:0 9px 11px -5px rgba(0,0,0,.2),0 18px 28px 2px rgba(0,0,0,.14),0 7px 34px 6px rgba(0,0,0,.12)}.mat-elevation-z19{box-shadow:0 9px 12px -6px rgba(0,0,0,.2),0 19px 29px 2px rgba(0,0,0,.14),0 7px 36px 6px rgba(0,0,0,.12)}.mat-elevation-z20{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 20px 31px 3px rgba(0,0,0,.14),0 8px 38px 7px rgba(0,0,0,.12)}.mat-elevation-z21{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 21px 33px 3px rgba(0,0,0,.14),0 8px 40px 7px rgba(0,0,0,.12)}.mat-elevation-z22{box-shadow:0 10px 14px -6px rgba(0,0,0,.2),0 22px 35px 3px rgba(0,0,0,.14),0 8px 42px 7px rgba(0,0,0,.12)}.mat-elevation-z23{box-shadow:0 11px 14px -7px rgba(0,0,0,.2),0 23px 36px 3px rgba(0,0,0,.14),0 9px 44px 8px rgba(0,0,0,.12)}.mat-elevation-z24{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto,Helvetica Neue,sans-serif;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto,Helvetica Neue,sans-serif;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto,Helvetica Neue,sans-serif;margin:0 0 16px}.mat-h5,.mat-typography h5{font-size:11.62px}.mat-h5,.mat-h6,.mat-typography h5,.mat-typography h6{font-weight:400;font-family:Roboto,Helvetica Neue,sans-serif;line-height:20px;margin:0 0 12px}.mat-h6,.mat-typography h6{font-size:9.38px}.mat-body-2,.mat-body-strong{font:500 14px/24px Roboto,Helvetica Neue,sans-serif}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto,Helvetica Neue,sans-serif}.mat-body-1 p,.mat-body p,.mat-typography p{margin:0 0 12px}.mat-caption,.mat-small{font:400 12px/20px Roboto,Helvetica Neue,sans-serif}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto,Helvetica Neue,sans-serif;margin:0 0 56px;letter-spacing:-.05em}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto,Helvetica Neue,sans-serif;margin:0 0 64px;letter-spacing:-.02em}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto,Helvetica Neue,sans-serif;margin:0 0 64px;letter-spacing:-.005em}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto,Helvetica Neue,sans-serif;margin:0 0 64px}.mat-button,.mat-fab,.mat-icon-button,.mat-mini-fab,.mat-raised-button{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-button-toggle,.mat-card{font-family:Roboto,Helvetica Neue,sans-serif}.mat-card-title{font-size:24px;font-weight:400}.mat-card-content,.mat-card-header .mat-card-title,.mat-card-subtitle{font-size:14px}.mat-checkbox{font-family:Roboto,Helvetica Neue,sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:13px;line-height:18px}.mat-chip .mat-chip-remove.mat-icon{font-size:18px}.mat-table{font-family:Roboto,Helvetica Neue,sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell{font-size:14px}.mat-calendar{font-family:Roboto,Helvetica Neue,sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto,Helvetica Neue,sans-serif}.mat-expansion-panel-header{font-family:Roboto,Helvetica Neue,sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto,Helvetica Neue,sans-serif}.mat-form-field{font-family:Roboto,Helvetica Neue,sans-serif;font-size:inherit;font-weight:400;line-height:1.125}.mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.4375em 0;border-top:.84375em solid transparent}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333333%}.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);-ms-transform:translateY(-1.28124em) scale(.75);width:133.33334333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);-ms-transform:translateY(-1.28123em) scale(.75);width:133.33335333%}.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}.mat-form-field-label{top:1.28125em}.mat-form-field-underline{bottom:1.25em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.54166667em;top:calc(100% - 1.66666667em)}.mat-grid-tile-footer,.mat-grid-tile-header{font-size:14px}.mat-grid-tile-footer .mat-line,.mat-grid-tile-header .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-footer .mat-line:nth-child(n+2),.mat-grid-tile-header .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-.0625em}.mat-menu-item{font-family:Roboto,Helvetica Neue,sans-serif;font-size:16px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px}.mat-radio-button,.mat-select{font-family:Roboto,Helvetica Neue,sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font:400 14px/20px Roboto,Helvetica Neue,sans-serif}.mat-slider-thumb-label-text{font-size:12px;font-weight:500}.mat-slider-thumb-label-text,.mat-stepper-horizontal,.mat-stepper-vertical{font-family:Roboto,Helvetica Neue,sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group,.mat-tab-label,.mat-tab-link{font-family:Roboto,Helvetica Neue,sans-serif}.mat-tab-label,.mat-tab-link{font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;margin:0}.mat-tooltip{font-size:10px;padding-top:6px;padding-bottom:6px}.mat-list-item,.mat-list-option,.mat-tooltip{font-family:Roboto,Helvetica Neue,sans-serif}.mat-list .mat-list-item,.mat-nav-list .mat-list-item,.mat-selection-list .mat-list-item{font-size:16px}.mat-list .mat-list-item .mat-line,.mat-nav-list .mat-list-item .mat-line,.mat-selection-list .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list .mat-list-item .mat-line:nth-child(n+2),.mat-nav-list .mat-list-item .mat-line:nth-child(n+2),.mat-selection-list .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list .mat-list-option,.mat-nav-list .mat-list-option,.mat-selection-list .mat-list-option{font-size:16px}.mat-list .mat-list-option .mat-line,.mat-nav-list .mat-list-option .mat-line,.mat-selection-list .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list .mat-list-option .mat-line:nth-child(n+2),.mat-nav-list .mat-list-option .mat-line:nth-child(n+2),.mat-selection-list .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list .mat-subheader,.mat-nav-list .mat-subheader,.mat-selection-list .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-list[dense] .mat-list-item,.mat-nav-list[dense] .mat-list-item,.mat-selection-list[dense] .mat-list-item{font-size:12px}.mat-list[dense] .mat-list-item .mat-line,.mat-nav-list[dense] .mat-list-item .mat-line,.mat-selection-list[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list[dense] .mat-list-item .mat-line:nth-child(n+2),.mat-list[dense] .mat-list-option,.mat-nav-list[dense] .mat-list-item .mat-line:nth-child(n+2),.mat-nav-list[dense] .mat-list-option,.mat-selection-list[dense] .mat-list-item .mat-line:nth-child(n+2),.mat-selection-list[dense] .mat-list-option{font-size:12px}.mat-list[dense] .mat-list-option .mat-line,.mat-nav-list[dense] .mat-list-option .mat-line,.mat-selection-list[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list[dense] .mat-list-option .mat-line:nth-child(n+2),.mat-nav-list[dense] .mat-list-option .mat-line:nth-child(n+2),.mat-selection-list[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list[dense] .mat-subheader,.mat-nav-list[dense] .mat-subheader,.mat-selection-list[dense] .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto,Helvetica Neue,sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto,Helvetica Neue,sans-serif}.mat-simple-snackbar{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-ripple{overflow:hidden}@media screen and (-ms-high-contrast:active){.mat-ripple{display:none}}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,-webkit-transform 0ms cubic-bezier(0,0,.2,1);transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transition:opacity,transform 0ms cubic-bezier(0,0,.2,1),-webkit-transform 0ms cubic-bezier(0,0,.2,1);-webkit-transform:scale(0);transform:scale(0)}.mat-option{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;position:relative;cursor:pointer;outline:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;max-width:100%;box-sizing:border-box;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.mat-option[disabled]{cursor:default}[dir=rtl] .mat-option{text-align:right}.mat-option .mat-icon{margin-right:16px}[dir=rtl] .mat-option .mat-icon{margin-left:16px;margin-right:0}.mat-option[aria-disabled=true]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:32px}[dir=rtl] .mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:16px;padding-right:32px}.mat-option-text{display:inline-block;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;text-overflow:ellipsis}.mat-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}@media screen and (-ms-high-contrast:active){.mat-option-ripple{opacity:.5}}.mat-option-pseudo-checkbox{margin-right:8px}[dir=rtl] .mat-option-pseudo-checkbox{margin-left:8px;margin-right:0}.mat-optgroup-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup-label[disabled]{cursor:default}[dir=rtl] .mat-optgroup-label{text-align:right}.mat-optgroup-label .mat-icon{margin-right:16px}[dir=rtl] .mat-optgroup-label .mat-icon{margin-left:16px;margin-right:0}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.cdk-global-overlay-wrapper,.cdk-overlay-container{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-global-overlay-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{box-sizing:border-box}.cdk-overlay-backdrop,.cdk-overlay-pane{position:absolute;pointer-events:auto;z-index:1000}.cdk-overlay-backdrop{top:0;bottom:0;left:0;right:0;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.48}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.6)}.cdk-overlay-transparent-backdrop{background:none}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}.mat-ripple-element{background-color:rgba(0,0,0,.1)}.mat-option{color:rgba(0,0,0,.87)}.mat-option:focus:not(.mat-option-disabled),.mat-option:hover:not(.mat-option-disabled){background:rgba(0,0,0,.04)}.mat-primary .mat-option.mat-selected:not(.mat-option-disabled){color:#9e9e9e}.mat-accent .mat-option.mat-selected:not(.mat-option-disabled){color:#ffab40}.mat-warn .mat-option.mat-selected:not(.mat-option-disabled){color:#f44336}.mat-option.mat-active,.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled){background:rgba(0,0,0,.04)}.mat-option.mat-active{color:rgba(0,0,0,.87)}.mat-option.mat-option-disabled{color:rgba(0,0,0,.38)}.mat-optgroup-label{color:rgba(0,0,0,.54)}.mat-optgroup-disabled .mat-optgroup-label{color:rgba(0,0,0,.38)}.mat-pseudo-checkbox{color:rgba(0,0,0,.54)}.mat-pseudo-checkbox:after{color:#fafafa}.mat-accent .mat-pseudo-checkbox-checked,.mat-accent .mat-pseudo-checkbox-indeterminate,.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-indeterminate{background:#ffab40}.mat-primary .mat-pseudo-checkbox-checked,.mat-primary .mat-pseudo-checkbox-indeterminate{background:#9e9e9e}.mat-warn .mat-pseudo-checkbox-checked,.mat-warn .mat-pseudo-checkbox-indeterminate{background:#f44336}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background:#b0b0b0}.mat-app-background{background-color:#fafafa}.mat-theme-loaded-marker{display:none}.mat-autocomplete-panel{background:#fff;color:rgba(0,0,0,.87)}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover){background:#fff}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled){color:rgba(0,0,0,.87)}.mat-button,.mat-icon-button{background:transparent}.mat-button.mat-primary .mat-button-focus-overlay,.mat-icon-button.mat-primary .mat-button-focus-overlay{background-color:hsla(0,0%,62%,.12)}.mat-button.mat-accent .mat-button-focus-overlay,.mat-icon-button.mat-accent .mat-button-focus-overlay{background-color:rgba(255,171,64,.12)}.mat-button.mat-warn .mat-button-focus-overlay,.mat-icon-button.mat-warn .mat-button-focus-overlay{background-color:rgba(244,67,54,.12)}.mat-button[disabled] .mat-button-focus-overlay,.mat-icon-button[disabled] .mat-button-focus-overlay{background-color:transparent}.mat-button.mat-primary,.mat-icon-button.mat-primary{color:#9e9e9e}.mat-button.mat-accent,.mat-icon-button.mat-accent{color:#ffab40}.mat-button.mat-warn,.mat-icon-button.mat-warn{color:#f44336}.mat-button.mat-accent[disabled],.mat-button.mat-primary[disabled],.mat-button.mat-warn[disabled],.mat-button[disabled][disabled],.mat-icon-button.mat-accent[disabled],.mat-icon-button.mat-primary[disabled],.mat-icon-button.mat-warn[disabled],.mat-icon-button[disabled][disabled]{color:rgba(0,0,0,.38)}.mat-fab,.mat-mini-fab,.mat-raised-button{color:rgba(0,0,0,.87);background-color:#fff}.mat-fab.mat-accent,.mat-fab.mat-primary,.mat-mini-fab.mat-accent,.mat-mini-fab.mat-primary,.mat-raised-button.mat-accent,.mat-raised-button.mat-primary{color:rgba(0,0,0,.87)}.mat-fab.mat-warn,.mat-mini-fab.mat-warn,.mat-raised-button.mat-warn{color:#fff}.mat-fab.mat-accent[disabled],.mat-fab.mat-primary[disabled],.mat-fab.mat-warn[disabled],.mat-fab[disabled][disabled],.mat-mini-fab.mat-accent[disabled],.mat-mini-fab.mat-primary[disabled],.mat-mini-fab.mat-warn[disabled],.mat-mini-fab[disabled][disabled],.mat-raised-button.mat-accent[disabled],.mat-raised-button.mat-primary[disabled],.mat-raised-button.mat-warn[disabled],.mat-raised-button[disabled][disabled]{color:rgba(0,0,0,.38)}.mat-fab.mat-primary,.mat-mini-fab.mat-primary,.mat-raised-button.mat-primary{background-color:#9e9e9e}.mat-fab.mat-accent,.mat-mini-fab.mat-accent,.mat-raised-button.mat-accent{background-color:#ffab40}.mat-fab.mat-warn,.mat-mini-fab.mat-warn,.mat-raised-button.mat-warn{background-color:#f44336}.mat-fab.mat-accent[disabled],.mat-fab.mat-primary[disabled],.mat-fab.mat-warn[disabled],.mat-fab[disabled][disabled],.mat-mini-fab.mat-accent[disabled],.mat-mini-fab.mat-primary[disabled],.mat-mini-fab.mat-warn[disabled],.mat-mini-fab[disabled][disabled],.mat-raised-button.mat-accent[disabled],.mat-raised-button.mat-primary[disabled],.mat-raised-button.mat-warn[disabled],.mat-raised-button[disabled][disabled]{background-color:rgba(0,0,0,.12)}.mat-fab.mat-accent .mat-ripple-element,.mat-fab.mat-primary .mat-ripple-element,.mat-mini-fab.mat-accent .mat-ripple-element,.mat-mini-fab.mat-primary .mat-ripple-element,.mat-raised-button.mat-accent .mat-ripple-element,.mat-raised-button.mat-primary .mat-ripple-element{background-color:rgba(0,0,0,.2)}.mat-fab.mat-warn .mat-ripple-element,.mat-mini-fab.mat-warn .mat-ripple-element,.mat-raised-button.mat-warn .mat-ripple-element{background-color:hsla(0,0%,100%,.2)}.mat-button.mat-primary .mat-ripple-element{background-color:hsla(0,0%,62%,.1)}.mat-button.mat-accent .mat-ripple-element{background-color:rgba(255,171,64,.1)}.mat-button.mat-warn .mat-ripple-element{background-color:rgba(244,67,54,.1)}.mat-icon-button.mat-primary .mat-ripple-element{background-color:hsla(0,0%,62%,.2)}.mat-icon-button.mat-accent .mat-ripple-element{background-color:rgba(255,171,64,.2)}.mat-icon-button.mat-warn .mat-ripple-element{background-color:rgba(244,67,54,.2)}.mat-button-toggle{color:rgba(0,0,0,.38)}.mat-button-toggle.cdk-focused .mat-button-toggle-focus-overlay{background-color:rgba(0,0,0,.06)}.mat-button-toggle-checked{background-color:#e0e0e0;color:rgba(0,0,0,.54)}.mat-button-toggle-disabled{background-color:#eee;color:rgba(0,0,0,.38)}.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:#bdbdbd}.mat-card{background:#fff;color:rgba(0,0,0,.87)}.mat-card-subtitle{color:rgba(0,0,0,.54)}.mat-checkbox-frame{border-color:rgba(0,0,0,.54)}.mat-checkbox-checkmark{fill:#fafafa}.mat-checkbox-checkmark-path{stroke:#fafafa!important}.mat-checkbox-mixedmark{background-color:#fafafa}.mat-checkbox-checked.mat-primary .mat-checkbox-background,.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background{background-color:#9e9e9e}.mat-checkbox-checked.mat-accent .mat-checkbox-background,.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background{background-color:#ffab40}.mat-checkbox-checked.mat-warn .mat-checkbox-background,.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background{background-color:#f44336}.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background,.mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background{background-color:#b0b0b0}.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame{border-color:#b0b0b0}.mat-checkbox-disabled .mat-checkbox-label{color:#b0b0b0}.mat-checkbox:not(.mat-checkbox-disabled).mat-primary .mat-checkbox-ripple .mat-ripple-element{background-color:hsla(0,0%,62%,.26)}.mat-checkbox:not(.mat-checkbox-disabled).mat-accent .mat-checkbox-ripple .mat-ripple-element{background-color:rgba(255,171,64,.26)}.mat-checkbox:not(.mat-checkbox-disabled).mat-warn .mat-checkbox-ripple .mat-ripple-element{background-color:rgba(244,67,54,.26)}.mat-chip:not(.mat-basic-chip){background-color:#e0e0e0;color:rgba(0,0,0,.87)}.mat-chip:not(.mat-basic-chip) .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.mat-chip:not(.mat-basic-chip) .mat-chip-remove:hover{opacity:.54}.mat-chip.mat-chip-selected.mat-primary{background-color:#9e9e9e;color:rgba(0,0,0,.87)}.mat-chip.mat-chip-selected.mat-primary .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.mat-chip.mat-chip-selected.mat-primary .mat-chip-remove:hover{opacity:.54}.mat-chip.mat-chip-selected.mat-warn{background-color:#f44336;color:#fff}.mat-chip.mat-chip-selected.mat-warn .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-chip-selected.mat-warn .mat-chip-remove:hover{opacity:.54}.mat-chip.mat-chip-selected.mat-accent{background-color:#ffab40;color:rgba(0,0,0,.87)}.mat-chip.mat-chip-selected.mat-accent .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.mat-chip.mat-chip-selected.mat-accent .mat-chip-remove:hover{opacity:.54}.mat-table{background:#fff}.mat-header-row,.mat-row{border-bottom-color:rgba(0,0,0,.12)}.mat-header-cell{color:rgba(0,0,0,.54)}.mat-cell{color:rgba(0,0,0,.87)}.mat-datepicker-content{background-color:#fff;color:rgba(0,0,0,.87)}.mat-calendar-arrow{border-top-color:rgba(0,0,0,.54)}.mat-calendar-next-button,.mat-calendar-previous-button{color:rgba(0,0,0,.54)}.mat-calendar-table-header{color:rgba(0,0,0,.38)}.mat-calendar-table-header-divider:after{background:rgba(0,0,0,.12)}.mat-calendar-body-label{color:rgba(0,0,0,.54)}.mat-calendar-body-cell-content{color:rgba(0,0,0,.87);border-color:transparent}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){color:rgba(0,0,0,.38)}.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){background-color:rgba(0,0,0,.04)}.mat-calendar-body-selected{background-color:#9e9e9e;color:rgba(0,0,0,.87)}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:hsla(0,0%,62%,.4)}.mat-calendar-body-today:not(.mat-calendar-body-selected){border-color:rgba(0,0,0,.38)}.mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px rgba(0,0,0,.87)}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected){border-color:rgba(0,0,0,.18)}.mat-dialog-container,.mat-expansion-panel{background:#fff;color:rgba(0,0,0,.87)}.mat-action-row{border-top-color:rgba(0,0,0,.12)}.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused,.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused,.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:rgba(0,0,0,.04)}.mat-expansion-panel-header-title{color:rgba(0,0,0,.87)}.mat-expansion-indicator:after,.mat-expansion-panel-header-description{color:rgba(0,0,0,.54)}.mat-expansion-panel-header[aria-disabled=true]{color:rgba(0,0,0,.38)}.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title{color:inherit}.mat-form-field-label,.mat-hint{color:rgba(0,0,0,.54)}.mat-focused .mat-form-field-label{color:#9e9e9e}.mat-focused .mat-form-field-label.mat-accent{color:#ffab40}.mat-focused .mat-form-field-label.mat-warn{color:#f44336}.mat-focused .mat-form-field-required-marker{color:#ffab40}.mat-form-field-underline{background-color:rgba(0,0,0,.42)}.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(90deg,rgba(0,0,0,.42) 0,rgba(0,0,0,.42) 33%,transparent 0);background-size:4px 1px;background-repeat:repeat-x}.mat-form-field-ripple{background-color:#9e9e9e}.mat-form-field-ripple.mat-accent{background-color:#ffab40}.mat-form-field-ripple.mat-warn{background-color:#f44336}.mat-form-field-invalid .mat-form-field-label,.mat-form-field-invalid .mat-form-field-label.mat-accent,.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker{color:#f44336}.mat-form-field-invalid .mat-form-field-ripple{background-color:#f44336}.mat-error{color:#f44336}.mat-icon.mat-primary{color:#9e9e9e}.mat-icon.mat-accent{color:#ffab40}.mat-icon.mat-warn{color:#f44336}.mat-input-element:disabled{color:rgba(0,0,0,.38)}.mat-input-element::placeholder{color:rgba(0,0,0,.42)}.mat-input-element::-moz-placeholder{color:rgba(0,0,0,.42)}.mat-input-element::-webkit-input-placeholder{color:rgba(0,0,0,.42)}.mat-input-element:-ms-input-placeholder{color:rgba(0,0,0,.42)}.mat-list .mat-list-item,.mat-list .mat-list-option,.mat-nav-list .mat-list-item,.mat-nav-list .mat-list-option,.mat-selection-list .mat-list-item,.mat-selection-list .mat-list-option{color:rgba(0,0,0,.87)}.mat-list .mat-subheader,.mat-nav-list .mat-subheader,.mat-selection-list .mat-subheader{color:rgba(0,0,0,.54)}.mat-list-item-disabled{background-color:#eee}.mat-divider{border-top-color:rgba(0,0,0,.12)}.mat-nav-list .mat-list-item{outline:none}.mat-nav-list .mat-list-item.mat-list-item-focus,.mat-nav-list .mat-list-item:hover{background:rgba(0,0,0,.04)}.mat-list-option{outline:none}.mat-list-option.mat-list-item-focus,.mat-list-option:hover{background:rgba(0,0,0,.04)}.mat-menu-panel{background:#fff}.mat-menu-item{background:transparent;color:rgba(0,0,0,.87)}.mat-menu-item[disabled]{color:rgba(0,0,0,.38)}.mat-menu-item-submenu-trigger:after,.mat-menu-item .mat-icon:not([color]){color:rgba(0,0,0,.54)}.mat-menu-item-highlighted:not([disabled]),.mat-menu-item:focus:not([disabled]),.mat-menu-item:hover:not([disabled]){background:rgba(0,0,0,.04)}.mat-paginator{background:#fff}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{color:rgba(0,0,0,.54)}.mat-paginator-decrement,.mat-paginator-increment{border-top:2px solid rgba(0,0,0,.54);border-right:2px solid rgba(0,0,0,.54)}.mat-icon-button[disabled] .mat-paginator-decrement,.mat-icon-button[disabled] .mat-paginator-increment{border-color:rgba(0,0,0,.38)}.mat-progress-bar-background{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20version%3D%271.1%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20xmlns%3Axlink%3D%27http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%27%20x%3D%270px%27%20y%3D%270px%27%20enable-background%3D%27new%200%200%205%202%27%20xml%3Aspace%3D%27preserve%27%20viewBox%3D%270%200%205%202%27%20preserveAspectRatio%3D%27none%20slice%27%3E%3Ccircle%20cx%3D%271%27%20cy%3D%271%27%20r%3D%271%27%20fill%3D%27whitesmoke%27%2F%3E%3C%2Fsvg%3E")}.mat-progress-bar-buffer{background-color:#f5f5f5}.mat-progress-bar-fill:after{background-color:#9e9e9e}.mat-progress-bar.mat-accent .mat-progress-bar-background{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20version%3D%271.1%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20xmlns%3Axlink%3D%27http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%27%20x%3D%270px%27%20y%3D%270px%27%20enable-background%3D%27new%200%200%205%202%27%20xml%3Aspace%3D%27preserve%27%20viewBox%3D%270%200%205%202%27%20preserveAspectRatio%3D%27none%20slice%27%3E%3Ccircle%20cx%3D%271%27%20cy%3D%271%27%20r%3D%271%27%20fill%3D%27%23ffd180%27%2F%3E%3C%2Fsvg%3E")}.mat-progress-bar.mat-accent .mat-progress-bar-buffer{background-color:#ffd180}.mat-progress-bar.mat-accent .mat-progress-bar-fill:after{background-color:#ffab40}.mat-progress-bar.mat-warn .mat-progress-bar-background{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20version%3D%271.1%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20xmlns%3Axlink%3D%27http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%27%20x%3D%270px%27%20y%3D%270px%27%20enable-background%3D%27new%200%200%205%202%27%20xml%3Aspace%3D%27preserve%27%20viewBox%3D%270%200%205%202%27%20preserveAspectRatio%3D%27none%20slice%27%3E%3Ccircle%20cx%3D%271%27%20cy%3D%271%27%20r%3D%271%27%20fill%3D%27%23ffcdd2%27%2F%3E%3C%2Fsvg%3E")}.mat-progress-bar.mat-warn .mat-progress-bar-buffer{background-color:#ffcdd2}.mat-progress-bar.mat-warn .mat-progress-bar-fill:after{background-color:#f44336}.mat-progress-spinner circle,.mat-spinner circle{stroke:#9e9e9e}.mat-progress-spinner.mat-accent circle,.mat-spinner.mat-accent circle{stroke:#ffab40}.mat-progress-spinner.mat-warn circle,.mat-spinner.mat-warn circle{stroke:#f44336}.mat-radio-outer-circle{border-color:rgba(0,0,0,.54)}.mat-radio-disabled .mat-radio-outer-circle{border-color:rgba(0,0,0,.38)}.mat-radio-disabled .mat-radio-inner-circle,.mat-radio-disabled .mat-radio-ripple .mat-ripple-element{background-color:rgba(0,0,0,.38)}.mat-radio-disabled .mat-radio-label-content{color:rgba(0,0,0,.38)}.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle{border-color:#9e9e9e}.mat-radio-button.mat-primary .mat-radio-inner-circle{background-color:#9e9e9e}.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element{background-color:hsla(0,0%,62%,.26)}.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ffab40}.mat-radio-button.mat-accent .mat-radio-inner-circle{background-color:#ffab40}.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element{background-color:rgba(255,171,64,.26)}.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle{border-color:#f44336}.mat-radio-button.mat-warn .mat-radio-inner-circle{background-color:#f44336}.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element{background-color:rgba(244,67,54,.26)}.mat-select-content,.mat-select-panel-done-animating{background:#fff}.mat-select-value{color:rgba(0,0,0,.87)}.mat-select-placeholder{color:rgba(0,0,0,.42)}.mat-select-disabled .mat-select-value{color:rgba(0,0,0,.38)}.mat-select-arrow{color:rgba(0,0,0,.54)}.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple){background:rgba(0,0,0,.12)}.mat-form-field.mat-focused.mat-primary .mat-select-arrow{color:#9e9e9e}.mat-form-field.mat-focused.mat-accent .mat-select-arrow{color:#ffab40}.mat-form-field.mat-focused.mat-warn .mat-select-arrow,.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow{color:#f44336}.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow{color:rgba(0,0,0,.38)}.mat-drawer-container{background-color:#fafafa;color:rgba(0,0,0,.87)}.mat-drawer{color:rgba(0,0,0,.87)}.mat-drawer,.mat-drawer.mat-drawer-push{background-color:#fff}.mat-drawer-backdrop.mat-drawer-shown{background-color:rgba(0,0,0,.6)}.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb{background-color:#ff9800}.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar{background-color:rgba(255,152,0,.5)}.mat-slide-toggle:not(.mat-checked) .mat-ripple-element{background-color:rgba(0,0,0,.06)}.mat-slide-toggle .mat-ripple-element{background-color:rgba(255,152,0,.12)}.mat-slide-toggle.mat-primary.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb{background-color:#9e9e9e}.mat-slide-toggle.mat-primary.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar{background-color:hsla(0,0%,62%,.5)}.mat-slide-toggle.mat-primary:not(.mat-checked) .mat-ripple-element{background-color:rgba(0,0,0,.06)}.mat-slide-toggle.mat-primary .mat-ripple-element{background-color:hsla(0,0%,62%,.12)}.mat-slide-toggle.mat-warn.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb{background-color:#f44336}.mat-slide-toggle.mat-warn.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar{background-color:rgba(244,67,54,.5)}.mat-slide-toggle.mat-warn:not(.mat-checked) .mat-ripple-element{background-color:rgba(0,0,0,.06)}.mat-slide-toggle.mat-warn .mat-ripple-element{background-color:rgba(244,67,54,.12)}.mat-disabled .mat-slide-toggle-thumb{background-color:#bdbdbd}.mat-disabled .mat-slide-toggle-bar{background-color:rgba(0,0,0,.1)}.mat-slide-toggle-thumb{background-color:#fafafa}.mat-slide-toggle-bar{background-color:rgba(0,0,0,.38)}.mat-slider-track-background{background-color:rgba(0,0,0,.26)}.mat-primary .mat-slider-thumb,.mat-primary .mat-slider-thumb-label,.mat-primary .mat-slider-track-fill{background-color:#9e9e9e}.mat-primary .mat-slider-thumb-label-text{color:rgba(0,0,0,.87)}.mat-accent .mat-slider-thumb,.mat-accent .mat-slider-thumb-label,.mat-accent .mat-slider-track-fill{background-color:#ffab40}.mat-accent .mat-slider-thumb-label-text{color:rgba(0,0,0,.87)}.mat-warn .mat-slider-thumb,.mat-warn .mat-slider-thumb-label,.mat-warn .mat-slider-track-fill{background-color:#f44336}.mat-warn .mat-slider-thumb-label-text{color:#fff}.mat-slider-focus-ring{background-color:rgba(255,171,64,.2)}.cdk-focused .mat-slider-track-background,.mat-slider:hover .mat-slider-track-background{background-color:rgba(0,0,0,.38)}.mat-slider-disabled .mat-slider-thumb,.mat-slider-disabled .mat-slider-track-background,.mat-slider-disabled .mat-slider-track-fill,.mat-slider-disabled:hover .mat-slider-track-background{background-color:rgba(0,0,0,.26)}.mat-slider-min-value .mat-slider-focus-ring{background-color:rgba(0,0,0,.12)}.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label{background-color:rgba(0,0,0,.87)}.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label{background-color:rgba(0,0,0,.26)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb{border-color:rgba(0,0,0,.26);background-color:transparent}.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb{border-color:rgba(0,0,0,.38)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb{border-color:rgba(0,0,0,.26)}.mat-slider-has-ticks .mat-slider-wrapper:after{border-color:rgba(0,0,0,.7)}.mat-slider-horizontal .mat-slider-ticks{background-image:repeating-linear-gradient(90deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent);background-image:-moz-repeating-linear-gradient(.0001deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent)}.mat-slider-vertical .mat-slider-ticks{background-image:repeating-linear-gradient(180deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent)}.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused,.mat-step-header:hover{background-color:rgba(0,0,0,.04)}.mat-step-header .mat-step-label,.mat-step-header .mat-step-optional{color:rgba(0,0,0,.38)}.mat-step-header .mat-step-icon{background-color:#9e9e9e;color:rgba(0,0,0,.87)}.mat-step-header .mat-step-icon-not-touched{background-color:rgba(0,0,0,.38);color:rgba(0,0,0,.87)}.mat-step-header .mat-step-label.mat-step-label-active{color:rgba(0,0,0,.87)}.mat-stepper-horizontal,.mat-stepper-vertical{background-color:#fff}.mat-stepper-vertical-line:before{border-left-color:rgba(0,0,0,.12)}.mat-stepper-horizontal-line{border-top-color:rgba(0,0,0,.12)}.mat-tab-header,.mat-tab-nav-bar{border-bottom:1px solid rgba(0,0,0,.12)}.mat-tab-group-inverted-header .mat-tab-header,.mat-tab-group-inverted-header .mat-tab-nav-bar{border-top:1px solid rgba(0,0,0,.12);border-bottom:none}.mat-tab-label,.mat-tab-link{color:rgba(0,0,0,.87)}.mat-tab-label.mat-tab-disabled,.mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.38)}.mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.38)}.mat-tab-group[class*=mat-background-] .mat-tab-header,.mat-tab-nav-bar[class*=mat-background-]{border-bottom:none;border-top:none}.mat-tab-group.mat-primary .mat-tab-label:focus,.mat-tab-group.mat-primary .mat-tab-link:focus,.mat-tab-nav-bar.mat-primary .mat-tab-label:focus,.mat-tab-nav-bar.mat-primary .mat-tab-link:focus{background-color:hsla(0,0%,96%,.3)}.mat-tab-group.mat-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary .mat-ink-bar{background-color:#9e9e9e}.mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar{background-color:rgba(0,0,0,.87)}.mat-tab-group.mat-accent .mat-tab-label:focus,.mat-tab-group.mat-accent .mat-tab-link:focus,.mat-tab-nav-bar.mat-accent .mat-tab-label:focus,.mat-tab-nav-bar.mat-accent .mat-tab-link:focus{background-color:rgba(255,209,128,.3)}.mat-tab-group.mat-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent .mat-ink-bar{background-color:#ffab40}.mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar{background-color:rgba(0,0,0,.87)}.mat-tab-group.mat-warn .mat-tab-label:focus,.mat-tab-group.mat-warn .mat-tab-link:focus,.mat-tab-nav-bar.mat-warn .mat-tab-label:focus,.mat-tab-nav-bar.mat-warn .mat-tab-link:focus{background-color:rgba(255,205,210,.3)}.mat-tab-group.mat-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn .mat-ink-bar{background-color:#f44336}.mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-background-primary .mat-tab-label:focus,.mat-tab-group.mat-background-primary .mat-tab-link:focus,.mat-tab-nav-bar.mat-background-primary .mat-tab-label:focus,.mat-tab-nav-bar.mat-background-primary .mat-tab-link:focus{background-color:hsla(0,0%,96%,.3)}.mat-tab-group.mat-background-primary .mat-tab-header,.mat-tab-group.mat-background-primary .mat-tab-links,.mat-tab-nav-bar.mat-background-primary .mat-tab-header,.mat-tab-nav-bar.mat-background-primary .mat-tab-links{background-color:#9e9e9e}.mat-tab-group.mat-background-primary .mat-tab-label,.mat-tab-group.mat-background-primary .mat-tab-link,.mat-tab-nav-bar.mat-background-primary .mat-tab-label,.mat-tab-nav-bar.mat-background-primary .mat-tab-link{color:rgba(0,0,0,.87)}.mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.4)}.mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}.mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.4)}.mat-tab-group.mat-background-primary .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary .mat-ripple-element{background-color:rgba(0,0,0,.12)}.mat-tab-group.mat-background-accent .mat-tab-label:focus,.mat-tab-group.mat-background-accent .mat-tab-link:focus,.mat-tab-nav-bar.mat-background-accent .mat-tab-label:focus,.mat-tab-nav-bar.mat-background-accent .mat-tab-link:focus{background-color:rgba(255,209,128,.3)}.mat-tab-group.mat-background-accent .mat-tab-header,.mat-tab-group.mat-background-accent .mat-tab-links,.mat-tab-nav-bar.mat-background-accent .mat-tab-header,.mat-tab-nav-bar.mat-background-accent .mat-tab-links{background-color:#ffab40}.mat-tab-group.mat-background-accent .mat-tab-label,.mat-tab-group.mat-background-accent .mat-tab-link,.mat-tab-nav-bar.mat-background-accent .mat-tab-label,.mat-tab-nav-bar.mat-background-accent .mat-tab-link{color:rgba(0,0,0,.87)}.mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.4)}.mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}.mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.4)}.mat-tab-group.mat-background-accent .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent .mat-ripple-element{background-color:rgba(0,0,0,.12)}.mat-tab-group.mat-background-warn .mat-tab-label:focus,.mat-tab-group.mat-background-warn .mat-tab-link:focus,.mat-tab-nav-bar.mat-background-warn .mat-tab-label:focus,.mat-tab-nav-bar.mat-background-warn .mat-tab-link:focus{background-color:rgba(255,205,210,.3)}.mat-tab-group.mat-background-warn .mat-tab-header,.mat-tab-group.mat-background-warn .mat-tab-links,.mat-tab-nav-bar.mat-background-warn .mat-tab-header,.mat-tab-nav-bar.mat-background-warn .mat-tab-links{background-color:#f44336}.mat-tab-group.mat-background-warn .mat-tab-label,.mat-tab-group.mat-background-warn .mat-tab-link,.mat-tab-nav-bar.mat-background-warn .mat-tab-label,.mat-tab-nav-bar.mat-background-warn .mat-tab-link{color:#fff}.mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled{color:hsla(0,0%,100%,.4)}.mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron{border-color:#fff}.mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:hsla(0,0%,100%,.4)}.mat-tab-group.mat-background-warn .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn .mat-ripple-element{background-color:hsla(0,0%,100%,.12)}.mat-toolbar{background:#f5f5f5;color:rgba(0,0,0,.87)}.mat-toolbar.mat-primary{background:#9e9e9e;color:rgba(0,0,0,.87)}.mat-toolbar.mat-accent{background:#ffab40;color:rgba(0,0,0,.87)}.mat-toolbar.mat-warn{background:#f44336;color:#fff}.mat-tooltip{background:rgba(97,97,97,.9)}.mat-snack-bar-container{background:#323232;color:#fff}.mat-simple-snackbar-action{color:#ffab40}*{font-family:Roboto,Helvetica Neue,sans-serif}.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,.5)}.cm-animate-fat-cursor,.cm-fat-cursor-mark{-webkit-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;background-color:#7e7}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.cm-s-monokai.CodeMirror{background:#272822;color:#f8f8f2}.cm-s-monokai div.CodeMirror-selected{background:#49483e}.cm-s-monokai .CodeMirror-line::selection,.cm-s-monokai .CodeMirror-line>span::selection,.cm-s-monokai .CodeMirror-line>span>span::selection{background:rgba(73,72,62,.99)}.cm-s-monokai .CodeMirror-line::-moz-selection,.cm-s-monokai .CodeMirror-line>span::-moz-selection,.cm-s-monokai .CodeMirror-line>span>span::-moz-selection{background:rgba(73,72,62,.99)}.cm-s-monokai .CodeMirror-gutters{background:#272822;border-right:0}.cm-s-monokai .CodeMirror-guttermarker{color:#fff}.cm-s-monokai .CodeMirror-guttermarker-subtle,.cm-s-monokai .CodeMirror-linenumber{color:#d0d0d0}.cm-s-monokai .CodeMirror-cursor{border-left:1px solid #f8f8f0}.cm-s-monokai span.cm-comment{color:#75715e}.cm-s-monokai span.cm-atom,.cm-s-monokai span.cm-number{color:#ae81ff}.cm-s-monokai span.cm-attribute,.cm-s-monokai span.cm-property{color:#a6e22e}.cm-s-monokai span.cm-keyword{color:#f92672}.cm-s-monokai span.cm-builtin{color:#66d9ef}.cm-s-monokai span.cm-string{color:#e6db74}.cm-s-monokai span.cm-variable{color:#f8f8f2}.cm-s-monokai span.cm-variable-2{color:#9effff}.cm-s-monokai span.cm-type,.cm-s-monokai span.cm-variable-3{color:#66d9ef}.cm-s-monokai span.cm-def{color:#fd971f}.cm-s-monokai span.cm-bracket{color:#f8f8f2}.cm-s-monokai span.cm-tag{color:#f92672}.cm-s-monokai span.cm-header,.cm-s-monokai span.cm-link{color:#ae81ff}.cm-s-monokai span.cm-error{background:#f92672;color:#f8f8f0}.cm-s-monokai .CodeMirror-activeline-background{background:#373831}.cm-s-monokai .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}@charset "UTF-8";.ui-widget,.ui-widget button,.ui-widget input,.ui-widget select,.ui-widget textarea{font-family:Roboto,Trebuchet MS,Arial,Helvetica,sans-serif;font-size:1em}.ui-widget :active{outline:none}.ui-widget-content{border:1px solid #d5d5d5;background:#fff;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #d9d9d9;background:#f6f7f9;color:#1b1d1f;font-weight:400}.ui-widget-header a{color:#1b1d1f}.ui-widget-overlay{background:#666;opacity:.5;filter:Alpha(Opacity=50)}.ui-state-default{border:1px solid #d6d6d6;background:#fff;color:#555}.ui-state-default a{color:#555}.ui-state-active{border-color:#bebebe;background:#d6d6d6;color:#212121}.ui-state-active a{color:#212121}.ui-state-highlight{border-color:#156090;background:#186ba0;color:#fff}.ui-state-highlight a{color:#fff}.ui-state-focus{border-color:silver;background:#eee;color:#212121}.ui-state-focus a{color:#212121}.ui-state-error{border-color:#f44336;background:#f5554a;color:#cd0a0a}.ui-state-error a{color:#cd0a0a}.ui-state-disabled,.ui-widget:disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none;cursor:default!important}.ui-state-disabled *,.ui-widget:disabled *{cursor:default!important}.ui-inputtext:enabled:hover{border-color:silver}.ui-inputtext.ui-state-focus,.ui-inputtext:focus{outline:0 none;border-color:silver;box-shadow:0 0 5px silver}.ui-inputgroup .ui-inputgroup-addon{border-color:#d6d6d6;background-color:#f0f0f0;color:#222}.ui-inputgroup .ui-inputgroup-addon:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.ui-inputgroup .ui-inputgroup-addon:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.ui-inputgroup .ui-button:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.ui-inputgroup .ui-button:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.ui-float-label input.ng-dirty.ng-invalid~label{color:#cd0a0a}.ui-autocomplete .ui-autocomplete-multiple-container:not(.ui-state-disabled).ui-state-focus,.ui-autocomplete .ui-autocomplete-multiple-container:not(.ui-state-disabled):hover,.ui-chips>ul:not(.ui-state-disabled).ui-state-focus,.ui-chips>ul:not(.ui-state-disabled):hover{border-color:silver}.ui-button:enabled:hover,.ui-button:focus,.ui-fileupload-choose:not(.ui-state-disabled):hover{outline:0 none;border-color:silver;background:#eee;color:#212121}.ui-button:enabled:hover a,.ui-button:focus a,.ui-fileupload-choose:not(.ui-state-disabled):hover a{color:#212121}.ui-button:enabled:active,.ui-fileupload-choose:not(.ui-state-disabled):active{border-color:#bebebe;background:#d6d6d6;color:#212121}.ui-chkbox-box:not(.ui-state-disabled):not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-chkbox-box:not(.ui-state-disabled):not(.ui-state-active):hover a{color:#212121}.ui-radiobutton-box:not(.ui-state-disabled):not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-radiobutton-box:not(.ui-state-disabled):not(.ui-state-active):hover a{color:#212121}.ui-dropdown:not(.ui-state-disabled):hover{border-color:silver;background:#eee;color:#212121}.ui-dropdown:not(.ui-state-disabled):hover a{color:#212121}.ui-dropdown-panel .ui-dropdown-item:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-dropdown-panel .ui-dropdown-item:not(.ui-state-highlight):hover a{color:#212121}.ui-listbox .ui-listbox-header .ui-listbox-filter-container .fa{color:#222}.ui-listbox:not(.ui-state-disabled) .ui-listbox-item:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-listbox:not(.ui-state-disabled) .ui-listbox-item:not(.ui-state-highlight):hover a{color:#212121}.ui-listbox.ui-state-disabled .ui-chkbox-box:not(.ui-state-active):hover{border-color:#d6d6d6;background:#fff;color:#555}.ui-multiselect:not(.ui-state-disabled):hover{border-color:silver;background:#eee;color:#212121}.ui-multiselect:not(.ui-state-disabled):hover a{color:#212121}.ui-multiselect-panel .ui-multiselect-item:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-multiselect-panel .ui-multiselect-item:not(.ui-state-highlight):hover a{color:#212121}.ui-multiselect-panel .ui-multiselect-close{color:#1b1d1f}.ui-multiselect-panel .ui-multiselect-filter-container .fa{color:#222}.ui-spinner:not(.ui-state-disabled) .ui-spinner-button:enabled:hover{border-color:silver;background:#eee;color:#212121}.ui-spinner:not(.ui-state-disabled) .ui-spinner-button:enabled:hover a{color:#212121}.ui-spinner:not(.ui-state-disabled) .ui-spinner-button:enabled:active{border-color:#bebebe;background:#d6d6d6;color:#212121}.ui-selectbutton .ui-button:not(.ui-state-disabled):not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-selectbutton .ui-button:not(.ui-state-disabled):not(.ui-state-active):hover a{color:#212121}.ui-togglebutton:not(.ui-state-disabled):not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-togglebutton:not(.ui-state-disabled):not(.ui-state-active):hover a{color:#212121}.ui-paginator a:not(.ui-state-disabled):not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-paginator a:not(.ui-state-disabled):not(.ui-state-active):hover a{color:#212121}.ui-paginator a{color:#555}.ui-datatable .ui-rowgroup-header a{color:#1b1d1f}.ui-datatable .ui-sortable-column:not(.ui-state-active):hover{background:#eee;color:#212121}.ui-datatable .ui-row-toggler{color:#222}.ui-datatable tbody.ui-datatable-hoverable-rows>tr.ui-widget-content:not(.ui-state-highlight):hover{cursor:pointer;background:#eee;color:#212121}.ui-orderlist .ui-orderlist-item:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-orderlist .ui-orderlist-item:not(.ui-state-highlight):hover a{color:#212121}.ui-picklist .ui-picklist-item:not(.ui-state-disabled):not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-picklist .ui-picklist-item:not(.ui-state-disabled):not(.ui-state-highlight):hover a{color:#212121}.ui-picklist .ui-picklist-droppoint-highlight{border-color:#156090;background:#186ba0;color:#1f1f1f}.ui-picklist .ui-picklist-droppoint-highlight a{color:#1f1f1f}.ui-picklist .ui-picklist-highlight{border-color:#156090;color:#1f1f1f}.ui-picklist .ui-picklist-highlight a{color:#1f1f1f}.ui-tree.ui-treenode-dragover{border-color:#156090}.ui-tree .ui-treenode-content.ui-treenode-selectable .ui-treenode-label:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-tree .ui-treenode-content.ui-treenode-selectable .ui-treenode-label:not(.ui-state-highlight):hover a{color:#212121}.ui-tree .ui-treenode-content.ui-treenode-dragover{background:#d6d6d6;color:#212121}.ui-tree.ui-tree-horizontal .ui-treenode-content.ui-treenode-selectable .ui-treenode-label:not(.ui-state-highlight):hover{background-color:inherit;color:inherit}.ui-tree.ui-tree-horizontal .ui-treenode-content.ui-treenode-selectable:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-tree.ui-tree-horizontal .ui-treenode-content.ui-treenode-selectable:not(.ui-state-highlight):hover a{color:#212121}.ui-treetable .ui-treetable-row.ui-treetable-row-selectable:not(.ui-state-highlight):hover{background:#eee;color:#212121}.ui-organizationchart .ui-organizationchart-node-content.ui-organizationchart-selectable-node:not(.ui-state-highlight):hover{border-color:silver;background:#eee;color:#212121}.ui-organizationchart .ui-organizationchart-node-content.ui-organizationchart-selectable-node:not(.ui-state-highlight):hover a{color:#212121}.ui-accordion .ui-accordion-header:not(.ui-state-active):not(.ui-state-disabled):hover{border-color:silver;background:#eee;color:#212121}.ui-accordion .ui-accordion-header:not(.ui-state-active):not(.ui-state-disabled):hover a{color:#212121}.ui-fieldset.ui-fieldset-toggleable .ui-fieldset-legend:hover{border-color:silver;background:#eee;color:#212121}.ui-fieldset.ui-fieldset-toggleable .ui-fieldset-legend:hover a{color:#212121}.ui-panel .ui-panel-titlebar .ui-panel-titlebar-icon:hover{border-color:silver;background:#eee;color:#212121}.ui-panel .ui-panel-titlebar .ui-panel-titlebar-icon:hover a{color:#212121}.ui-tabview .ui-tabview-nav li:not(.ui-state-active):not(.ui-state-disabled):hover{border-color:silver;background:#eee;color:#212121}.ui-tabview .ui-tabview-nav li:not(.ui-state-active):not(.ui-state-disabled):hover a{color:#212121}.ui-dialog .ui-dialog-titlebar-icon{color:#1b1d1f}.ui-dialog .ui-dialog-titlebar-icon:hover{border-color:silver;background:#eee;color:#212121}.ui-dialog .ui-dialog-titlebar-icon:hover a{color:#212121}.ui-sidebar .ui-sidebar-close{color:#1b1d1f}.ui-sidebar .ui-sidebar-close:hover{border-color:silver;background:#eee;color:#212121}.ui-sidebar .ui-sidebar-close:hover a{color:#212121}.ui-overlaypanel .ui-overlaypanel-close:hover{border-color:silver;background:#eee;color:#212121}.ui-overlaypanel .ui-overlaypanel-close:hover a{color:#212121}.ui-inplace .ui-inplace-display:hover{border-color:silver;background:#eee;color:#212121}.ui-inplace .ui-inplace-display:hover a{color:#212121}.ui-breadcrumb a{color:#1b1d1f}.ui-menu .ui-menuitem .ui-menuitem-link{color:#222}.ui-menu .ui-menuitem .ui-menuitem-link:hover{border-color:silver;background:#eee;color:#212121;border-color:transparent}.ui-menu .ui-menuitem .ui-menuitem-link:hover a{color:#212121}.ui-menu .ui-menuitem.ui-menuitem-active>.ui-menuitem-link{border-color:silver;background:#eee;color:#212121;border-color:transparent}.ui-menu .ui-menuitem.ui-menuitem-active>.ui-menuitem-link a{color:#212121}.ui-tabmenu .ui-tabmenu-nav li:not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121}.ui-tabmenu .ui-tabmenu-nav li:not(.ui-state-active):hover a{color:#212121}.ui-steps .ui-steps-item:not(.ui-state-highlight):not(.ui-state-disabled):hover{border-color:silver;background:#eee;color:#212121}.ui-steps .ui-steps-item:not(.ui-state-highlight):not(.ui-state-disabled):hover a{color:#212121}.ui-panelmenu .ui-panelmenu-header:not(.ui-state-active):hover{border-color:silver;background:#eee;color:#212121;border-color:#d6d6d6}.ui-panelmenu .ui-panelmenu-header.ui-state-active a,.ui-panelmenu .ui-panelmenu-header:not(.ui-state-active):hover a{color:#212121}.ui-panelmenu .ui-panelmenu-content .ui-menuitem-link{color:#222}.ui-panelmenu .ui-panelmenu-content .ui-menuitem-link:hover{border-color:silver;background:#eee;color:#212121;border-color:transparent}.ui-panelmenu .ui-panelmenu-content .ui-menuitem-link:hover a{color:#212121}.ui-datepicker .ui-datepicker-header a{color:#1b1d1f}.ui-datepicker .ui-datepicker-header a:hover{border-color:silver;background:#eee;color:#212121}.ui-datepicker .ui-datepicker-header a:hover a{color:#212121}.ui-datepicker .ui-datepicker-calendar td:not(.ui-state-disabled) a:hover{border-color:silver;background:#eee;color:#212121}.ui-datepicker .ui-datepicker-calendar td:not(.ui-state-disabled) a:hover a{color:#212121}.fc .fc-toolbar .fc-prev-button .ui-icon-circle-triangle-w{margin-top:.3em;background:none!important;display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-indent:0!important;text-align:center}.fc .fc-toolbar .fc-prev-button .ui-icon-circle-triangle-w:before{content:"\F053"}.fc .fc-toolbar .fc-next-button .ui-icon-circle-triangle-e{margin-top:.3em;background:none!important;display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-indent:0!important;text-align:center}.fc .fc-toolbar .fc-next-button .ui-icon-circle-triangle-e:before{content:"\F054"}.ui-rating a{color:#222}.ui-organizationchart .ui-organizationchart-line-down{background-color:#bcbcbc}.ui-organizationchart .ui-organizationchart-line-left{border-right:1px solid #bcbcbc}.ui-organizationchart .ui-organizationchart-line-top{border-top:1px solid #bcbcbc}.ui-organizationchart .ui-organizationchart-node-content{border-color:#bcbcbc}.ui-organizationchart .ui-organizationchart-node-content .ui-node-toggler{color:#bcbcbc}.ui-inputtext.ng-dirty.ng-invalid,p-autocomplete.ng-dirty.ng-invalid>.ui-autocomplete>.ui-inputtext,p-calendar.ng-dirty.ng-invalid>.ui-calendar>.ui-inputtext,p-checkbox.ng-dirty.ng-invalid .ui-chkbox-box,p-chips.ng-dirty.ng-invalid>.ui-inputtext,p-dropdown.ng-dirty.ng-invalid>.ui-dropdown,p-inputmask.ng-dirty.ng-invalid>.ui-inputtext,p-inputswitch.ng-dirty.ng-invalid .ui-inputswitch,p-listbox.ng-dirty.ng-invalid .ui-inputtext,p-multiselect.ng-dirty.ng-invalid>.ui-multiselect,p-radiobutton.ng-dirty.ng-invalid .ui-radiobutton-box,p-selectbutton.ng-dirty.ng-invalid .ui-button,p-spinner.ng-dirty.ng-invalid>.ui-inputtext,p-togglebutton.ng-dirty.ng-invalid .ui-button{border-bottom-color:#f44336}.ui-corner-tl{border-top-left-radius:3px}.ui-corner-tr{border-top-right-radius:3px}.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-br{border-bottom-right-radius:3px}.ui-corner-top{border-top-left-radius:3px;border-top-right-radius:3px}.ui-corner-bottom{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.ui-corner-right{border-top-right-radius:3px;border-bottom-right-radius:3px}.ui-corner-left{border-top-left-radius:3px;border-bottom-left-radius:3px}.ui-corner-all{border-radius:3px}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:url(roboto-v15-latin-regular.9f916e330c478bbfa2a0.eot);src:local("Roboto"),local("Roboto-Regular"),url(roboto-v15-latin-regular.9f916e330c478bbfa2a0.eot?#iefix) format("embedded-opentype"),url(roboto-v15-latin-regular.7e367be02cd17a96d513.woff2) format("woff2"),url(roboto-v15-latin-regular.16e1d930cf13fb7a9563.woff) format("woff"),url(roboto-v15-latin-regular.38861cba61c66739c145.ttf) format("truetype"),url(roboto-v15-latin-regular.3d3a53586bd78d1069ae.svg#Roboto) format("svg")}.ui-widget-header{background:#f6f7f9 0 0 repeat-x;background:linear-gradient(180deg,#f6f7f9 0,#ebedf0)}.ui-accordion .ui-accordion-header{background:#f6f7f9;border-top:1px solid #d9d9d9}.ui-accordion .ui-accordion-header a{color:#1b1d1f}.ui-accordion .ui-accordion-header:not(.ui-state-active):not(.ui-state-disabled):hover{background:#ededf0}.ui-accordion .ui-accordion-header.ui-state-active{background:#fff;border-left-color:transparent;border-right-color:transparent;border-bottom-color:transparent;border-radius:0}.ui-accordion .ui-accordion-content,.ui-tabview.ui-widget-content{border:0 none}.ui-tabview .ui-tabview-nav{background:transparent}.ui-tabview .ui-tabview-nav>li.ui-state-default{background:#f6f7f9}.ui-tabview .ui-tabview-nav>li.ui-state-active{background:#fff;font-weight:400;color:#555}.ui-tabview .ui-tabview-nav>li:not(.ui-state-active):not(.ui-state-disabled):hover{background:#ededf0}.ui-spinner:not(.ui-state-disabled) .ui-spinner-button:enabled:hover{border:1px solid #1f89ce;background:#1f89ce;outline:0 none;color:#fff}.ui-spinner:not(.ui-state-disabled) .ui-spinner-button:enabled:active{border:1px solid #156090;background:#186ba0;color:#fff}.ui-slider{position:relative;text-align:left;background:#838688;border:none;box-shadow:inset 0 1px 3px rgba(0,0,0,.6)}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:17px!important;height:21px!important;cursor:default;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAVCAYAAAAjODzXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjZBQjgwQThDRjQ4ODExRTBBMzgxQjZGRjMwN0M4RjFGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjZBQjgwQThERjQ4ODExRTBBMzgxQjZGRjMwN0M4RjFGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NkFCODBBOEFGNDg4MTFFMEEzODFCNkZGMzA3QzhGMUYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NkFCODBBOEJGNDg4MTFFMEEzODFCNkZGMzA3QzhGMUYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5U68QXAAAED0lEQVR42qyWzU9jVRjGz+29pdBSKJWAksmMGheTyAwLKCRE/gAXAq5MEHZujCtCov8CS5dOMgkLozALo0ZCYgTdkgyTAhqR8GUDmGKhQin97q3Pc3zP5FpnGJ16k6f33N7z/u77dc69lvrn4RwcHLxXq9XeKhaLt6vV6i3XdRO4/qVUKn0Ti8XuY05FXX/8Z4blHa+srLw2NDT0WVNTUyyTyaiTkxN1dnamQqGQCgaD+gzgw/X19XfHx8d3YVOrc+C5GT4B+AB4Y3h4+BEmxxzHUX6//7Es6y9/ASAoNjIy8mhhYaHXY98wQ//09/dHent7P8ekcLlc1gYtLS1ahCA61dzcrAKBgAb6fL7w4ODgp5xmvGiUQUf8s7OzH6J+N7LZrEJNVaVS0cZMIwEGaCCcA2jf8vLyR+yH/4NBSDgajb59eXmpbNvWqQNQTw6HwxrG2hKCplP5fF6LUbe3t78D+48ZUaMMOhKBZ7fYWPScN40ikYiGtLa2qkKhoPigXC6nx4wYdjdpT0caZdCREOoVMDcoAugxwWw6dr75H8vv8RjwJtrrGjfIoCMODIpIZYAp1ZsADNva2lRHR4dKJpOqu7tbR0SwiYg1xsGutLlsG2XQkcrp6Wm6q6vrJRqzuVhXnk2EjEaWncI8HQkh+/v7Z7CvktYog6vmanNzM07P0Tg6CjaVSa05p9NpHQnTyoZkdKurqw9pT21sbKw3wuAuE4WXb66trd3r6ekJcQI7npFwKRpDNiGjpLgCdnZ2Un19fe/D/geWRhifPAfjA9h/z/pW6TFS1DI6OnoHk22mjGIUhBHCZQc2YH7eK09NTd07Ojpahv1vrDMZe3t7rWNjY3fB8P0bxuTk5P3j4+PvyKAj7K7i7u7u1dLSkosd8tXOzs6AgfDM2mJV6J1xe3s7A8BCPB7/EnZbUF4YJTDyi4uLamBg4OXrGFtbW5cTExNfoJxfwe5nMmzZodlw2VQqdTE3N5fiNo0NKoRa20i5D5FUDw8Pc/Pz89vT09MPMO9bzN+ALsQJS96meTRtDowLZCiMngkKw0LDuolEIg/G3szMzNd4EZIRh/7g883bl03L9dwF3YZeh16BXuD2LUvsFPoV+kkykWIWPG9gMoLQDeiuMLhZdXgYfGgC+hHahI6hAoOxPJ8DtryAotCLUKeAHYn2Sh6ehNIG4HHEkge2if1NCSwkbDKy0O/iTFKu+X/NEUjN1BnKyPhcwJZcl8WZrIzduu+RmpQ4J44qKV1AsuVKP53L/bzM1wy7DlTzOOXKRDpXNPuFjCtP+CjycipiWxGnCxLAuShbV9a/faGZa0vK4Zjt2wM3D3Cv+Uw0ZXYkG/VZLT0po9Y1MKvuvjdjzzq89t6vOPdpnD8FGACiWVtxaofC7AAAAABJRU5ErkJggg==) 0 0 no-repeat;outline:none;border-radius:0;border:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background:#14a4ff;box-shadow:inset 0 1px 3px rgba(0,0,0,.6);border-radius:3px}.ui-slider .ui-slider-handle.ui-state-active{background-position:-17px 0}.ui-slider-horizontal{height:6px}.ui-slider-horizontal .ui-slider-handle{top:-2px!important;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.1em!important;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-progressbar.ui-progressbar-determinate .ui-progressbar-value{border:0 none;background:#8ec5fc}.ui-progressbar.ui-progressbar-determinate .ui-progressbar .ui-progressbar-label{color:#222}.ui-progressbar.ui-progressbar-indeterminate{background:#8ec5fc}.ui-progressbar.ui-progressbar-indeterminate .ui-progressbar-value{border:0 none;background-color:#186ba0}.ui-button,.ui-widget-content .ui-button,.ui-widget-header .ui-button,.ui-widget.ui-button{border:1px solid #2399e5;color:#fff;background:#2399e5;transition:background-color .2s}.ui-button:enabled:hover,.ui-button:focus,.ui-widget-content .ui-button:enabled:hover,.ui-widget-content .ui-button:focus,.ui-widget-header .ui-button:enabled:hover,.ui-widget-header .ui-button:focus,.ui-widget.ui-button:enabled:hover,.ui-widget.ui-button:focus{border:1px solid #1f89ce;background:#1f89ce;outline:0 none;color:#fff}.ui-button:enabled:active,.ui-widget-content .ui-button:enabled:active,.ui-widget-header .ui-button:enabled:active,.ui-widget.ui-button:enabled:active{border:1px solid #156090;background:#186ba0;color:#fff}.ui-fileupload-choose.ui-state-focus,.ui-fileupload-choose:not(.ui-state-disabled):hover{border:1px solid #1f89ce;background:#1f89ce;outline:0 none;color:#fff}.ui-chkbox-box.ui-state-active,.ui-fileupload-choose:not(.ui-state-disabled):active,.ui-radiobutton-box.ui-state-active{border:1px solid #156090;background:#186ba0;color:#fff}.ui-chkbox-box.ui-state-focus,.ui-radiobutton-box.ui-state-focus{box-shadow:0 0 5px #1f89ce}.ui-chkbox-box.ui-state-focus.ui-state-active{background:#186ba0}.ui-inputtext{background:#fff;color:#222;transition:.2s}.ui-inputtext.ui-state-focus,.ui-inputtext:focus{box-shadow:0 0 5px #1f89ce}.ui-inputswitch-on{background:#186ba0!important;color:#fff!important}.ui-paginator .ui-paginator-page.ui-state-active{background:#186ba0;color:#fff;border-color:#156090}.ui-datatable th.ui-state-default{background:#ebedf0;border-color:#d9d9d9}.ui-datatable th.ui-sortable-column:not(.ui-state-active):hover{background:#d3d5d8;border-color:#d9d9d9}.ui-datatable th.ui-state-active{background:#186ba0;color:#fff}.ui-datatable tbody>tr.ui-widget-content{border-color:#d9d9d9}.ui-datatable tbody>tr.ui-widget-content.ui-datatable-odd{background-color:#fafafb}.ui-datatable tbody>tr.ui-widget-content.ui-state-highlight{background-color:#186ba0;color:#fff}.ui-datatable tfoot td.ui-state-default{background:#ebedf0;border-color:#d9d9d9}.ui-panel.ui-widget{padding:0}.ui-panel.ui-widget .ui-panel-titlebar.ui-corner-all{-moz-border-radius-bottom-left:0;border-bottom-left-radius:0;-moz-border-radius-bottom-right:0;border-bottom-right-radius:0}.ui-panel.ui-widget .ui-panel-titlebar{border-width:0 0 1px 0}.ui-panel.ui-widget .ui-panel-titlebar-icon span{position:relative;top:1px}.ui-treetable th.ui-state-default{background:#ebedf0;border-color:#d9d9d9}.ui-selectbutton .ui-button.ui-state-default,.ui-togglebutton.ui-button.ui-state-default{border:1px solid #d6d6d6;background:#fff;font-weight:400;color:#555}.ui-selectbutton .ui-button.ui-state-focus,.ui-selectbutton .ui-button.ui-state-hover,.ui-togglebutton.ui-button.ui-state-focus,.ui-togglebutton.ui-button.ui-state-hover{border:1px solid silver;background:#eee;font-weight:400;color:#212121}.ui-selectbutton .ui-button.ui-state-focus.ui-state-active,.ui-togglebutton.ui-button.ui-state-focus{box-shadow:0 0 5px #1f89ce}.ui-selectbutton .ui-button.ui-state-active,.ui-togglebutton.ui-button.ui-state-active{border:1px solid #156090;background:#186ba0;color:#fff}.ui-multiselect .ui-multiselect-label{background-color:#fff}.ui-dropdown.ui-state-focus,.ui-multiselect.ui-state-focus{box-shadow:0 0 5px #1f89ce}.ui-growl-item-container.ui-state-highlight.ui-growl-message-info{background-color:#2196f3;border-color:#2196f3}.ui-growl-item-container.ui-state-highlight.ui-growl-message-error{background-color:#f44336;border-color:#f44336}.ui-growl-item-container.ui-state-highlight.ui-growl-message-warn{background-color:#ffb300;border-color:#ffb300}.ui-growl-item-container.ui-state-highlight.ui-growl-message-success{background-color:#4caf50;border-color:#4caf50}.ui-tabmenu{border:0 none}.ui-tabmenu .ui-tabmenu-nav{background:none}.ui-tabmenu .ui-tabmenu-nav>li.ui-state-default{background:#f6f7f9}.ui-tabmenu .ui-tabmenu-nav>li.ui-state-active{background:#fff;font-weight:400;color:#555}.ui-tabmenu .ui-tabmenu-nav>li:not(.ui-state-active):not(.ui-state-disabled):hover{background:#ededf0}.ui-menu,.ui-menu .ui-menu-child{border:1px solid #d9d9d9;color:#1b1d1f;background:#f6f7f9 0 0 repeat-x;background:linear-gradient(180deg,#f6f7f9 0,#ebedf0)}.ui-menu .ui-menuitem.ui-menuitem-active>.ui-menuitem-link,.ui-menu .ui-menuitem .ui-menuitem-link:hover{background-color:#a6a6a6;color:#fff}.ui-panelmenu .ui-panelmenu-header.ui-state-active,.ui-panelmenu .ui-panelmenu-header.ui-state-active a{border-color:#156090;background:#186ba0;color:#fff}.ui-datepicker.ui-widget{padding:0}.ui-datepicker.ui-widget .ui-datepicker-header{border-radius:0;border-top:0 none;border-left:0 none;border-right:0 none}.ui-datepicker.ui-widget .ui-datepicker-header a:hover{border-width:1px}.ui-datepicker.ui-widget .ui-datepicker-calendar{margin:0}.ui-datepicker.ui-widget .ui-datepicker-calendar thead th{background-color:#f6f8fa;padding:8px}.ui-datepicker.ui-widget .ui-datepicker-calendar td{border-bottom:1px solid hsla(0,0%,84%,.5);padding:0}.ui-datepicker.ui-widget .ui-datepicker-calendar td a{border:0 none;text-align:center;padding:8px}.ui-datepicker.ui-widget .ui-datepicker-calendar td a.ui-state-highlight{background-color:#d6d6d6;color:#212121}.ui-datepicker.ui-widget .ui-datepicker-calendar td a.ui-state-active{background-color:#186ba0;color:#fff}.ui-datepicker.ui-widget .ui-datepicker-calendar tr:last-child td{border-bottom:0 none}.ui-datepicker.ui-widget .ui-timepicker{border-bottom:0 none;border-left:0 none;border-right:0 none;border-radius:0}.ui-datepicker.ui-widget.ui-datepicker-timeonly .ui-timepicker{border-top:0 none}.ui-steps .ui-steps-item.ui-state-highlight .ui-menuitem-link{color:#fff}.ui-dialog.ui-widget .ui-dialog-titlebar{padding:1em 1.5em}.ui-dialog.ui-widget .ui-dialog-titlebar .ui-dialog-title{font-size:1.25em}.ui-dialog.ui-widget .ui-dialog-content{padding:1em 1.5em}.fc .fc-button-group .ui-state-active{border:1px solid #156090;background:#186ba0;color:#fff}.ui-widget,.ui-widget *{box-sizing:border-box}.ui-helper-hidden{display:none!important}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-hidden-accessible input,.ui-helper-hidden-accessible select{-webkit-transform:scale(0);transform:scale(0)}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{zoom:1}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled,.ui-state-disabled a{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.3)}.ui-unselectable-text{-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none}.ui-scrollbar-measure{width:100px;height:100px;overflow:scroll;position:absolute;top:-9999px}.ui-overflow-hidden{overflow:hidden}::-webkit-input-placeholder{color:#898989}:-moz-placeholder,::-moz-placeholder{color:#898989;opacity:1}:-ms-input-placeholder,::-ms-input-placeholder{color:#898989}.ui-placeholder{color:#898989}.ui-accordion{width:100%}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1}.ui-accordion .ui-accordion-header a{display:block;padding:.5em .5em .5em 2em}.ui-accordion .ui-accordion-header>.fa{position:absolute;left:.5em;top:50%;margin-top:-.5em}.ui-accordion .ui-accordion-content{padding:1em;border-top:0;overflow:visible;zoom:1}.ui-accordion .ui-accordion-header.ui-state-disabled,.ui-accordion .ui-accordion-header.ui-state-disabled a{cursor:default}.ui-accordion-content-wrapper-overflown{overflow:hidden}.ui-rtl .ui-accordion .ui-accordion-header a{padding:.5em 2em .5em .5em}.ui-rtl .ui-accordion .ui-accordion-header>.fa{left:auto;right:.5em}.ui-rtl .ui-accordion .ui-accordion-header>.fa-caret-right:before{content:"\F0D9"}.ui-autocomplete{width:auto;zoom:1;cursor:pointer;box-shadow:none;position:relative;display:inline-block}.ui-autocomplete .ui-autocomplete-dropdown{height:100%;width:2em;margin-right:0;vertical-align:top}.ui-autocomplete .ui-autocomplete-input{padding-right:1.5em}.ui-autocomplete-loader{position:absolute;right:.25em;top:50%;margin-top:-.5em}.ui-autocomplete-query{font-weight:700}.ui-autocomplete-panel{position:absolute;overflow:auto}.ui-autocomplete-panel .ui-autocomplete-list{padding:.4em;border:0 none}.ui-autocomplete-panel .ui-autocomplete-list-item{border:0 none;cursor:pointer;font-weight:400;margin:1px 0;padding:.186em .313em;text-align:left}.ui-autocomplete .ui-button-icon-only,.ui-autocomplete .ui-button-icon-only:enabled:active,.ui-autocomplete .ui-button-icon-only:enabled:focus,.ui-autocomplete .ui-button-icon-only:enabled:hover{border-left:0 none}.ui-autocomplete-multiple-container{display:inline-block;vertical-align:middle}.ui-autocomplete-multiple-container.ui-inputtext{clear:left;cursor:text;list-style-type:none;margin:0;overflow:hidden;padding:0 1.5em 0 .25em}.ui-autocomplete-token{cursor:default;display:inline-block;vertical-align:middle;overflow:hidden;padding:.125em .5em;white-space:nowrap;position:relative;margin-right:.125em;border:0 none;font-size:.9em}.ui-autocomplete-token-label{display:block;margin-right:2em}.ui-autocomplete-token-icon{margin-top:-.5em;position:absolute;right:.2em;top:50%;cursor:pointer}.ui-autocomplete-input-token{display:inline-block;vertical-align:middle;list-style-type:none;margin:0 0 0 .125em;padding:.25em .25em .25em 0}.ui-autocomplete-input-token input{border:0 none;width:10em;outline:medium none;background-color:transparent;margin:0;padding:0;box-shadow:none;border-radius:0}.ui-autocomplete-dd .ui-autocomplete-loader{right:2.25em}.ui-autocomplete-dd .ui-autocomplete-multiple-container.ui-corner-all,.ui-autocomplete-dd input.ui-corner-all{border-top-right-radius:0;border-bottom-right-radius:0}.ui-autocomplete-dd .ui-autocomplete-dropdown.ui-corner-all{border-top-left-radius:0;border-bottom-left-radius:0}.ui-fluid .ui-autocomplete,.ui-fluid .ui-autocomplete-input,.ui-fluid p-autocomplete{width:100%}.ui-fluid .ui-autocomplete.ui-autocomplete-dd .ui-autocomplete-input,.ui-fluid .ui-autocomplete.ui-autocomplete-dd .ui-autocomplete-multiple-container{width:calc(100% - 2em)}.ui-fluid .ui-autocomplete .ui-autocomplete-dropdown.ui-button{width:2em}.ui-blockui{position:absolute;top:0;left:0;width:100%;height:100%}.ui-blockui-document{position:fixed}.ui-breadcrumb{margin:0;padding:0;padding:.3em}.ui-breadcrumb ul{margin:0;padding:0}.ui-breadcrumb ul li{display:inline-block;vertical-align:middle}.ui-breadcrumb ul li .ui-menuitem-link{text-decoration:none}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible}.ui-button-icon-only{width:2em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.25em 1em}.ui-button-icon-only .ui-button-text{padding:.25em;text-indent:-9999999px}.ui-button-text-icon-left .ui-button-text{padding:.25em 1em .25em 2.1em}.ui-button-text-icon-right .ui-button-text{padding:.25em 2.1em .25em 1em}.ui-button-icon-only .fa,.ui-button-text-icon-left .fa,.ui-button-text-icon-right .fa{position:absolute;top:50%;margin-top:-.5em}.ui-button-icon-only .fa{top:50%;left:50%;margin-top:-.5em;margin-left:-.6em}.ui-button-icon-left{left:.5em}.ui-button-icon-right{right:.5em}.ui-buttonset .ui-button{margin-left:0;margin-right:0}button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-fluid .ui-button{width:100%;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.ui-fluid .ui-button-text-icon-left .ui-button-text,.ui-fluid .ui-button-text-icon-right .ui-button-text{padding-left:1em;padding-right:1em}.ui-fluid .ui-buttonset,.ui-fluid .ui-buttonset.ui-buttonset-1 .ui-button{width:100%}.ui-fluid .ui-buttonset.ui-buttonset-2 .ui-button{width:50%}.ui-fluid .ui-buttonset.ui-buttonset-3 .ui-button{width:33.3%}.ui-fluid .ui-buttonset.ui-buttonset-4 .ui-button{width:25%}.ui-fluid .ui-buttonset.ui-buttonset-5 .ui-button{width:20%}.ui-fluid .ui-buttonset.ui-buttonset-6 .ui-button{width:16.6%}@media(max-width:640px){.ui-fluid .ui-buttonset.ui-buttonset-1 .ui-button,.ui-fluid .ui-buttonset.ui-buttonset-2 .ui-button,.ui-fluid .ui-buttonset.ui-buttonset-3 .ui-button,.ui-fluid .ui-buttonset.ui-buttonset-4 .ui-button,.ui-fluid .ui-buttonset.ui-buttonset-5 .ui-button,.ui-fluid .ui-buttonset.ui-buttonset-6 .ui-button{width:100%}}.ui-button.ui-button-secondary.ui-state-default,.ui-splitbutton.ui-button-secondary .ui-button.ui-state-default{background-color:#fff;border-color:#ccc;color:#373a3c}.ui-button.ui-button-secondary:enabled:hover,.ui-button.ui-button-secondary:focus,.ui-splitbutton.ui-button-secondary .ui-button:enabled:hover,.ui-splitbutton.ui-button-secondary .ui-button:focus{background-color:#f2f2f2;border-color:#ccc;color:#373a3c}.ui-button.ui-button-secondary:enabled:active,.ui-splitbutton.ui-button-secondary .ui-button:enabled:active{background-color:#e6e6e6;border-color:#ccc;color:#373a3c}.ui-button.ui-button-success.ui-state-default,.ui-splitbutton.ui-button-success .ui-button.ui-state-default{background-color:#5cb85c;border-color:#5cb85c;color:#fff}.ui-button.ui-button-success:enabled:hover,.ui-button.ui-button-success:focus,.ui-splitbutton.ui-button-success .ui-button:enabled:hover,.ui-splitbutton.ui-button-success .ui-button:focus{background-color:#4cae4c;border-color:#5cb85c}.ui-button.ui-button-success:enabled:active,.ui-splitbutton.ui-button-success .ui-button:enabled:active{background-color:#449d44;border-color:#5cb85c}.ui-button.ui-button-info.ui-state-default,.ui-splitbutton.ui-button-info .ui-button.ui-state-default{background-color:#5bc0de;border-color:#5bc0de;color:#fff}.ui-button.ui-button-info:enabled:hover,.ui-button.ui-button-info:focus,.ui-splitbutton.ui-button-info .ui-button:enabled:hover,.ui-splitbutton.ui-button-info .ui-button:focus{background-color:#46b8da;border-color:#5bc0de}.ui-button.ui-button-info:enabled:active,.ui-splitbutton.ui-button-info .ui-button:enabled:active{background-color:#31b0d5;border-color:#5bc0de}.ui-button.ui-button-warning.ui-state-default,.ui-splitbutton.ui-button-warning .ui-button.ui-state-default{background-color:#f0ad4e;border-color:#f0ad4e;color:#fff}.ui-button.ui-button-warning:enabled:hover,.ui-button.ui-button-warning:focus,.ui-splitbutton.ui-button-warning .ui-button:enabled:hover,.ui-splitbutton.ui-button-warning .ui-button:focus{background-color:#eea236;border-color:#f0ad4e}.ui-button.ui-button-warning:enabled:active,.ui-splitbutton.ui-button-warning .ui-button:enabled:active{background-color:#ec971f;border-color:#f0ad4e}.ui-button.ui-button-danger.ui-state-default,.ui-splitbutton.ui-button-danger .ui-button.ui-state-default{background-color:#d9534f;border-color:#d9534f;color:#fff}.ui-button.ui-button-danger:enabled:hover,.ui-button.ui-button-danger:focus,.ui-splitbutton.ui-button-danger .ui-button:enabled:hover,.ui-splitbutton.ui-button-danger .ui-button:focus{background-color:#d43f3a;border-color:#d9534f}.ui-button.ui-button-danger:enabled:active,.ui-splitbutton.ui-button-danger .ui-button:enabled:active{background-color:#c9302c;border-color:#d9534f}.ui-calendar{position:relative;display:inline-block}.ui-calendar .ui-calendar-button{position:absolute;height:100%;border-top-left-radius:0;border-bottom-left-radius:0;width:2em;border-left:0 none}.ui-calendar .ui-calendar-button:enabled:hover,.ui-calendar .ui-calendar-button:focus{border-left:0 none}.ui-fluid .ui-calendar{width:100%}.ui-fluid .ui-calendar-button{width:2em}.ui-fluid .ui-datepicker-buttonbar button{width:auto}.ui-fluid .ui-calendar.ui-calendar-w-btn .ui-inputtext{width:calc(100% - 2em)}.ui-datepicker{width:17em;padding:.2em;display:none;position:absolute}.ui-datepicker.ui-datepicker-inline{display:inline-block;position:static}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{position:absolute;top:.125em;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev{left:.125em}.ui-datepicker .ui-datepicker-next{right:.125em}.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{display:block;position:absolute;left:50%;top:50%;margin-top:-.5em}.ui-datepicker .ui-datepicker-prev span{margin-left:-.25em}.ui-datepicker .ui-datepicker-next span{margin-left:-.125em}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:.125em 0;vertical-align:middle}.ui-datepicker select.ui-datepicker-month{width:55%}.ui-datepicker select.ui-datepicker-year{width:35%}.ui-datepicker select.ui-datepicker-month{margin-right:.25em}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:.125em}.ui-datepicker td a,.ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker .ui-datepicker-buttonbar{border-left:0 none;border-right:0 none;border-bottom:0 none;padding:.2em}.ui-datepicker .ui-datepicker-buttonbar>.ui-g>div:last-child{text-align:right}.ui-datepicker .ui-datepicker-buttonbar>.ui-g>div{padding:0}.ui-calendar.ui-calendar-w-btn input{border-top-right-radius:0;border-bottom-right-radius:0}.ui-timepicker{text-align:center;padding:.5em 0}.ui-timepicker>div{display:inline-block;margin-left:.5em;min-width:1.5em}.ui-timepicker>.ui-minute-picker,.ui-timepicker>.ui-second-picker{margin-left:0}.ui-timepicker>.ui-separator{margin-left:0;min-width:.75em}.ui-timepicker>.ui-separator a{visibility:hidden}.ui-timepicker>div a{display:block;opacity:.7;filter:Alpha(Opacity=70)}.ui-timepicker>div a:hover{display:block;opacity:1;filter:Alpha(Opacity=100)}.ui-carousel{position:relative;padding:.063em}.ui-carousel .ui-carousel-viewport .ui-carousel-items{list-style:none outside none;margin:0;padding:0;position:relative;width:32000px;left:0}.ui-carousel .ui-carousel-viewport .ui-carousel-items .ui-carousel-item{margin:1px;padding:0;float:left;box-sizing:border-box}.ui-carousel .ui-carousel-viewport{overflow:hidden;position:relative;border:0}.ui-carousel .ui-carousel-footer{margin:1px 1px 0 1px;padding:.5em;overflow:hidden}.ui-carousel .ui-carousel-header{margin:0 1px;overflow:hidden;padding:.625em}.ui-carousel .ui-carousel-header .ui-carousel-header-title{display:inline-block;overflow:hidden}.ui-carousel .ui-carousel-dropdown,.ui-carousel .ui-carousel-mobiledropdown{float:right;margin:0 .625em;background-image:none}.ui-carousel .ui-carousel-dropdown option,.ui-carousel .ui-carousel-mobiledropdown option{background-image:none;border:0 none;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}.ui-carousel .ui-carousel-button{float:right;margin:.125em}.ui-carousel .ui-carousel-page-link{float:left;margin:0 .125em;text-decoration:none}.ui-carousel .ui-carousel-button,.ui-carousel .ui-carousel-page-link{cursor:pointer}.ui-carousel .ui-carousel-page-links{margin:0 .5em;margin-top:.125em;float:right}.ui-carousel .ui-carousel-mobiledropdown{display:none}.ui-chkbox{display:inline-block;cursor:pointer;vertical-align:middle;margin-right:.25em}.ui-chkbox .ui-chkbox-box{width:1.125em;height:1.125em;line-height:1.125em;border-radius:2px;text-align:center}.ui-chkbox .ui-chkbox-icon{display:block}.ui-chkbox-label{vertical-align:middle}.ui-chips>ul.ui-inputtext{clear:left;cursor:text;list-style-type:none;margin:0;overflow:hidden;padding:0 .25em}.ui-chips-token{cursor:default;display:inline-block;vertical-align:middle;overflow:hidden;padding:.125em .5em;white-space:nowrap;position:relative;margin-right:.125em;border:0 none;font-size:.9em}.ui-chips-token .ui-chips-token-label{display:block;margin-right:2em}.ui-chips>.ui-state-disabled .ui-chips-token-label{margin-right:0}.ui-chips-token .ui-chips-token-icon{margin-top:-.5em;position:absolute;right:.2em;top:50%;cursor:pointer}.ui-chips-input-token{display:inline-block;vertical-align:middle;list-style-type:none;margin:0 0 0 .125em;padding:.25em .25em .25em 0}.ui-chips-input-token input{border:0 none;width:10em;outline:medium none;background-color:transparent;margin:0;padding:0;box-shadow:none;border-radius:0}.ui-colorpicker{display:inline-block}.ui-colorpicker-dragging{cursor:pointer}.ui-colorpicker-overlay{position:relative}.ui-colorpicker-panel{position:relative;width:193px;height:166px;background-color:#323232;border-color:#191919}.ui-colorpicker-overlay-panel{display:none;position:absolute}.ui-colorpicker-preview{width:2em;cursor:pointer}.ui-colorpicker-panel .ui-colorpicker-content{position:relative}.ui-colorpicker-panel .ui-colorpicker-color-selector{width:150px;height:150px;top:8px;left:8px;position:absolute}.ui-colorpicker-panel .ui-colorpicker-color{width:150px;height:150px;background:transparent url(color.c7a33805ffda0d32bd2a.png) no-repeat 0 0}.ui-colorpicker-panel .ui-colorpicker-color-handle{position:absolute;top:0;left:150px;border-radius:100%;width:10px;height:10px;border:1px solid #fff;margin:-5px 0 0 -5px;cursor:pointer}.ui-colorpicker-panel .ui-colorpicker-hue{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAACWCAIAAAC3uvTNAAAA7ElEQVRYw+2YUQqDQAxEh9GWuqV6Be9/JT88RN0VRUuv0ElBwhKY3yF5m90kLKd+mF/975r6geNyjm9Fy0kgqTJ6nqoIdGKczjmPJU5tZxA8wWPL7YOHKhZAlcmTAVVcxSCrMbfgqY/H6JEOoASPe56tgSrqLR7U2zWojwWjJ3jq47HEiZoGTwJxP1RRXw8y9RZfCMhbhTHOVTxXnUFtPJ5rGjzu35y2KfKGQxWT2K4TQL1d2zz6KAH1kRU8wfOXx+37qY3Hct+aDaqot2u7R/wMuDS3qnj0z0HqK4X/+kRNHdfUwFP2Nisqe/sFuUZiVjC9HCUAAAAASUVORK5CYII=) no-repeat 0 0;width:17px;height:150px;top:8px;left:167px;position:absolute;opacity:.85}.ui-colorpicker-panel .ui-colorpicker-hue-handle{position:absolute;top:150px;left:0;width:21px;margin-left:-2px;margin-top:-5px;height:10px;border:2px solid #fff;opacity:.85;cursor:pointer}.ui-colorpicker-panel.ui-state-disabled .ui-colorpicker-color-handle,.ui-colorpicker-panel.ui-state-disabled .ui-colorpicker-hue-handle{opacity:.5}.ui-datagrid .ui-paginator{text-align:center;border-top:0 none}.ui-datagrid-column{padding:.25em}.ui-datagrid-content-empty{padding:.25em .625em}.ui-datagrid .ui-datagrid-footer,.ui-datagrid .ui-datagrid-header{text-align:center;padding:.5em .75em}.ui-datagrid .ui-datagrid-header{border-bottom:0 none}.ui-datagrid .ui-datagrid-footer{border-top:0 none}.ui-datagrid .ui-paginator-top{border-bottom:0 none}.ui-datagrid .ui-paginator-bottom{border-top:0 none}.ui-datalist .ui-datalist-footer,.ui-datalist .ui-datalist-header{text-align:center;padding:.5em .75em}.ui-datalist .ui-datalist-header{border-bottom:0 none}.ui-datalist .ui-datalist-footer,.ui-datalist .ui-paginator{border-top:0 none}.ui-datalist .ui-datalist-data{margin:0;padding:0}.ui-datalist .ui-datalist-data>li{list-style-type:none}.ui-datalist .ui-datalist-emptymessage{padding:.5em .75em}.ui-datalist.ui-datalist-scrollable .ui-datalist-content{overflow:auto}.ui-datascroller .ui-datascroller-header{text-align:center;padding:.5em .75em;border-bottom:0 none}.ui-datascroller .ui-datascroller-footer{text-align:center;padding:.25em .625em;border-top:0 none}.ui-datascroller .ui-datascroller-content{padding:.25em .625em}.ui-datascroller-inline .ui-datascroller-content{overflow:auto}.ui-datascroller .ui-datascroller-list{list-style-type:none;margin:0;padding:0}.ui-datatable{position:relative}.ui-datatable table{border-collapse:collapse;width:100%;table-layout:fixed}.ui-datatable .ui-datatable-caption,.ui-datatable .ui-datatable-footer,.ui-datatable .ui-datatable-header{text-align:center;padding:.5em .75em;box-sizing:border-box}.ui-datatable .ui-datatable-caption,.ui-datatable .ui-datatable-header{border-bottom:0 none}.ui-datatable .ui-datatable-footer{border-top:0 none}.ui-datatable tfoot td,.ui-datatable thead th{text-align:center}.ui-datatable thead tr{border-width:0}.ui-datatable .ui-datatable-data>tr>td,.ui-datatable .ui-datatable-tfoot>tr>td,.ui-datatable .ui-datatable-thead>tr>th{border-color:inherit;box-sizing:border-box;padding:.25em .5em;border-width:1px;border-style:solid}.ui-datatable.ui-datatable-resizable .ui-datatable-data>tr>td,.ui-datatable.ui-datatable-resizable .ui-datatable-tfoot>tr>td,.ui-datatable.ui-datatable-resizable .ui-datatable-thead>tr>th{overflow:hidden}.ui-datatable .ui-datatable-tfoot>tr>td,.ui-datatable .ui-datatable-thead>tr>th{font-weight:400}.ui-datatable tbody{outline:0}.ui-datatable .ui-sortable-column{cursor:pointer}.ui-datatable .ui-sortable-column-icon{display:inline-block;margin-left:.125em}.ui-datatable tr.ui-state-highlight{cursor:pointer}.ui-datatable-scrollable-body{overflow:auto;overflow-anchor:none}.ui-datatable-scrollable-header{overflow:hidden}.ui-datatable-scrollable .ui-datatable-scrollable-footer,.ui-datatable-scrollable .ui-datatable-scrollable-header{position:relative;border:0 none}.ui-datatable-scrollable .ui-datatable-scrollable-header td{font-weight:400}.ui-datatable .ui-datatable-scrollable-body{min-height:0}.ui-datatable .ui-datatable-data tr.ui-state-highlight,.ui-datatable .ui-datatable-data tr.ui-state-hover{border-color:inherit;font-weight:inherit;cursor:pointer}.ui-datatable .ui-datatable-data tr.ui-rowgroup-header td a,.ui-datatable .ui-datatable-data tr.ui-rowgroup-header td span.ui-rowgroup-header-name{display:inline-block;vertical-align:middle}.ui-datatable-scrollable-theadclone,.ui-datatable-scrollable-theadclone tr{height:0}.ui-datatable-scrollable-theadclone th.ui-state-default{height:0;border-bottom-width:0;border-top-width:0;padding-top:0;padding-bottom:0;outline:0 none}.ui-datatable-scrollable-theadclone th span.ui-column-title{display:block;height:0}.ui-datatable .ui-paginator{padding:.125em}.ui-datatable .ui-paginator-top{border-bottom-width:0}.ui-datatable .ui-paginator-bottom{border-top-width:0}.ui-datatable-rtl{direction:rtl}.ui-datatable-rtl.ui-datatable tfoot td,.ui-datatable-rtl.ui-datatable thead th{text-align:right}.ui-row-toggler{cursor:pointer}.ui-datatable .ui-column-resizer{display:block;position:absolute!important;top:0;right:0;margin:0;width:.5em;height:100%;padding:0;cursor:col-resize;border:1px solid transparent}.ui-datatable .ui-column-resizer-helper{width:1px;position:absolute;z-index:10;display:none}.ui-datatable-resizable{padding-bottom:1px;overflow:auto}.ui-datatable-resizable tbody td,.ui-datatable-resizable tfoot td,.ui-datatable-resizable thead th{white-space:nowrap}.ui-datatable-resizable th.ui-resizable-column{background-clip:padding-box;position:relative}.ui-datatable-reflow .ui-datatable-data td .ui-column-title{display:none}.ui-datatable .ui-column-filter{display:block;width:100%;box-sizing:border-box;margin-top:.25em}.ui-datatable .ui-editable-column input{width:100%;outline:0}.ui-datatable .ui-datatable-data>tr>td.ui-editable-column{padding:.5em}.ui-datatable .ui-editable-column>.ui-cell-editor{display:none}.ui-datatable .ui-datatable-data>tr>td.ui-editable-column.ui-cell-editing{padding:1px}.ui-datatable .ui-editable-column.ui-cell-editing>.ui-cell-editor{display:block}.ui-datatable .ui-editable-column.ui-cell-editing>.ui-cell-data{display:none}.ui-datatable-stacked tfoot td,.ui-datatable-stacked thead th{display:none!important}.ui-datatable.ui-datatable-stacked .ui-datatable-data>tr>td{text-align:left;display:block;border:0 none;width:100%;box-sizing:border-box;float:left;clear:left}.ui-datatable.ui-datatable-stacked .ui-datatable-data.ui-widget-content{border:0 none}.ui-datatable-stacked .ui-datatable-data tr.ui-widget-content{border-left:0 none;border-right:0 none}.ui-datatable-stacked .ui-datatable-data td .ui-column-title{padding:.4em;min-width:30%;display:inline-block;margin:-.4em 1em -.4em -.4em;font-weight:700}.ui-datatable .ui-selection-column .ui-chkbox,.ui-datatable .ui-selection-column .ui-radiobutton{margin:0;display:block}.ui-datatable .ui-selection-column .ui-chkbox-box,.ui-datatable .ui-selection-column .ui-radiobutton-box{display:block;box-sizing:border-box;margin:0}.ui-datatable-scrollable-wrapper{position:relative}.ui-datatable-frozen-view .ui-datatable-scrollable-body{overflow:hidden}.ui-datatable-unfrozen-view{position:absolute;top:0}.ui-datatable .ui-datatable-load-status{width:100%;height:100%;top:0;left:0}.ui-datatable .ui-datatable-virtual-table{position:absolute;top:0;left:0}.ui-datatable .ui-datatable-loading{position:absolute;width:100%;height:100%;-ms-filter:"alpha(opacity=10)";opacity:.1;z-index:1}.ui-datatable .ui-datatable-loading-content{position:absolute;left:50%;top:25%;z-index:2}@media(max-width:35em){.ui-datatable-reflow tfoot td,.ui-datatable-reflow thead th{display:none!important}.ui-datatable-reflow .ui-datatable-data>tr>td{text-align:left;display:block;border:0 none;width:100%!important;box-sizing:border-box;float:left;clear:left}.ui-datatable-reflow .ui-datatable-data.ui-widget-content{border:0 none}.ui-datatable-reflow .ui-datatable-data tr.ui-widget-content{border-left:0 none;border-right:0 none}.ui-datatable-reflow .ui-datatable-data td .ui-column-title{padding:.4em;min-width:30%;display:inline-block;margin:-.4em 1em -.4em -.4em;font-weight:700}.ui-datatable-reflow.ui-datatable-scrollable .ui-datatable-scrollable-body colgroup{display:block}}.ui-dialog{position:fixed;padding:0}.ui-dialog .ui-dialog-content,.ui-dialog .ui-dialog-titlebar{padding:.5em .75em;position:relative;border:0}.ui-dialog .ui-dialog-content{background:0;overflow:auto;zoom:1}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer;float:right}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-dialog .ui-dialog-titlebar-icon{text-decoration:none}.ui-dialog .ui-dialog-titlebar-close{float:right;padding:.125em;cursor:pointer;border:1px solid transparent}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:0}.ui-dialog-footer{padding:1em;border-width:1px 0 0 0;text-align:right}.ui-dialog-mask{position:fixed;width:100%;height:100%}.ui-confirmdialog{width:30em}.ui-confirmdialog.ui-dialog .ui-dialog-content{padding:1em 2em}.ui-confirmdialog .ui-dialog-content .fa{font-size:1.5em;vertical-align:middle;margin-right:.5em}.ui-confirmdialog .ui-dialog-content .ui-confirmdialog-message{vertical-align:middle}.ui-fluid .ui-dialog-footer .ui-button{width:auto}.ui-rtl .ui-dialog .ui-dialog-titlebar-close{float:left}.ui-rtl .ui-dialog .ui-dialog-buttonpane button{text-align:right}@media screen and (max-width:40em){.ui-confirmdialog{width:90%}}.ui-dropdown{display:inline-block;position:relative;cursor:pointer;vertical-align:middle}.ui-dropdown .ui-dropdown-trigger{border-right:0;border-top:0;border-bottom:0;cursor:pointer;width:1.5em;height:100%;position:absolute;right:0;top:0;padding:0 .25em}.ui-dropdown .ui-dropdown-trigger .fa{margin-top:.3em;margin-left:-.125em}.ui-dropdown .ui-dropdown-label{display:block;border:0;white-space:nowrap;overflow:hidden;font-weight:400;width:100%;padding-right:1.5em}.ui-dropdown-item-empty,.ui-dropdown-label-empty{text-indent:-9999px}.ui-dropdown.ui-state-disabled .ui-dropdown-label,.ui-dropdown.ui-state-disabled .ui-dropdown-trigger{cursor:default}.ui-dropdown label.ui-dropdown-label{cursor:pointer}.ui-dropdown input.ui-dropdown-label{cursor:default}.ui-dropdown .ui-dropdown-panel{min-width:100%}.ui-dropdown-panel{position:absolute;height:auto;display:none}.ui-dropdown-panel .ui-dropdown-items-wrapper{overflow:auto}.ui-dropdown-panel .ui-dropdown-item{font-weight:400;border:0 none;cursor:pointer;margin:1px 0;padding:.125em .25em;text-align:left}.ui-dropdown-panel .ui-dropdown-item-group{font-weight:700}.ui-dropdown-panel .ui-dropdown-list{padding:.4em;border:0 none}.ui-dropdown-panel .ui-dropdown-filter{width:100%;box-sizing:border-box;padding-right:1.5em}.ui-dropdown-panel .ui-dropdown-filter-container{position:relative;margin:0;padding:.4em;display:inline-block;width:100%}.ui-dropdown-panel .ui-dropdown-filter-container .fa{position:absolute;top:.8em;right:1em}.ui-fluid .ui-dropdown{width:100%}.ui-fieldset,.ui-fieldset .ui-fieldset-legend{padding:.6em 1em}.ui-fieldset-toggleable .ui-fieldset-legend{padding:.5em 1em .5em .5em;cursor:pointer;white-space:nowrap}.ui-fieldset .ui-fieldset-toggler{margin-right:.1em;display:inline-block;vertical-align:middle}.ui-fieldset .ui-fieldset-content-wrapper-overflown{overflow:hidden}.ui-fileupload-buttonbar .ui-fileupload-choose.ui-state-disabled input{cursor:default}.ui-fileupload-buttonbar{padding:.5em;border-bottom:0 none}.ui-fileupload-buttonbar .ui-button{vertical-align:middle;margin-right:.25em}.ui-fileupload-content{padding:1em;position:relative;transition:border-color .3s}.ui-fileupload-content.ui-fileupload-highlight{border-color:#156090}.ui-fileupload-files img{border:0}.ui-fileupload-files{display:table}.ui-fileupload-row{display:table-row}.ui-fileupload-row>div{display:table-cell;padding:.5em 1em;vertical-align:middle}.ui-fileupload-content .ui-progressbar{width:100%;position:absolute;top:1px;left:0;height:.25em;border:0 none}.ui-fileupload-content .ui-progressbar-value{border-radius:0;border:0 none}.ui-fileupload-choose{position:relative;overflow:hidden}.ui-fileupload-choose input[type=file]{position:absolute;top:0;right:0;margin:0;opacity:0;min-height:100%;font-size:100px;text-align:right;filter:alpha(opacity=0);direction:ltr;cursor:pointer}.ui-fileupload-choose.ui-fileupload-choose-selected input[type=file]{display:none}.ui-fluid .ui-fileupload .ui-button{width:auto}.ui-fluid .ui-fileupload-content .ui-button-icon-only{width:2em}.ui-galleria{overflow:hidden;visibility:hidden;position:relative}.ui-galleria-panel-wrapper{position:relative;padding:0;margin:0}.ui-galleria-panel{-webkit-filter:inherit;filter:inherit;position:absolute;top:0;left:0;list-style-type:none}.ui-galleria-filmstrip-wrapper{overflow:hidden;margin:.25em auto;position:relative}.ui-galleria-filmstrip{list-style:none outside none;margin:0;padding:0;width:2340px;z-index:900;position:absolute;top:0;left:0}.ui-galleria-frame{float:left;margin-right:5px;opacity:.3;cursor:pointer}.ui-galleria-frame-active{opacity:1}.ui-galleria-frame-content{overflow:hidden}.ui-galleria-nav-next,.ui-galleria-nav-prev{cursor:pointer;position:absolute}.ui-galleria-nav-prev{left:5px}.ui-galleria-nav-next{right:5px}.ui-galleria-caption{position:absolute;left:1px;background-color:rgba(0,0,0,.5);display:none;color:#ededed;padding:.2em 1em}.ui-galleria-caption h4{color:#ededed}.ui-galleria-panel-content{padding:1em 1.4em}.ui-grid{clear:both;padding:0;margin:0}.ui-grid:after,.ui-grid:before{content:"";display:table}.ui-grid:after{clear:both}.ui-grid .ui-grid-row{display:-webkit-box;display:-ms-flexbox;display:flex;clear:both}.ui-grid-row:after{clear:both;content:"";display:table}.ui-grid-col-1,.ui-grid-col-2,.ui-grid-col-3,.ui-grid-col-4,.ui-grid-col-5,.ui-grid-col-6,.ui-grid-col-7,.ui-grid-col-8,.ui-grid-col-9,.ui-grid-col-10,.ui-grid-col-11,.ui-grid-col-12{float:left;box-sizing:border-box}.ui-grid-col-1{width:8.33333%}.ui-grid-col-2{width:16.66666%}.ui-grid-col-3{width:25%}.ui-grid-col-4{width:33.33333%}.ui-grid-col-5{width:41.66666%}.ui-grid-col-6{width:50%}.ui-grid-col-7{width:58.33333%}.ui-grid-col-8{width:66.66666%}.ui-grid-col-9{width:75%}.ui-grid-col-10{width:83.33333%}.ui-grid-col-11{width:91.66666%}.ui-grid-col-12{width:100%}@media(min-width:480px){.ui-grid-fixed{width:480px}}@media(min-width:768px){.ui-grid-fixed{width:768px}}@media(min-width:960px){.ui-grid-fixed{width:960px}}@media(min-width:1024px){.ui-grid-fixed{width:1024px}}.ui-grid.ui-grid-pad>.ui-grid-row>div{padding:.25em .5em}@media(max-width:640px){.ui-grid-responsive .ui-grid-row{display:block}.ui-grid-responsive .ui-grid-col-1,.ui-grid-responsive .ui-grid-col-2,.ui-grid-responsive .ui-grid-col-3,.ui-grid-responsive .ui-grid-col-4,.ui-grid-responsive .ui-grid-col-5,.ui-grid-responsive .ui-grid-col-6,.ui-grid-responsive .ui-grid-col-7,.ui-grid-responsive .ui-grid-col-8,.ui-grid-responsive .ui-grid-col-9,.ui-grid-responsive .ui-grid-col-10,.ui-grid-responsive .ui-grid-col-11,.ui-grid-responsive .ui-grid-col-12{width:100%;float:none}}.ui-g{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.ui-g:after{clear:both;content:"";display:table}.ui-g-1,.ui-g-2,.ui-g-3,.ui-g-4,.ui-g-5,.ui-g-6,.ui-g-7,.ui-g-8,.ui-g-9,.ui-g-10,.ui-g-11,.ui-g-12{float:left;box-sizing:border-box;padding:.5em}.ui-g-1{width:8.3333%}.ui-g-2{width:16.6667%}.ui-g-3{width:25%}.ui-g-4{width:33.3333%}.ui-g-5{width:41.6667%}.ui-g-6{width:50%}.ui-g-7{width:58.3333%}.ui-g-8{width:66.6667%}.ui-g-9{width:75%}.ui-g-10{width:83.3333%}.ui-g-11{width:91.6667%}.ui-g-12{width:100%}.ui-g-offset-12{margin-left:100%}.ui-g-offset-11{margin-left:91.66666667%}.ui-g-offset-10{margin-left:83.33333333%}.ui-g-offset-9{margin-left:75%}.ui-g-offset-8{margin-left:66.66666667%}.ui-g-offset-7{margin-left:58.33333333%}.ui-g-offset-6{margin-left:50%}.ui-g-offset-5{margin-left:41.66666667%}.ui-g-offset-4{margin-left:33.33333333%}.ui-g-offset-3{margin-left:25%}.ui-g-offset-2{margin-left:16.66666667%}.ui-g-offset-1{margin-left:8.33333333%}.ui-g-offset-0{margin-left:0}@media screen and (max-width:40em){.ui-sm-1,.ui-sm-2,.ui-sm-3,.ui-sm-4,.ui-sm-5,.ui-sm-6,.ui-sm-7,.ui-sm-8,.ui-sm-9,.ui-sm-10,.ui-sm-11,.ui-sm-12{padding:.5em}.ui-sm-1{width:8.3333%}.ui-sm-2{width:16.6667%}.ui-sm-3{width:25%}.ui-sm-4{width:33.3333%}.ui-sm-5{width:41.6667%}.ui-sm-6{width:50%}.ui-sm-7{width:58.3333%}.ui-sm-8{width:66.6667%}.ui-sm-9{width:75%}.ui-sm-10{width:83.3333%}.ui-sm-11{width:91.6667%}.ui-sm-12{width:100%}.ui-sm-offset-12{margin-left:100%}.ui-sm-offset-11{margin-left:91.66666667%}.ui-sm-offset-10{margin-left:83.33333333%}.ui-sm-offset-9{margin-left:75%}.ui-sm-offset-8{margin-left:66.66666667%}.ui-sm-offset-7{margin-left:58.33333333%}.ui-sm-offset-6{margin-left:50%}.ui-sm-offset-5{margin-left:41.66666667%}.ui-sm-offset-4{margin-left:33.33333333%}.ui-sm-offset-3{margin-left:25%}.ui-sm-offset-2{margin-left:16.66666667%}.ui-sm-offset-1{margin-left:8.33333333%}.ui-sm-offset-0{margin-left:0}}@media screen and (min-width:40.063em){.ui-md-1,.ui-md-2,.ui-md-3,.ui-md-4,.ui-md-5,.ui-md-6,.ui-md-7,.ui-md-8,.ui-md-9,.ui-md-10,.ui-md-11,.ui-md-12{padding:.5em}.ui-md-1{width:8.3333%}.ui-md-2{width:16.6667%}.ui-md-3{width:25%}.ui-md-4{width:33.3333%}.ui-md-5{width:41.6667%}.ui-md-6{width:50%}.ui-md-7{width:58.3333%}.ui-md-8{width:66.6667%}.ui-md-9{width:75%}.ui-md-10{width:83.3333%}.ui-md-11{width:91.6667%}.ui-md-12{width:100%}.ui-md-offset-12{margin-left:100%}.ui-md-offset-11{margin-left:91.66666667%}.ui-md-offset-10{margin-left:83.33333333%}.ui-md-offset-9{margin-left:75%}.ui-md-offset-8{margin-left:66.66666667%}.ui-md-offset-7{margin-left:58.33333333%}.ui-md-offset-6{margin-left:50%}.ui-md-offset-5{margin-left:41.66666667%}.ui-md-offset-4{margin-left:33.33333333%}.ui-md-offset-3{margin-left:25%}.ui-md-offset-2{margin-left:16.66666667%}.ui-md-offset-1{margin-left:8.33333333%}.ui-md-offset-0{margin-left:0}}@media screen and (min-width:64.063em){.ui-lg-1,.ui-lg-2,.ui-lg-3,.ui-lg-4,.ui-lg-5,.ui-lg-6,.ui-lg-7,.ui-lg-8,.ui-lg-9,.ui-lg-10,.ui-lg-11,.ui-lg-12{padding:.5em}.ui-lg-1{width:8.3333%}.ui-lg-2{width:16.6667%}.ui-lg-3{width:25%}.ui-lg-4{width:33.3333%}.ui-lg-5{width:41.6667%}.ui-lg-6{width:50%}.ui-lg-7{width:58.3333%}.ui-lg-8{width:66.6667%}.ui-lg-9{width:75%}.ui-lg-10{width:83.3333%}.ui-lg-11{width:91.6667%}.ui-lg-12{width:100%}.ui-lg-offset-12{margin-left:100%}.ui-lg-offset-11{margin-left:91.66666667%}.ui-lg-offset-10{margin-left:83.33333333%}.ui-lg-offset-9{margin-left:75%}.ui-lg-offset-8{margin-left:66.66666667%}.ui-lg-offset-7{margin-left:58.33333333%}.ui-lg-offset-6{margin-left:50%}.ui-lg-offset-5{margin-left:41.66666667%}.ui-lg-offset-4{margin-left:33.33333333%}.ui-lg-offset-3{margin-left:25%}.ui-lg-offset-2{margin-left:16.66666667%}.ui-lg-offset-1{margin-left:8.33333333%}.ui-lg-offset-0{margin-left:0}}@media screen and (min-width:90.063em){.ui-xl-1,.ui-xl-2,.ui-xl-3,.ui-xl-4,.ui-xl-5,.ui-xl-6,.ui-xl-7,.ui-xl-8,.ui-xl-9,.ui-xl-10,.ui-xl-11,.ui-xl-12{padding:.5em}.ui-xl-1{width:8.3333%}.ui-xl-2{width:16.6667%}.ui-xl-3{width:25%}.ui-xl-4{width:33.3333%}.ui-xl-5{width:41.6667%}.ui-xl-6{width:50%}.ui-xl-7{width:58.3333%}.ui-xl-8{width:66.6667%}.ui-xl-9{width:75%}.ui-xl-10{width:83.3333%}.ui-xl-11{width:91.6667%}.ui-xl-12{width:100%}.ui-xl-offset-12{margin-left:100%}.ui-xl-offset-11{margin-left:91.66666667%}.ui-xl-offset-10{margin-left:83.33333333%}.ui-xl-offset-9{margin-left:75%}.ui-xl-offset-8{margin-left:66.66666667%}.ui-xl-offset-7{margin-left:58.33333333%}.ui-xl-offset-6{margin-left:50%}.ui-xl-offset-5{margin-left:41.66666667%}.ui-xl-offset-4{margin-left:33.33333333%}.ui-xl-offset-3{margin-left:25%}.ui-xl-offset-2{margin-left:16.66666667%}.ui-xl-offset-1{margin-left:8.33333333%}.ui-xl-offset-0{margin-left:0}}.ui-g-nopad{padding:0}.ui-growl{position:fixed;top:20px;right:20px;width:20em}.ui-growl-item-container{position:relative;margin:0 0 10px 0;opacity:.95;filter:alpha(opacity=95)}.ui-growl-item{position:relative;display:block;padding:.5em 1em}.ui-growl-item p{padding:0;margin:0}.ui-growl-icon-close{position:absolute;top:4px;right:4px;cursor:pointer}.ui-growl-title{font-weight:700;padding:0 0 .5em 0;display:block}.ui-growl-image{position:absolute;display:inline-block;left:.5em;top:.25em;padding:0}.ui-growl-message{padding:0 0 .25em 0;margin-left:2.5em}.ui-growl-message p{font-weight:400}.ui-inplace .ui-inplace-display{display:inline;cursor:pointer;border:0 none;padding:.25em;font-weight:400}.ui-inplace .ui-inplace-content{display:inline}.ui-inputswitch{padding:0;position:relative;cursor:pointer;height:1.5em}.ui-inputswitch,.ui-inputswitch .ui-inputswitch-off,.ui-inputswitch .ui-inputswitch-on{display:inline-block;overflow:hidden;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none}.ui-inputswitch .ui-inputswitch-off,.ui-inputswitch .ui-inputswitch-on{white-space:nowrap;position:absolute;top:0;width:auto;font-weight:700;height:100%;line-height:1.5em}.ui-inputswitch .ui-inputswitch-on{left:0;border:0 none}.ui-inputswitch .ui-inputswitch-off{right:0;text-align:right}.ui-inputswitch .ui-inputswitch-off span,.ui-inputswitch .ui-inputswitch-on span{display:inline-block;text-align:center;height:100%;line-height:inherit}.ui-inputswitch .ui-inputswitch-handle{display:block;width:0;position:absolute;top:0;left:0;height:100%;border-top:0 none;border-bottom:0 none}.ui-inputtext{margin:0;outline:medium none;padding:.25em}.ui-inputtext,.ui-widget-content .ui-inputtext,.ui-widget-header .ui-inputtext{font-weight:400}.ui-fluid .ui-inputtext{width:100%;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.ui-inputgroup{display:-webkit-box;display:-ms-flexbox;display:flex}.ui-inputgroup .ui-inputgroup-addon{display:inline-block;text-align:center;min-width:1.5em;padding:.25em;border-width:1px;border-style:solid}.ui-inputgroup .ui-inputgroup-addon+.ui-inputgroup-addon{border-left:0 none}.ui-inputgroup .ui-inputtext{padding-left:.5em}.ui-inputgroup .ui-inputtext:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0;border-left:0 none}.ui-inputgroup .ui-inputtext:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0;border-right:0 none}.ui-inputgroup .ui-button{margin-right:0;border-radius:0}.ui-fluid .ui-inputgroup .ui-button{width:auto}.ui-fluid .ui-inputgroup .ui-inputtext{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.ui-inputgroup .ui-chkbox,.ui-inputgroup .ui-radiobutton{margin-right:0;vertical-align:bottom}.ui-float-label{display:block;position:relative}.ui-float-label label{font-weight:400;position:absolute;pointer-events:none;left:.25em;top:50%;margin-top:-.5em;transition:all .3s ease;-moz-transition:.3s ease all;-webkit-transition:all .3s ease;color:#898989;line-height:1}.ui-float-label .ui-inputwrapper-filled~label,.ui-float-label .ui-inputwrapper-focus~label,.ui-float-label input.ui-state-filled~label,.ui-float-label input:focus~label{top:-.75em;font-size:12px}.ui-float-label .input:-webkit-autofill~label{top:-20px;font-size:12px}.ui-inputtextarea-resizable{overflow:hidden;resize:none}.ui-fluid .ui-inputtextarea{width:100%}.ui-float-label textarea.ui-state-filled~label,.ui-float-label textarea:-webkit-autofill~label,.ui-float-label textarea:focus~label{top:-.75em;font-size:12px}.ui-lightbox{position:fixed;display:none}.ui-lightbox-content-wrapper{position:relative}.ui-lightbox-content{position:relative;margin:0;padding:0;background-color:#000}.ui-lightbox-nav-left,.ui-lightbox-nav-right{position:absolute;top:50%;cursor:pointer}.ui-lightbox-nav-left{left:0}.ui-lightbox-nav-right{right:0}.ui-lightbox-loading .ui-lightbox-content{background:url(data:image/gif;base64,R0lGODlhIAAgAPYAAAAAAOLi4gMDAyMjIyAgIAEBATw8PHBwcGdnZzc3NwcHBxMTE2hoaHFxcVNTUxUVFX5+fpmZmW5ubhcXFwoKCnNzc1FRUUdHR7Gxsa6urqmpqYODgx4eHggICHV1dU5OTgUFBTAwMKysrIGBgREREVVVVXd3dzg4OCcnJ7Ozs7CwsEhISDExMSwsLA4ODiUlJbe3t0FBQTo6OkxMTAwMDICAgGBgYCEhIRgYGGpqatHR0dPT08HBwdXV1bm5uVhYWBoaGhwcHBAQEEVFRVdXV1xcXIqKimNjY15eXqOjo56enpqamqWlpaCgoGFhYSoqKqGhoaenpygoKDU1NZycnFpaWsrKyr6+vrW1tc7OztDQ0D4+PpGRkZeXl1BQUHx8fJOTk46OjomJiZCQkJWVlcPDw8XFxcfHx7y8vC4uLjMzM4WFhUBAQIeHh7q6ukpKSszMzIyMjMnJyXp6enl5eUNDQ8DAwGxsbKqqqmVlZdfX1wAAAAAAAAAAAAAAAAAAACH+GkNyZWF0ZWQgd2l0aCBhamF4bG9hZC5pbmZvACH5BAAFAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QkZKECzk2NJOCDxchgwU1OjsSmQoQGCIWghQiOz01npALERkYGQ4AFBqtP4ILN0ACjgISGhkpGDIANjw+KABCKNEujxMbGiowowAEHIIT0SgUkBwjGiIzhkIvKDiSJCsxwYYdmI8KFB0FjfqLAgYMEiSUEJeoAJABBAgiGnCgQQUPJlgoIgGuWyICCBhoRNBCEbRoFhEVSODAwocTIBQVwEEgiMJEChSkzNTPRQdEFF46KsABxYtphUisAxLpW7QJgkDMxAFO5yIC0V5gEjrg5kcUQB098ElCEFQURAH4CiLvEQUFg25ECwKLpiCmKBC6ui0kYILcuXjz6t3Ld1IgACH5BAAFAAEALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2Ohw8Tj44XKlhbk4sKEVZZXAWZgwsxLYMdTJ1RCqEAIA1JSjOCFKhaUSCCoI8kRkpMULIKVFZaXaALN0C6jAVHS01RTFMAVVc8XgBCKNsujwsmS1AaCIJSpQAT2ygUk0AeS0oXhkIvKDihQjEyy4QdNJMgOqxqxC9RCyJFkKwYiKgAkAEE2CWi4CChDSdSFJFQx0ERiCEWQlq4oUjbto6KgCQwIOOJAEUFcBAIInGRgIKsGrrogIhCzUcFgqB40a0QiXpAMj1QJ6kVLgA41P1kxGHbi39HB/A0iaKoo6MvSAgisC0pAGRBXk4SOOjGtiCDFXCGSodCSM6GC7ze3cu3r9+/gAcFAgAh+QQABQACACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjoYkTj8Uj40SPGUMlYsdSzxmSiCbg0IyKIM0TTxnTAqjACAIYGNDgh1Uq1CiAB2VLl9hZGAXsGSrXAUKEjNABY4FRGJjXV0sAD8+aB8ANmItKC6PJAxiXBFIAAIhIYJVUygolI8TCNIxhkAvKDijLidTzgx1oLEJxC5GAReRkLFixZSDhwoAGUBAXiIWQy6smMFBEQl4KDoqenKi5Al+iYSAFJmIwgAUL5opKoCDQBCLM189c9HrEAWcz4LADFeIhD4gmxaAnCDIoCAcIIEuEgqToNEBvVTCI+rIxYAXJAQRgIcUwIIbQQQUPHiD7KCEOhMBTIAnJG7EBVzt6t3Lt6/fvYEAACH5BAAFAAMALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2OhiRVDhSPjQhYPkeViwpjWG5dIJuDBTdBgxRkWGhKCqOCK18QW4IdXKsRogAPHY8FNl8bG2wAIEarRgUKDW4ROI8XHl9rbS0ADhkYbwBIWj1wU48uPx4QYg4ABS1pgm09ZUc0lQtE5SeGR1hEz5sUIWkFDAkAIq9SAQGOAjIC8YLFFBQIExUAMoAAJUU41oVQs0ARCRQgOSyaABKkC0VCSopUJADHjRsTFhXAQSDIRZmvErrodYjCTV9BULw4WYjECxRANn0EGbNYRBwlfzIiKVSe0Ru9UpqsRGHAABKCCIBMCmCBqYiPBKC9MZZUTkJUEIW8PVRgAdG5ePPq3ctXbyAAIfkEAAUABAAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6GQhZDHY+NSFEiRZWLCmtRGXEgm4QgCoMdYhoZYKajAA9ETmqCnRoqY6IACy6VCQgHDQkAIBAaGCMAChIpShyPTzYMDR4oADNQUUMAVXJZOj+PHRdOOR4rAAVST4Ij3joXlS7jOSyGNnA7YRSbHSgvhyAMvBHiqlEBgxNu3MCxqACQAQT2KXKBoiIKGopIWHQ20eJFRUI2NsShcMJIAkEkNixo0AWlQxRUPioQxB+vQiReoACySWNFk8MECMJhUSajCRVfYMx5g1LIijcdKSAwgIQgAhV56roBRGilAgcF3cg6KCxLAEhREDxbqACJqGwI48qdS7fuqEAAIfkEAAUABQAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6GLitsCo+NJRFUM5WLICYRTSMCm4kdc59iIIIgLw+VT2woggp0EVBrogtfblFSjhNeP0hpAAINEUl0AApfZWdyTr4rFkVOBAB1YBFsAD92zlZ1jiBTbw42WwAFL7ECRmZycEYUjxRqbyW9hUfwRiSbIEGCHKLwxoKQUY1AUCjQiAQBAhMWFWjRgkCHRRRQaERBQxGJjRwwbuSoSAhIRg9u3IioqAAOAkAuMmKIsFEBFzINUZi3qUAQFC9cGCKxDsimjxpZghAFAMdGno4eaHzRkeiNiyY1Cn0EgsAAfwAIaDQKYMENIEwr0QRwY+ygtTUUAUzQeDCuoQIkttrdy7ev3799AwEAIfkEAAUABgAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6GBQMDj45sI20ylIsgDG1jBwWaiQp3nl8ggiAyQxSPJCgPqZ1cdAIAJB4pbkeOCmoxF5MCR21cEgAKFTBodmO2jB0hqzM4ADIjRpkOKcw8P48cLAYrIQAFN5MFI252ZRutjiAELFschkVXZWskmgUkC4coXPjgQlQjEDj4MSJBgMCERRPA2MlgYJGCFygy0lCE5MwVH21QjcKoUREBNglY3GC04MaNh4oK4CAARIHBm4gKuOiAiAI8SgWCoHhRsBAJjEA0vcoIE8QzHBlR/Gz0IOOLjUdv8BQStWg8AjcUEsiYFEBLIM+ADrpBdlAonIIRJmQUAhcSCa918+rdy7evqEAAIfkEAAUABwAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6HIAKPjkFFP0CTjB8VXx+ZigI/FRAMkgACCWwdjwVCNIICRKMHkkJ3URlIj0FPITgABQ4VNUcFIDl4KiliposCLygtUyQAIXd0LQAzuClYDo9AKFIhN4ITmAV0GSkwX6uOIBziC4ZEKT4QQpmtr4YddStcfGoEYoI+RkIIEJiwaEIYNxpkLAIBDQWKfojy6NiYRIEiihYvKjrSo2QTEIsW3LjBUNEDD1SohBgIqlmjAi7eGaJA4VOBICheCCxEAhqmSSRCtowkCEfIno8eWHzxquiNVUJCDoVH4AY1AAQsHlUJpIDPQTfEDjJLc9AEiwcP2xYqQGKr3Lt48+rdizcQACH5BAAFAAgALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2Oj5CHCmkhCpGLU0gMMpeJBUOaPwWCAiwyHZAdlgACF0g5NgIALkcRTSWPEy8DQgAFdUh3uCBOVFBMELKMBTcoKC8UAC8/CC8AQ11NTBozj0DOKA+CJOIFEtp4FaiOIBzPLoZeTHge8JAFLtGGHVt1NJ2MQEzoxUgIAQITFj1og4EJm0UCBoD7l8iGHCtWlIBQFHGiIhtZQmpcZPBGQkUPxIhY8hDgoQIUlDnCt84QBX33grwzROIFCiCRSIA7CUIZDnA4Gz1w9uJfzxuohICzx47ADRKCCDgDCmDBDRyjIoUF0OznoLEuJzgj6LJQARJUCtvKnUu3rt25gQAAIfkEAAUACQAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6PkIgkC5GMHEMzN5WKLBcOQ4MCL2oKkCAgggWdJR8FADREbWMfjyQvA0KCaRdEFwACJUZcXQ2ujRwoKC8UAEB1FhwABrJdS76OOMkoD4I0JIJOY11UOaWOIMgvNIYXZOTrkAUuzIYKJ1vwm4oCD0FCxomEECAwYRGQGhpUJPmSz5CAAdoaGrpjpyKPKzISFYCYTGIhBGZCmrFjQJELAjcKKnqwIQoTJk4E6DNUoIPNR/I6IGIxRGe8IMpcGCKR4EsbobW0qQQhE0A2KQ5QQHqQTB0AWzd0CtGW6xEIlN8AEEgGRNCCGzgA4hx0g+wgtfoTJiTrOrNQARJI6+rdy7evX76BAAAh+QQABQAKACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QiCACkYxCTywklYoEaTIsgwUcQJEgBYM3aQYygh1vHiYtj0IvN0KCnVtTAAUrJhBrDo8cKCgvFABCLQYTAGoVwGJbjzjFKA+CCjSCDl9rRkgKjyDEL9uFWxtxNuePBS7IhiAsJ/GbigILQED2iEIEBJop4jCHShImYlAkEjDAWrtDOVKkwEIRwilEBBwquuOmY0cIilwQuCEwEQ4ISpRQmUPgnqECHWJeZPSuwyEQQ4bYhFQgiDEXhhxo0TIG6CMS1gROEpQGih4dMSA9KGYOAIlaNoUYwKOHCCQQIzUByIiCFIAFMiqUdIeqmFleLhQHTSh2K26hAiSM2t3Lt6/fv5sCAQAh+QQABQALACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QiAWRjRQ3BAqUihwoKByEIJOQBaIABJ0vggoJRBeZjjQ3N0KCp1IDAAUyRzkHKI9BqBQAQgMoLgBSNgwNDZ+OOJ0oC4Igr3XMJl6ljCCcL8OFagd0Dh2RBS7hhSBPIeeaiwIkODjriC4EBBOLQAdjZLpAwJXoVCcaio4wicJQgwdFBlEgTJQng0WLDxNRIHCDn6IJHsiAAVPhWTxCBTp0eNUoHbxCAmLEeOmoQLAXyAoxsCLHSE5HJKR5BCFAUJgdWqywgfQAFUISL26cQ6IDqQNIIDiSqNUJCAAFDdyI8Thq0I2ugx4UPQlgQidabA4LFSDxM67du3jz6qUUCAAh+QQABQAMACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QkZKECkBAApOJQCgoD5mDBQWDBJwcggUDUwSQHTc3QoKkKEGCTzMODjSPOJwvHQBCAwMUAEErDkVVLo8TnCgLggIggiwWRUd1kCAcKC/EhVJVeRcKkQUu34UCNwPln4kFQg8Pv4oUBAQTixN5NW1iDVYlkoVCV6IfZLp0iRAhhyKCBhEVaUKR4h17BG7oU/TgjpiPOWi9o6TAXaNz9dRt2ZLSUYEg3ZYVysPjyoaIjUg42wgCEwAjVs7YMQDpQS9dJF7c+FXESlAv2jKSiMUJCAAFErBwMWVu0I2qgxZMe9cMBayRhAqQkIm2rdu3cATjNgoEACH5BAAFAA0ALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2Oj5CRkoQKQDgCk4k4KCgPmYMFBYMEnByDJBwUkB03N0KCpChBgkAsBiGQE5wvHQBCAwOqJCEydWyYjg+cKAuCAiCCHMUzuI8CHCgvqoU4dR8J0JAFLtuGOEHhn4gFNCQkyIkUBAQTiwtEBx4mSECKsSg0FH3YsKaNQST+lgVM5GDMmDAObSiSd6OeIhJHvnyZYwOHukIKFKRjNK6XIQpvLph8VCBINheGjrjBMufVIxLLLIIIKIALDzQ+6Ch4pCxbQBIvvrABgIQHjytYTjwCQeAGCVgoPJApoOBLmadeIokSdAMFka0AaHjAomTAJ10XFIiA4nD1UwESC0Z+3Mu3r9+/kAIBACH5BAAFAA4ALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2Oj5CRkoQCEwsFk4k4KCgLmYOYgwScHIMULpEdBDdCgqMoQYITLyg4kBOcLx0AQgMDFLycLS+QC5ydggIgsigtakCQBRwoL8CFQi1TKKGPBS7WhkKXn4unHdyIFAQEE4tCK0VONh+tia8oNIoxBw0VFR5bFN3Ll+jCl4MHYyhSd6OdIiFEJNy54wAVOUIgMnZzscuQixVsOnYLQs0iIRsZNDQw2YjEMYdPSinggkUFngMiGT3IlQ+ICjQBq/jAggGPl0cgVpEQ9ELFjjEFQHgYimGEgGiDWvjYQQaTEAg+Uvz49OKKjiKm2IT8ROFIlZwXCOPKnUu3LqRAACH5BAAFAA8ALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2Oj5CRkoQFJCSTijgoKAuYiASbHIMdHZEKHARCgqAoQYITLy+Xjw+bL6VCAwMUAEKbrZALv50AAiCvv6qPBRwoL7yFvig4kgUu0IYUNJ6MChTHixQEBBOLHVMrHytSi6wo24ksVUVISD/wn7/4h1MM/gw2XCgSd6PcwDdIbBBhx62QAAUClrkoZYhGDBkKIhUI4kxgoR9NIiDYx4jEr3ICWrgCIUYDFCp5KDaq5WxbDjlYDABwIEJDEiorHoEgcOMSBRU64BgpAEJCzyQmCkCSCoAEjKRhpLrwICKKBU9tkv4YRMEARk8TjvyQ2bCt27dwBONGCgQAIfkEAAUAEAAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6PkJGShAUkJJOKEygoC5iIBJscgyAgkQocBEKCoChBgg8vAzSQD5svHQBCAzcUuZsoOJALv50AAgKCmpuqjwUcKC+9hUKbwZEFLtKGFLOeiwIgBYwUBAQT3y9qCSzMiawo3Yg3dUMXFyeL7/GHUhb+FgYWUeBw45yiDgZmvIlxyVshAeKaucBliIYMNaUgFQgCzYUhL2PaVNHWiMSvcwKeAAEA4ksELnGqKHhUC9osBDxE4PtAJQKYODEegSBw4xIFPFbKbCgAIo8SnzkiOoooBEPSNuJo3KHS5Y2nEVZ4lBjUIc2UmZgm2HCA1qHbt3AF48qVFAgAIfkEAAUAEQAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6PkJGShAUkQpOKDygoC5iIBJscgyAFkQocBJcAoChBgg8vNx2Qmigvs0IDNxQAQpsoD5ALv50AAgKCE7+qjgUctryFQi8oOJIFLtGGHTSejAWljBQEBBOLBUADA0DIiqwo3YkPTy1padbuv/GIQTL+Mq4UUeBww5wiEC1OnJACwpshcJCwzdrG4knDiEFQSAlh6AIEDx8mOnKx6cgcYyFQGDvQpgadDxcbaXqDxQsAJz7wGAAwJE6bEXMSPALxQgwDARSS2IFhwliVMD9/QBJQDAcWOz7aIKPgxEibGJgWqMCqVZCCjTEjUVBix80dh4UQLuChkgZuoQck7Ordy5dQIAAh+QQABQASACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QkZKEBSQuk4oPKCgkmIgEmxyDAgWRChwEQoKgKEGCDwMEIJCaKC8dAEIDNxS5mygLkAu/wQCkghO/qo8FHLa9hUIvKDiSBS7Qhh00noyljRQEBBOLBUC71YusKNyJw7/Zn7/tiO+b8YcUHDfkigVBLwak60bwWhABhkCguIEQUrMiWH4YksHAxhYFkIQgMLMDgrE0L4w5qXDnCJuGjWZY6QFnBoAiGZQkAGBgDsk8LR6lyeAmj4AOS1LguWPMyxwPEthAIvFAEAkmKUR8KdXBgok7UjA9jVrjm4AbrjC5aJIigwmChTxEfYOW0IISbwgwtp1Lt66gQAAh+QQABQATACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QkZKEBUIuk4oPKCgkmIgEmxyDBZIKHARCgqAoQYIPAxwCkJooLx0AQgM3FLibKKmPC74LggKkABO+vI8FHLXLhEIvKDiSBS7QhR00nozHjBQEBBOLBUC6xIurKNyJwpu26r7tiEK+8YoUHDfkigU4BDgA60YQSAkZsgoJCILjm6MJSXrIKWEohIMVaRI6qrJDB5w5AAQ8uSFoho0SH1pAMqEjS5kVAIg0GcMCgBoENoh8ePCohYYUTgR0GBNliRMABergJAIEkpB0QpZEoXKAFIgtPwyAwBQ1ipIK3255okHG6x2Che54rYOWEIkPdQi2tp1Lt66gQAAh+QQABQAUACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QkZKEBUIuk4oPKCgkmIgEmxyDBZIKHARCgqAoQYILN0ECkJooLx0AQgM3FLibKKmPC74LggKkABO+vI8FHLXLhEIvKDiSBS7QhR00nozHjBQEBBOLBUC6nYurKNyJwpsDsorr7YhCvvGLFBw35IoFOAhwqNetGw4HJ+QVInEp0gQlWXhYMHRDBosg3xodgSOnTAUABV60AnBixZYpIx15kGPGzRAAXrjUeAJAioUVbNSAePQECp4iAhSs6WKkBMgpXlac2PlICDEALsJ0iXOElIAXCaphchGnS5g8GbvREOPVRsFCR7waOBvtggGmbAbjyp0LIBAAIfkEAAUAFQAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6PkJGShAVCLpOKDygoJJiIBJscgwWSChwEQoKgKEGCCzdApI+aKC8dAEIDNxS4myi8jwu+C4ICshO+wI4FHLXKg0IvKDiSBS7PhB00noyyjBQEBBOLBUC6qYurKNuJJL433ogDagkxnYlC7/GHLWFNJrcSFcBBIAi7RR2E7ONGCAeRISAOubgUKUgXM24cGKIV6xGJMGWu+JAAoAABagBQhJCC4sEjByHdqFgB4EINCQMABDmxksAjCXbcpMgjQIGJNSZopuQpypGUCFGK3KJRYw0djSWBAFEAycU4QTQgrJlDhCEhCnPWfLFglpADtWoN2g6iIIOFALl48+YNBAAh+QQABQAWACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QkZKEBUIuk4oPKCgkmIgEmxyDBZIKHARCgqAoQYILN0Ckj5ooLx0AQgM3FLibKLyPC74LggKyE77AjgUctcqDQi8oOJIFLs+EHTSejLKMuTcTiwVAupeKQmBKNRI3iiS+BIskKT09Ox/o8YwXTCk12AoVwEEgSMBDHVx442ZogoUYIA65OAcJyBgfKvIVgoci1iMhbXykEJEHADliAIAMe+QExkgodQBskVClFUcUohqB4JIiQxQHBUAwaODkhKAJ0h48YpBBg5OIFCQ0yBNTEAWKjSjIOKHA6p0GCIYwJAQiD9gtYwkZOOAkZ1qTHAeovZ1Ll24gACH5BAAFABcALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2Oj5CRkoQFQi6Tig8oKCSYiASbHJ4ACkEEQoKgKEGCJARABZCaKC8dAEIDNxS3myi7jwu9C4ICsQATvb+OBRy0yoNCLyg4kgUuz4QdNJFCqI3GjCsYMGudiQVAuduKQhg772+KJL0EiyQZWVlwM+y9ootDmoiYg61QARwEghQ8pMAFuFGGHswwAOIQhYWLcLQRAeWCIRLSYD0SAgEPEypVWl0CAETYoyomlXAxAEDNjyHDhPQC4ghEGyZNuswoIIBIkRlSBD148cJbIydNIhCpSMNGkQ8sBnVQAKnDFDVcAXQoUsSLGoiEBHwoYgEFWkI4DS4kWPdW0MO6ePPWDQQAIfkEAAUAGAAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6PkJGShAVCLpOKDygoJJiIBJscngAKQQRCgqAoQYIkBEAFkJooLx0AQgM3FLebKLuPC70LggKxABO9v44FHLTKg0IvKDiSBS7PhB00kS6ojcaMQyIYI52JBUADBNiGQnhWcHAXiiS9oopCUWZmZW/49oxidEnigR0lHASCGDSkgAa4UYYWXEgg4BCFhYomzFHChY0hEtKAQHJRgQqZOF4E0VAgCEgvb40cLCETZoQaAFJipNklpNcERyDm0FwTo4CAIUPUUAPw4MUAjIaIhGnzpmKHGUOm3CMFAlKHEC2MgbgwJMFWiIJYDDkxDO0gBTcKfrqdS7euXUOBAAAh+QQABQAZACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjo+QkZKEBUIuk4oPKCgkmIgEmxyeAApBBEKCoChBgiQEQAWQMi0oLx0AQgM3FLibKLyPORC0C4ICsQATvsCOQFBfT8yDQi8oOJI4DsWHHTSPBS4kQgKNyIokXxoZIhuoiQVAAwS3iV52djw8ZQ7nvqKJM9wIFOhFkRBfrBKRoNMEypIGl97heKVgUSUSEUchIsEmBDlDFKQ5WnAgTo0EhkhUAwKJBoI4G+jUEaQAhCAgvtw1emNkwxwJTwAEeTLg1sFN2xgJkLDhS4UTAAqwoMUSwAN5FR3NcMqGnAA1tP4BOAZJgZQXyAqkoaqxEJAnLw1EtqWQta3du3jzKgoEACH5BAAFABoALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2Oj5CRkoQFQi6Tig8oKCSYgx0FgwSbHJ4AaU0/QoKjKEGCJARAoY9zPSkGHQBCAzcUu5sov48SOz1GD4ICtBPBw444STtlT4ZCLyg4kjg/bLSFHTSPBTSWAo3fiSwbTUxJX52JBUADBLqIIEZY+zAwSIokgr3CtyGDQYMOFAkJBkRRiw1kyIxhEA9RARyyQCwCIUSIOFOJXCR4km4QhWePSDiZc6eFIRLYGj6iUIXOgTwJBIHQCABHsI+N2Jg4gODHDQAwB+hauGnBIyIHGCBxCaCVzAX1eDZSk6eImlAFbmwaCKBASUYTkonapA0kIV4EDRS4LWR2rt27ePMeCgQAIfkEAAUAGwAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6PkJGShAVCLpOKDygoJJiDFEKDBJscngAtTSlFgqMoQYIkBEAFkB5ZOlYGAEIDNxS7myi/jwxwWjsSggK0ABPBw444VHBnF4ZCLyg4khMlW8yFHTSPBTRCNOCK6Yhpc2RLER6hiQVAAwQdiSA1UVEaGniIKCIR7BUiAXSaKFQ4Q5GQYEAUSTHRps0IG/MQFcAhC8QiEC5cQDN1iEaaG+sEURjpyIWFPD9uGCKRLeIjEG+OVPmAQhAIjwBwBBvnCIWTKl5iPABAc0C+h5s6Fa1i4cIAVptsLrgHtJGCE2xkAihwY5PBsSkZCSDEYdMCkoUOKHDg0BWu3bt48+pdFAgAIfkEAAUAHAAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6PkJGShAVCLpOKDygoJJiDNEKDBJscngAtUBlVgqMoQYIkBEAFkAdmVmUyAEIDNxS7myi/j0c8Z1Y5ggK0ABPBw44TZDx2dYZCLyg4khNeMsyFHTSPBRQuNOCK6YhSB2JhcTnjiQVAAwQKiQIVXV0RS0suKCIRDIi+O2MSJhyiSEhBRQMYmDDRwME8RAVwyAKxSAAFGh1MKerwwuAhCtAeUYjhhc0DQySymXx04kOdKdsAgOAIAMezRyRW1DnxZFzMASEdbrrkyAUbGWleAmhlcsGNIAIg2esEoMCNTa8ErZsUZNMCkYUUBJkwFq3bt3AF48pFFAgAIfkEAAUAHQAsAAAAACAAIAAAB/+AAIKDhIWGh4iJiouMjY6PkJGShA8XLpOECxOEX01SJJgAU0l4JYIUKkpSHKEVblduRAAUGWQoQYIkBEAFj04wbnZoBgBObTcUAEIozMmOD2EwaDwVghO9ABPMKM6ON9E+FoZCLyg4kg8fFwKHHTSQ7hTYi/OJL0dzEBBO74kFQAMIKEgkIM+aNm3EGGGjiMQ2IP6QfJk4kViiZcwgJuJQBQECJxe6HSqAYxeIRQI6UBgYSpECHEIQURDpCESIBE8uFSJRTuOjF1OeoNgEAMRJADi20XQZQuiLdzwHdFC2TWejAgNQvAAFgEBGQQtu4KjHSMECqzeY4RJEdhIQZgsPWhoSMOGa3Lt48+rdiykQACH5BAAFAB4ALAAAAAAgACAAAAf/gACCg4SFhoeIiYqLjI2Oj5CRkoQLRTMKk4JCFyGEdDs6R5kCBxgiFoIUeDs9Jpk0XBkpKg4AFBqsRIIkBEAFjwwaGVgYMgA2PFgoAEIozhSPExsaKjASggQPghPOKNCPHCMaIjOGQi8oOJIkKzEChx00kAoUHb+M94pCFjkSEiXfEBUAMoAApkRDGlTw4MFEAkUkugFRFIOBRYss9ElU5IKNAwcfTnRQVABHLxCMFChAmWmRABcjD1EI+KgABxQvXBgigW4iJG7OJggCwRJHN5qMCDh7IY/ngJHNnkECgpMENmc+F9xQB6mAi4MAbjgLMihfS6MorLY0JOCB2rVwB+PKnUtXbiAAOwAAAAAAAAAAAA==) #000 50% no-repeat}.ui-lightbox-caption{padding:.2em .4em;display:none}.ui-lightbox-caption-text{margin:.3em 0 .1em 0;float:left}.ui-lightbox-close{float:right;margin:0;padding:.125em}.ui-lightbox-close.ui-state-hover{padding:0}.ui-lightbox-nav-left,.ui-lightbox-nav-right{opacity:.5}.ui-lightbox-nav-left:hover,.ui-lightbox-nav-right:hover{opacity:1}.ui-listbox{padding:.25em;width:10em}.ui-listbox .ui-listbox-list-wrapper{overflow:auto}.ui-listbox .ui-listbox-list{list-style-type:none;margin:0;padding:0}.ui-listbox .ui-listbox-item{padding:.25em;border:0 none;cursor:pointer;font-weight:400;margin-bottom:1px}.ui-listbox .ui-listbox-item>span{vertical-align:middle}.ui-listbox .ui-listbox-item:last-child{margin-bottom:0}.ui-listbox.ui-state-disabled .ui-listbox-item{cursor:default}.ui-listbox-header{margin-bottom:.3em;padding:.125em .2em;position:relative}.ui-listbox-header .ui-chkbox{display:inline-block;vertical-align:middle;cursor:pointer}.ui-listbox-header .ui-listbox-filter-container{display:inline-block;vertical-align:middle;position:relative;width:100%}.ui-listbox-header.ui-listbox-header-w-checkbox .ui-listbox-filter-container{width:calc(100% - 2em)}.ui-listbox-header .ui-listbox-filter-container .fa{position:absolute;top:.25em;left:.25em}.ui-listbox-header .ui-inputtext{padding:.125em .125em .125em 1.25em;width:100%}.ui-listbox-footer{padding:.125em .2em}.ui-menu{width:12.5em;padding:.25em;position:relative}.ui-menu-separator{border-width:1px 0 0 0}.ui-menu.ui-menu-dynamic{position:absolute;display:none;z-index:100000}.ui-menu-list{position:static}.ui-menu .ui-menu-list .ui-menuitem{border:0}.ui-menu .ui-menu-list .ui-widget-header{clear:both;float:left;width:100%;margin:.125em 0;padding:.25em .5em}.ui-menu .ui-menuitem,.ui-menu .ui-menuitem-parent{width:100%;clear:both;margin:.125em 0;padding:0}.ui-menu .ui-menuitem-link{display:block;width:100%;text-decoration:none;font-weight:400;border:1px solid transparent;line-height:1em;padding:.25em;cursor:pointer}.ui-menu .ui-menuitem-link .ui-menuitem-icon{display:inline-block;vertical-align:middle}.ui-menu .ui-menuitem-text{vertical-align:middle}.ui-menu .ui-widget-header h1,.ui-menu .ui-widget-header h2,.ui-menu .ui-widget-header h3,.ui-menu .ui-widget-header h4,.ui-menu .ui-widget-header h5,.ui-menu .ui-widget-header h6{font-size:1em;margin:0 auto}.ui-menu .ui-menu-parent .ui-menu-child{display:none;width:12.5em;padding:.25em;position:absolute;margin:0;text-decoration:none;list-style:none}.ui-menu .ui-menu-parent{position:relative}.ui-menu .ui-menu-parent .ui-submenu-icon{float:right;margin-right:-.25em}.ui-menubutton{padding:0}.ui-menubutton .ui-button{margin:0}.ui-menu.ui-menubar .ui-menubar-root-list>li>a>.ui-submenu-icon{float:none}.ui-menubar{width:auto}.ui-menubar .ui-menubar-root-list{list-style:none;padding:0;margin:0}.ui-menubar .ui-menubar-root-list>.ui-menuitem{display:inline-block;width:auto}.ui-menubar:not(.ui-megamenu-vertical) .ui-menubar-root-list>.ui-menu-separator{display:inline-block;border-width:0 0 0 1px;width:1px;text-indent:-9999999px}.ui-menubar:not(.ui-megamenu-vertical) .ui-menubar-root-list>.ui-menu-separator:before{content:"ui-menu-separator"}.ui-menubar .ui-menu-child .ui-menuitem{width:100%}.ui-menubar .ui-menuitem.ui-menuitem-custom{float:right;margin-top:.25em}.ui-menubar .ui-menubar-options{float:right}.ui-slidemenu .ui-slidemenu-wrapper{position:relative}.ui-slidemenu .ui-slidemenu-content{overflow-x:hidden;overflow-y:auto;position:relative}.ui-slidemenu .ui-menu-list{position:absolute;top:0}.ui-slidemenu .ui-menu-parent{position:static}.ui-slidemenu .ui-menu-child{box-shadow:none;border:0 none;background:none repeat scroll 0 0 transparent}.ui-slidemenu-backward{position:absolute;bottom:0;width:100%;padding:.2em;cursor:pointer;display:none}.ui-slidemenu-backward .fa,.ui-slidemenu-backward span{vertical-align:middle}.ui-slidemenu .ui-slidemenuitem-active>.ui-submenu>ul{display:block!important}.ui-megamenu .ui-g{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.ui-megamenu .ui-megamenu-panel.ui-menu-child{width:auto}.ui-megamenu-vertical,.ui-megamenu .ui-megamenu-panel .ui-menu-list{width:12.5em}.ui-megamenu-vertical .ui-menu-list .ui-menuitem,.ui-megamenu-vertical .ui-menuitem-link{width:100%;box-sizing:border-box}.ui-megamenu-vertical>.ui-menubar-root-list>.ui-menuitem>.ui-menuitem-link>.ui-submenu-icon{float:right}.ui-panelmenu{width:auto}.ui-panelmenu .ui-panelmenu-panel{padding:0;margin:0}.ui-panelmenu .ui-panelmenu-header{cursor:pointer;position:relative;margin:-1px 0 0 0;zoom:1}.ui-panelmenu .ui-panelmenu-header a{display:block;padding:.25em .5em;text-decoration:none}.ui-panelmenu .fa{width:1em;text-align:center;vertical-align:middle;margin-right:.25em}.ui-panelmenu .ui-menuitem-text{margin-left:.125em}.ui-panelmenu span{vertical-align:middle}.ui-panelmenu .ui-panelmenu-content{padding:.2em 0;border-top:0;overflow:auto;zoom:1;outline:0;margin-bottom:1px}.ui-panelmenu .ui-panelmenu-content .ui-menu-parent{overflow:hidden}.ui-panelmenu .ui-panelmenu-content-wrapper{box-sizing:border-box}.ui-panelmenu .ui-panelmenu-content-wrapper-overflown{overflow:hidden}.ui-panelmenu .ui-panelmenu-header.ui-state-disabled,.ui-panelmenu .ui-panelmenu-header.ui-state-disabled a{cursor:default}.ui-panelmenu .ui-menu-list{position:static}.ui-panelmenu .ui-menuitem{margin:1px 0;padding:0}.ui-panelmenu .ui-menu-separator{width:95%;margin:0 auto}.ui-panelmenu .ui-menuitem-link{display:block;text-decoration:none;font-weight:400;border:1px solid transparent;line-height:1em;cursor:pointer;position:relative;padding:.25em .5em}.ui-panelmenu .ui-menu-parent .ui-menu-list{margin-left:1.5em}.ui-menuitem-active>.ui-megamenu-panel,.ui-menuitem-active>.ui-submenu>ul{display:block!important}.ui-menuitem-outline{outline:1px dotted;z-index:1}.ui-fluid .ui-menu:not(.ui-menu-dynamic){width:100%}.ui-message{border:1px solid;margin:0 .25em;padding:.25em .5em;display:inline-block}.ui-fluid .ui-message{display:block}.ui-messages{border:1px solid;margin:.5em 0;padding:1em 1em 1em .5em;display:none;position:relative}.ui-messages-icon{display:inline-block;padding:0;vertical-align:middle}.ui-messages-summary{font-weight:700;margin-left:.25em}.ui-messages-detail{margin-left:.25em}.ui-messages-success{color:#2c832f;background-color:#b4f0b6;border-color:#b4f0b6}.ui-messages-success .ui-messages-close{color:#2c832f}.ui-messages-info{color:#1765a3;background-color:#bfe0fa;border-color:#bfe0fa}.ui-messages-info .ui-messages-close{color:#1765a3}.ui-messages-warn{color:#8a6714;background-color:#ffe9b5;border-color:#ffe9b5}.ui-messages-warn .ui-messages-close{color:#8a6714}.ui-messages-error{color:#ab1a0f;background-color:#ffcbc8;border-color:#ffcbc8}.ui-messages-error .ui-messages-close{color:#ab1a0f}.ui-messages ul{margin:0;padding:0;list-style-type:none;display:inline-block;vertical-align:middle}.ui-messages.ui-messages-noicon ul{margin:0 1.5em 0 0}.ui-messages .ui-messages-close{cursor:pointer;position:absolute;top:5px;right:5px}.ui-multiselect{display:inline-block;position:relative;width:auto;cursor:pointer}.ui-multiselect .ui-multiselect-trigger{border-right:0;border-top:0;border-bottom:0;cursor:pointer;width:1.5em;height:100%;position:absolute;right:0;top:0;padding:0 .25em}.ui-multiselect .ui-multiselect-trigger .fa{margin-top:.4em;margin-left:-.125em}.ui-multiselect .ui-multiselect-label-container{overflow:hidden}.ui-multiselect .ui-multiselect-label{display:block;padding:.25em 2em .25em .25em;width:auto;border:0;cursor:pointer;text-overflow:ellipsis;overflow:hidden}.ui-multiselect.ui-state-disabled .ui-multiselect-label,.ui-multiselect.ui-state-disabled .ui-multiselect-trigger{cursor:auto}.ui-multiselect-panel{padding:.2em;position:absolute;min-width:12em}.ui-multiselect .ui-multiselect-panel{min-width:100%;display:none}.ui-multiselect-panel .ui-multiselect-items-wrapper{overflow:auto;position:relative;padding:.2em 0}.ui-multiselect-panel .ui-multiselect-list{border:0 none}.ui-multiselect-panel .ui-multiselect-item{border:0 none;cursor:pointer;font-weight:400;margin:1px 0;padding:.125em .25em;text-align:left;white-space:nowrap;display:block;position:relative}.ui-multiselect-panel .ui-multiselect-item .ui-chkbox,.ui-multiselect-panel .ui-multiselect-item label{display:inline-block;vertical-align:middle}.ui-multiselect-header{margin-bottom:.3em;padding:.25em;position:relative;text-align:left}.ui-multiselect-header .ui-chkbox{display:inline-block;vertical-align:middle;cursor:pointer}.ui-multiselect-header .ui-multiselect-filter-container{position:relative;display:inline-block;vertical-align:middle;width:65%}.ui-multiselect-header.ui-multiselect-header-no-toggleall .ui-multiselect-filter-container{width:85%}.ui-multiselect-header .ui-multiselect-filter-container .fa{position:absolute;top:.25em;left:.125em}.ui-multiselect-header .ui-inputtext{padding:.125em .125em .125em 1.25em;width:100%}.ui-multiselect-header .ui-multiselect-close{position:absolute;right:.375em;top:.375em;display:block;font-size:1em;border:0 none}.ui-multiselect-header a.ui-multiselect-all,.ui-multiselect-header a.ui-multiselect-none{float:left;margin-right:10px;display:block}.ui-multiselect-header .ui-multiselect-close.ui-state-hover{padding:0}.ui-fluid .ui-multiselect{width:100%;box-sizing:border-box}.ui-orderlist{display:table}.ui-orderlist .ui-orderlist-controls{height:12.5em;padding:0 .25em;vertical-align:middle;display:table-cell}.ui-orderlist .ui-orderlist-controls .ui-button{display:block;margin-bottom:.25em}.ui-orderlist .ui-orderlist-container{display:table-cell;vertical-align:top}.ui-orderlist .ui-orderlist-list{list-style-type:none;margin:0;padding:0;overflow:auto;height:12.5em;width:12.5em}.ui-orderlist .ui-orderlist-caption{text-align:center;padding:.5em .75em;border-bottom:0 none}.ui-orderlist .ui-orderlist-list .ui-orderlist-item{margin:1px;padding:.125em;cursor:pointer;border:0 none;font-weight:inherit}.ui-orderlist .ui-orderlist-filter-container{position:relative;width:100%;padding:.5em .6em;border-bottom:0 none}.ui-orderlist .ui-orderlist-filter-container .ui-inputtext{text-indent:1.1em;width:100%}.ui-orderlist .ui-orderlist-filter-container .fa{position:absolute;top:50%;left:1em;margin-top:-.6em}.ui-orderlist.ui-state-disabled .ui-button,.ui-orderlist.ui-state-disabled .ui-orderlist-item{cursor:default}.ui-orderlist.ui-state-disabled .ui-orderlist-list{overflow:hidden}.ui-orderlist.ui-orderlist-responsive{width:100%}.ui-orderlist.ui-orderlist-responsive .ui-orderlist-controls{width:16.66666%;padding-right:.5em}.ui-orderlist.ui-orderlist-responsive .ui-orderlist-list-container{width:83.33333%}.ui-orderlist.ui-orderlist-responsive .ui-orderlist-caption,.ui-orderlist.ui-orderlist-responsive .ui-orderlist-controls>.ui-button,.ui-orderlist.ui-orderlist-responsive .ui-orderlist-list{width:100%}.ui-orderlist .ui-orderlist-droppoint{height:6px;list-style-type:none}@media(max-width:40em){.ui-orderlist.ui-orderlist-responsive .ui-orderlist-controls{text-align:center;width:100%;display:inline-block;height:auto}.ui-orderlist.ui-orderlist-responsive .ui-orderlist-controls .ui-button{display:inline;width:20%;display:inline-block}.ui-orderlist.ui-orderlist-responsive .ui-orderlist-list-container{width:100%}}.ui-organizationchart .ui-organizationchart-table{border-spacing:0;border-collapse:separate}.ui-organizationchart .ui-organizationchart-table>tr>td{text-align:center;vertical-align:top;padding:0;padding:0 .75em}.ui-organizationchart .ui-organizationchart-node-content{padding:.5em .75em;display:inline-block;position:relative}.ui-organizationchart .ui-organizationchart-node-content .ui-node-toggler{position:absolute;bottom:-9px;margin-left:-8px;z-index:2;left:50%}.ui-organizationchart .ui-organizationchart-line-down{margin:0 auto;height:20px;width:1px;float:none}.ui-organizationchart .ui-organizationchart-line-left,.ui-organizationchart .ui-organizationchart-line-right{float:none;border-radius:0}.ui-organizationchart .ui-organizationchart-node-content.ui-organizationchart-selectable-node{cursor:pointer}.ui-overlaypanel{padding:0;margin:0;position:absolute}.ui-overlaypanel-content{padding:.5em 1em}.ui-overlaypanel-close{position:absolute;top:-.5em;right:-.5em;border-radius:100%}.ui-paginator{margin:0;text-align:center;padding:.125em}.ui-paginator .ui-paginator-top{border-bottom:0 none}.ui-paginator .ui-paginator-bottom{border-top:0 none}.ui-paginator .ui-paginator-current,.ui-paginator .ui-paginator-first,.ui-paginator .ui-paginator-last,.ui-paginator .ui-paginator-next,.ui-paginator .ui-paginator-page,.ui-paginator .ui-paginator-pages,.ui-paginator .ui-paginator-prev{display:inline-block;padding:.125em .375em;zoom:1;margin-left:.063em;margin-right:.063em;text-decoration:none;vertical-align:middle}.ui-paginator .ui-paginator-first,.ui-paginator .ui-paginator-last,.ui-paginator .ui-paginator-next,.ui-paginator .ui-paginator-page,.ui-paginator .ui-paginator-prev{cursor:pointer}.ui-paginator .ui-paginator-current,.ui-paginator .ui-paginator-rpp-options{margin-left:1em;margin-right:1em;background-image:none}.ui-paginator .ui-paginator-jtp-select option,.ui-paginator .ui-paginator-rpp-options option{background-image:none;border:0 none;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}.ui-paginator a.ui-state-disabled{outline:0 none}.ui-paginator .ui-dropdown{min-width:4em;margin-left:.375em}.ui-panel{padding:.2em}.ui-panel .ui-panel-titlebar{padding:.5em .75em}.ui-panel .ui-panel-titlebar-icon{float:right;cursor:pointer;margin-left:.2em;margin-top:-.1em}.ui-panel .ui-panel-content{border:0;background:0;padding:.5em .75em}.ui-panel .ui-panel-footer{border-width:1px 0 0;padding:.25em .5em;text-align:left}.ui-panel-content-wrapper-overflown{overflow:hidden}.ui-password-panel{padding:.25em .5em;width:10em;margin-top:2px}.ui-password-panel .ui-password-meter{height:10px;background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAoCAYAAAAcwQPnAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABb9JREFUeNrsnMtOI0cUhk9ffJVjZxIUg2aA2bBlZsmsshgpmuUom7xGHiO7kFfgCRLlBUZZIYFQyCKLMFJAIQwOGF/Gt3ZfnPNXU3YZsBQam5StOlKP2/1101Xn/FWu/q2xdXBw8GUURd8S0VsyYeLh8aNt29tuGIbb5XL5ZbFYNCkx8eBoNptvK5XKc9eyrJeZTIa63e4Quq5LjuOIfd/3iWe0BzNWMaVSKbHPYqYgCIaM2yAYXnENrtWRIcDQl8FgIBheZ5m3easFtARNuTjY7/fFDWTicBE29fhDGDqYTqdFQ9CJmw1CY3Ac13qepyVDgMlCgKmimkXe5rEWuJ8QNv7BbIUk4YZyJOJCVclJGUYONjBs8sZy5GSzWXE+Ot/r9bRkCDApKjB1BphF3ua1FvJvWvv7+wOpcjQK0el0xm6az+cTMRwHl7MiuDpyCoWCUDsa1Gq1hjOATgzHwHAOjoGpM0DS3Dw2e6xaQLhCcOqNjaiMqKaRtzFhGVEZUU1LVCJ/e3t7f/IJz82DsolpBYvs2GZRbfN+3aTDxJSiDk3xot7GHNY1+TAxpXjHmvoVzvt35XI5N6/Oe7PZpHq9Tmtra6akmjnvOZhbpZ0dudojWl6GQYHVHtH5OZH0bJIyHAPDOTgGpiwwaWmJeDUY719eEq8G/zPzXr8Wi9K7zD7jvGvgvNPxMaxlovV1oosLIphgJycjcSRlEBVYrYZexEx1tFdWiNrteDs7I2o07sXkE1BLEZxx3jVy3qlSIdrYiGcFPJIeHcVCQORyyRhGDBgEUa3GTPlOUggODcS9Ieyrq3sz6QLLjhrnXQ/n3ZXrFDHb8FpFiGB3l0g2CGuvra37MziwYBAbRgUY7iNjc3M0cx0eEp2eJmKNN2/E7hULT/orspN3eS/3ZdLPgpAm+VlgSPZd/pIuTPpZODbJz5pG3m4574TP3EnCuS+ToiqVJotqdXWycBIwY5Lq6rzPsagQRlT6Oe8+n+DOudMrOmlCL+f9Z+zPc0eMqPR03t/xm3OTDxPGeV9Mx3ohvkG47bx3f4lJ0OJV3qXyOcOLwuwyv/I6P+JFYQ+TW6Qfw3MImM3nDKKYDRR3P73EDxbXDr7H/QtbWjGv8I1YXMN7WiznPaxwC+pckA+jBNgZfuRY5xMumPf4keNkVEidGEQF5tdYTGHMIsU1z67wNe14657x4Glox/rpeBCo/6llMZx37/frYskW5PgZfiOevUJ+RG0dxUXTjVlOzFAgvxqzUHH3ITiIzOOB0znmv3GlJetlx79BWBzn/fT7UQJcXm892YpnMJ8LVtvlQgb6MbgkYBBb5McsUDyz4uZo5moccvVO9WTZZ9RwGsNvEBbLeb8pKjs1ucg6MCmqVGmyqHKrk4usC2NRUenFAjvvRlT/u6ikCIzzbsJ8g7DIzvuixIJ8gzB03n/gNz+ZspqYtvNufm3GxEycd/FrM39Ud0aLwfQSpa+d4Y53SX3FNU7K0k6B8pmleBEZtKijuPuOlaZCdpk/CmwKoz61euf82Rxpxyx+1gFzbHhFkWCh4u7PIm/zVotPM6/GnfcGDDuOQnaF/LAtto/dM/IU1zgpy7glSuVy1PYq1PPr3KCRu+/YGSrl17lzFxSEPW7HyaixGjGICqzn1ygahIKFirs/i7zNYy3yzg3nvc7CAkSycFO87yrOcFKWS38mNrBOvyoaNHQ3nBx9Xtjg8y85CR2qto54Jgi1Y5blCIYCdf2qYIHi7s8ib/Nai0KqN+6819rvRYPQjErjkD4qfssXxc1E7JPsMyqXXohR0ez+Rf80fxtNx26Rnj7ZIo9Hjec36O/aLs8EgXbMtlzBAk5aGPmC9RXPLGluHps9Vi2+evr1uEFavDbx7mpsEiY7IoQ7oSOOnZrYWB2YFFUmVZooqmnnbRbssWtxy3k3ojKimoaopPNufm3GxEycd/NrMyam7rz/K8AAIzeBeEI84y8AAAAASUVORK5CYII=) no-repeat 0 0;padding:0;margin:0}.ui-password-info{margin-top:.25em}.ui-password-panel-overlay{position:absolute}.ui-picklist>div{float:left}.ui-picklist .ui-picklist-buttons{height:12.5em;padding:0 .25em}.ui-picklist .ui-picklist-list{list-style-type:none;margin:0;padding:0;overflow:auto;height:12.5em;width:12.5em}.ui-picklist .ui-picklist-list li{margin:1px;padding:.125em}.ui-picklist .ui-button{display:block;margin-bottom:.25em}.ui-picklist .ui-button-text-icon-left{width:100%}.ui-picklist .ui-picklist-item{cursor:pointer;border:0 none;font-weight:inherit}.ui-picklist .ui-picklist-caption{text-align:center;padding:.5em .75em;border-bottom:0 none}.ui-picklist table{width:100%;border-collapse:collapse}.ui-picklist .ui-picklist-filter-container{position:relative;width:100%;padding:.5em .6em;border-bottom:0 none}.ui-picklist .ui-picklist-filter-container .ui-picklist-filter{text-indent:1.1em;width:100%}.ui-picklist .ui-picklist-filter-container .fa{position:absolute;top:50%;left:1em;margin-top:-.6em}.ui-picklist{display:table}.ui-picklist>div{float:none;display:table-cell;vertical-align:top}.ui-picklist .ui-picklist-buttons{vertical-align:middle}.ui-picklist.ui-picklist-vertical{display:table}.ui-picklist.ui-picklist-vertical>div{float:none;display:table-row;vertical-align:top}.ui-picklist.ui-picklist-vertical .ui-picklist-buttons{text-align:center;height:auto}.ui-picklist.ui-picklist-vertical .ui-picklist-buttons .ui-button{display:inline-block}.ui-picklist.ui-picklist-vertical .ui-button{margin-top:.25em}.ui-picklist-outline{outline:1px dotted #000;z-index:1}.ui-picklist .ui-picklist-droppoint{height:6px;list-style-type:none}.ui-picklist .ui-picklist-list .ui-picklist-droppoint-empty{height:100%;list-style-type:none}.ui-picklist-list.ui-picklist-source,.ui-picklist-list.ui-picklist-target{outline:0}.ui-picklist.ui-picklist-responsive *{box-sizing:border-box}.ui-picklist.ui-picklist-responsive{width:100%}.ui-picklist.ui-picklist-responsive .ui-picklist-listwrapper{width:35%}.ui-picklist.ui-picklist-responsive .ui-picklist-listwrapper.ui-picklist-listwrapper-nocontrols{width:45%}.ui-picklist.ui-picklist-responsive .ui-picklist-buttons{width:10%}.ui-picklist.ui-picklist-responsive .ui-picklist-buttons button{width:100%}.ui-picklist.ui-picklist-responsive .ui-picklist-list{width:auto}@media(max-width:40em){.ui-picklist.ui-picklist-responsive{display:block}.ui-picklist.ui-picklist-responsive>div{display:block;width:100%!important}.ui-picklist.ui-picklist-responsive .ui-picklist-buttons{text-align:center;height:auto;padding:.4em 0}.ui-picklist.ui-picklist-responsive .ui-picklist-buttons button{display:inline;width:20%;margin-bottom:0}.ui-picklist.ui-picklist-responsive .ui-picklist-source-controls.ui-picklist-buttons{padding-bottom:.4em}.ui-picklist.ui-picklist-responsive .ui-picklist-target-controls.ui-picklist-buttons{padding-top:.4em}.ui-picklist.ui-picklist-responsive .ui-picklist-buttons .fa-angle-right:before{content:"\F107"}.ui-picklist.ui-picklist-responsive .ui-picklist-buttons .fa-angle-double-right:before{content:"\F103"}.ui-picklist.ui-picklist-responsive .ui-picklist-buttons .fa-angle-left:before{content:"\F106"}.ui-picklist.ui-picklist-responsive .ui-picklist-buttons .fa-angle-double-left:before{content:"\F102"}}.ui-progressbar{height:1.2em;text-align:left;position:relative;overflow:hidden}.ui-progressbar-determinate .ui-progressbar-value{height:100%;width:0;position:absolute;display:none;border:0 none}.ui-progressbar-determinate .ui-progressbar-value-animate{transition:width 1s ease-in-out}.ui-progressbar-determinate .ui-progressbar-label{text-align:center;height:100%;width:100%;position:absolute;display:none;font-weight:700}.ui-progressbar-indeterminate .ui-progressbar-value{border:0 none}.ui-progressbar-indeterminate .ui-progressbar-value:before{content:"";position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left,right;-webkit-animation:ui-progressbar-indeterminate-anim 2.1s cubic-bezier(.65,.815,.735,.395) infinite;animation:ui-progressbar-indeterminate-anim 2.1s cubic-bezier(.65,.815,.735,.395) infinite}.ui-progressbar-indeterminate .ui-progressbar-value:after{content:"";position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left,right;-webkit-animation:ui-progressbar-indeterminate-anim-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;animation:ui-progressbar-indeterminate-anim-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;-webkit-animation-delay:1.15s;animation-delay:1.15s}@-webkit-keyframes ui-progressbar-indeterminate-anim{0%{left:-35%;right:100%}60%{left:100%;right:-90%}to{left:100%;right:-90%}}@keyframes ui-progressbar-indeterminate-anim{0%{left:-35%;right:100%}60%{left:100%;right:-90%}to{left:100%;right:-90%}}@-webkit-keyframes ui-progressbar-indeterminate-anim-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}to{left:107%;right:-8%}}@keyframes ui-progressbar-indeterminate-anim-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}to{left:107%;right:-8%}}.ui-progress-spinner{position:relative;margin:0 auto;width:100px;height:100px;display:inline-block}.ui-progress-spinner:before{content:"";display:block;padding-top:100%}.ui-progress-spinner-svg{-webkit-animation:ui-progress-spinner-rotate 2s linear infinite;animation:ui-progress-spinner-rotate 2s linear infinite;height:100%;-webkit-transform-origin:center center;transform-origin:center center;width:100%;position:absolute;top:0;bottom:0;left:0;right:0;margin:auto}.ui-progress-spinner-circle{stroke-dasharray:1,200;stroke-dashoffset:0;-webkit-animation:ui-progress-spinner-dash 1.5s ease-in-out infinite,ui-progress-spinner-color 6s ease-in-out infinite;animation:ui-progress-spinner-dash 1.5s ease-in-out infinite,ui-progress-spinner-color 6s ease-in-out infinite;stroke-linecap:round}@-webkit-keyframes ui-progress-spinner-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes ui-progress-spinner-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes ui-progress-spinner-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@keyframes ui-progress-spinner-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@-webkit-keyframes ui-progress-spinner-color{0%,to{stroke:#d62d20}40%{stroke:#0057e7}66%{stroke:#008744}80%,90%{stroke:#ffa700}}@keyframes ui-progress-spinner-color{0%,to{stroke:#d62d20}40%{stroke:#0057e7}66%{stroke:#008744}80%,90%{stroke:#ffa700}}.ui-radiobutton{display:inline-block;cursor:pointer;vertical-align:middle;margin-right:.25em}.ui-radiobutton-box{width:1.125em;height:1.125em;line-height:1.125em;border-radius:100%;text-align:center}.ui-radiobutton-icon{display:block;font-size:.5em;line-height:inherit;margin-top:-1px}.ui-radiobutton,.ui-radiobutton-label{vertical-align:middle}.ui-fluid .fc .ui-button{width:auto}.ui-selectbutton{display:inline-block}.ui-selectbutton.ui-state-error{padding:0}.ui-selectbutton .ui-button.ui-state-focus{outline:0}.ui-sidebar{position:fixed;padding:.5em 1em;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ui-sidebar-left{top:0;left:0;width:20em;height:100%;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.ui-sidebar-right{top:0;right:0;width:20em;height:100%;-webkit-transform:translateX(100%);transform:translateX(100%)}.ui-sidebar-top{top:0;left:0;width:100%;height:10em;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.ui-sidebar-bottom{bottom:0;left:0;width:100%;height:10em;-webkit-transform:translateY(100%);transform:translateY(100%)}.ui-sidebar-full{width:100%;height:100%;left:0;transition:-webkit-transform 0s;transition:transform 0s;transition:transform 0s,-webkit-transform 0s}.ui-sidebar-left.ui-sidebar-active,.ui-sidebar-right.ui-sidebar-active{-webkit-transform:translateX(0);transform:translateX(0)}.ui-sidebar-left.ui-sidebar-sm,.ui-sidebar-right.ui-sidebar-sm{width:20em}.ui-sidebar-left.ui-sidebar-md,.ui-sidebar-right.ui-sidebar-md{width:40em}.ui-sidebar-left.ui-sidebar-lg,.ui-sidebar-right.ui-sidebar-lg{width:60em}.ui-sidebar-bottom.ui-sidebar-active,.ui-sidebar-top.ui-sidebar-active{-webkit-transform:translateY(0);transform:translateY(0)}.ui-sidebar-bottom.ui-sidebar-sm,.ui-sidebar-top.ui-sidebar-sm{height:10em}.ui-sidebar-bottom.ui-sidebar-md,.ui-sidebar-top.ui-sidebar-md{height:20em}.ui-sidebar-bottom.ui-sidebar-lg,.ui-sidebar-top.ui-sidebar-lg{height:30em}.ui-sidebar-mask{position:fixed;width:100%;height:100%}.ui-sidebar-close{float:right}@media screen and (max-width:64em){.ui-sidebar-left.ui-sidebar-lg,.ui-sidebar-left.ui-sidebar-md,.ui-sidebar-right.ui-sidebar-lg,.ui-sidebar-right.ui-sidebar-md{width:20em}}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none;z-index:1}.ui-slider .ui-slider-handle.ui-slider-handle-active{z-index:2}.ui-slider .ui-slider-range{position:absolute;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.25em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.25em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-slider-animate .ui-slider-handle{transition:left .3s}.ui-spinner{display:inline-block;overflow:visible;padding:0;position:relative;vertical-align:middle}.ui-spinner-input{vertical-align:middle;padding-right:1.5em}.ui-spinner-button{cursor:default;display:block;height:50%;margin:0;overflow:hidden;padding:0;position:absolute;right:0;text-align:center;vertical-align:middle;width:1.5em}.ui-spinner .fa{position:absolute;top:50%;left:50%;margin-top:-.5em;margin-left:-.5em;width:1em}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-fluid .ui-spinner{width:100%}.ui-fluid .ui-spinner .ui-spinner-input{padding-right:2em;width:100%}.ui-fluid .ui-spinner .ui-spinner-button{width:1.5em}.ui-fluid .ui-spinner .ui-spinner-button .fa{left:.7em}.ui-splitbutton{position:relative;display:inline-block;zoom:1}.ui-splitbutton .ui-button.ui-splitbutton-menubutton{width:2em}.ui-splitbutton.ui-state-disabled button{cursor:default}.ui-fluid .ui-splitbutton{width:100%;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.ui-fluid .ui-splitbutton .ui-button:first-child{width:calc(100% - 2em)}.ui-fluid .ui-splitbutton .ui-button.ui-splitbutton-menubutton{width:2em;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.ui-steps ul{list-style-type:none;padding:0;margin:0}.ui-steps .ui-steps-item{float:left;box-sizing:border-box;cursor:pointer}.ui-steps.ui-steps-readonly .ui-steps-item{cursor:auto}.ui-steps .ui-steps-item .ui-menuitem-link{text-decoration:none;display:block;padding:1em;position:relative;text-align:center}.ui-steps .ui-steps-item.ui-state-disabled .ui-menuitem-link,.ui-steps .ui-steps-item.ui-state-highlight .ui-menuitem-link{cursor:default}.ui-steps .ui-steps-number{font-size:200%;display:block}.ui-steps .ui-steps-title{display:block;white-space:nowrap}@media(max-width:40em){.ui-steps .ui-steps-item .ui-menuitem-link{padding:.5em}.ui-steps .ui-steps-item .ui-steps-title{display:none}}.ui-tabmenu .ui-tabmenu-nav{margin:0;padding:.25em .5em 0 .25em}.ui-tabmenu .ui-tabmenu-nav .ui-tabmenuitem{list-style:none;float:left;position:relative;margin:0 .2em 1px 0;padding:0;white-space:nowrap;display:block;border-bottom:0;top:1px}.ui-tabmenu .ui-tabmenu-nav .ui-tabmenuitem a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabmenu .ui-tabmenu-nav a{padding:.5em 1em}.ui-tabmenu .ui-tabmenu-nav .ui-tabmenuitem .ui-icon{float:left}.ui-tabmenu .ui-tabmenu-nav .ui-tabmenuitem.ui-state-disabled a{cursor:default}.ui-tabview{padding:.25em}.ui-tabview .ui-tabview-nav{margin:0}.ui-tabview .ui-tabview-nav li{list-style:none;float:left;position:relative;margin:0 .125em 1px 0;padding:0;white-space:nowrap}.ui-tabview .ui-tabview-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabview .ui-tabview-nav li.ui-state-disabled a,.ui-tabview .ui-tabview-nav li.ui-state-processing a,.ui-tabview .ui-tabview-nav li.ui-tabview-selected a{cursor:text}.ui-tabview.ui-tabview-collapsible .ui-tabview-nav li.ui-tabview-selected a,.ui-tabview .ui-tabview-nav li a{cursor:pointer}.ui-tabview .ui-tabview-panel{border-width:0;padding:1em;background:0}.ui-tabview .ui-tabview-nav li{display:block}.ui-tabview .ui-tabview-nav li .ui-tabview-left-icon,.ui-tabview .ui-tabview-nav li .ui-tabview-right-icon,.ui-tabview .ui-tabview-nav li .ui-tabview-title{vertical-align:middle}.ui-tabview .ui-tabview-nav li .ui-tabview-close{margin:.5em .3em 0 0;cursor:pointer}.ui-tabview.ui-tabview-top>.ui-tabview-nav li{border-bottom:0;top:1px}.ui-tabview.ui-tabview-top>.ui-tabview-nav{padding:.2em .2em 0}.ui-tabview.ui-tabview-bottom>.ui-tabview-nav{padding:0 .2em .2em}.ui-tabview.ui-tabview-bottom>.ui-tabview-nav li{border-top:0}.ui-tabview-left:after,.ui-tabview-right:after{clear:both;content:".";display:block;height:0;visibility:hidden}.ui-tabview-left>.ui-tabview-nav{float:left;width:25%;height:300px;background-image:none;padding-top:1px}.ui-tabview-left>.ui-tabview-panels{float:right;width:75%}.ui-tabview.ui-tabview-left>.ui-tabview-nav li,.ui-tabview.ui-tabview-right>.ui-tabview-nav li{display:block;float:right;white-space:normal;width:99%}.ui-tabview.ui-tabview-left>.ui-tabview-nav li{margin:0 0 1px 0;border-right:0 none}.ui-tabview.ui-tabview-right>.ui-tabview-nav{float:right;width:25%;height:300px;background-image:none;padding-top:1px}.ui-tabview.ui-tabview-right>.ui-tabview-panels{float:left;width:75%}.ui-tabview.ui-tabview-right>.ui-tabview-nav li{margin:0 0 1px 0;border-left:0 none}.ui-rtl .ui-tabview .ui-tabview-nav li{float:right}.ui-terminal{height:18em;overflow:auto;padding:.25em}.ui-terminal-input{border:0 none;background-color:transparent;color:inherit;padding:0;margin:0 0 0 .125em;width:75%;outline:0;vertical-align:baseline}.ui-terminal-command{margin-left:.125em;-moz-margin-start:.125em}.ui-terminal-input::-ms-clear{display:none}.ui-toolbar{padding:.25em .5em}.ui-toolbar-group-left{float:left}.ui-toolbar-group-right{float:right}.ui-tooltip{position:absolute;display:none;padding:.25em .5em;max-width:12.5em}.ui-tooltip.ui-tooltip-left,.ui-tooltip.ui-tooltip-right{padding:0 .25em}.ui-tooltip.ui-tooltip-bottom,.ui-tooltip.ui-tooltip-top{padding:.25em 0}.ui-tooltip .ui-tooltip-text{padding:.125em .5em;background-color:#4c4c4c;color:#fff;white-space:pre-line}.ui-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.ui-tooltip-right .ui-tooltip-arrow{top:50%;left:0;margin-top:-.25em;border-width:.25em .25em .25em 0;border-right-color:#4c4c4c}.ui-tooltip-left .ui-tooltip-arrow{top:50%;right:0;margin-top:-.25em;border-width:.25em 0 .25em .25em;border-left-color:#4c4c4c}.ui-tooltip.ui-tooltip-top{padding:.25em 0}.ui-tooltip-top .ui-tooltip-arrow{bottom:0;left:50%;margin-left:-.25em;border-width:.25em .25em 0;border-top-color:#4c4c4c}.ui-tooltip-bottom .ui-tooltip-arrow{top:0;left:50%;margin-left:-.25em;border-width:0 .25em .25em;border-bottom-color:#4c4c4c}.ui-tree{width:18em}.ui-tree .ui-treenode-selectable.ui-treenode-content{cursor:pointer}.ui-tree .ui-tree-container{height:100%;margin:0;overflow:auto;padding:.25em;white-space:nowrap}.ui-tree .ui-treenode-children{margin:0;padding:0 0 0 1em}.ui-tree .ui-treenode{background-attachment:scroll;background-color:transparent;background-image:none;background-position:0 0;background-repeat:repeat-y;list-style:none outside none;margin:0;padding:.125em 0 0 0}.ui-tree .ui-treenode-droppoint{height:4px;list-style-type:none}.ui-tree .ui-treenode-droppoint-active{border:0 none}.ui-tree .ui-tree-toggler{cursor:pointer}.ui-tree .ui-tree-toggler,.ui-tree .ui-treenode-icon,.ui-tree .ui-treenode-label{display:inline-block;vertical-align:middle}.ui-tree .ui-treenode-label{padding:0 .25em}.ui-tree .ui-treenode-label.ui-state-highlight,.ui-tree .ui-treenode-label.ui-state-hover{font-weight:400;border:0 none}.ui-tree .ui-treenode.ui-treenode-leaf>.ui-treenode-content>.ui-tree-toggler{visibility:hidden}.ui-tree .ui-chkbox-box{cursor:pointer}.ui-tree .ui-chkbox{display:inline-block;vertical-align:middle}.ui-tree .ui-chkbox .ui-chkbox-icon{margin-left:1px}.ui-fluid .ui-tree{width:100%}.ui-tree-horizontal{width:auto;padding:.5em 0;overflow:auto}.ui-tree.ui-tree-horizontal table,.ui-tree.ui-tree-horizontal td,.ui-tree.ui-tree-horizontal tr{border-collapse:collapse;margin:0;padding:0;vertical-align:middle}.ui-tree.ui-tree-horizontal .ui-tree-toggler{vertical-align:middle;margin:0}.ui-tree-horizontal .ui-treenode-content{font-weight:400;padding:.4em 1em .4em .2em}.ui-tree.ui-tree-horizontal .ui-tree-node-label{margin:0}.ui-tree-horizontal .ui-treenode-parent .ui-treenode-content{font-weight:400;white-space:nowrap}.ui-tree.ui-tree-horizontal .ui-treenode{background:url(line.567f57385ea3dde2c9ae.gif) repeat-x scroll 50% transparent;padding:.25em 2.5em}.ui-tree.ui-tree-horizontal .ui-treenode.ui-treenode-collapsed,.ui-tree.ui-tree-horizontal .ui-treenode.ui-treenode-leaf{padding-right:0}.ui-tree.ui-tree-horizontal .ui-treenode-children{padding:0;margin:0}.ui-tree.ui-tree-horizontal .ui-treenode-connector{width:1px}.ui-tree.ui-tree-horizontal .ui-treenode-connector-table{height:100%;width:1px}.ui-tree.ui-tree-horizontal .ui-treenode-connector-line{background:url(line.567f57385ea3dde2c9ae.gif) repeat-y scroll 0 0 transparent;width:1px}.ui-tree.ui-tree-horizontal table{height:0}.ui-tree.ui-tree-horizontal .ui-chkbox{vertical-align:bottom;margin-right:.25em}.ui-tree.ui-tree-loading{position:relative;min-height:4em}.ui-tree .ui-tree-loading-mask{position:absolute;width:100%;height:100%;-ms-filter:"alpha(opacity=10)";opacity:.1;z-index:1}.ui-tree .ui-tree-loading-content{position:absolute;left:50%;top:50%;z-index:2;margin-top:-1em;margin-left:-1em}.ui-treetable{position:relative}.ui-treetable table{border-collapse:collapse;width:100%;table-layout:fixed}.ui-treetable .ui-treetable-footer,.ui-treetable .ui-treetable-header{text-align:center;padding:.5em .75em}.ui-treetable .ui-treetable-header{border-bottom:0 none}.ui-treetable .ui-treetable-footer{border-top:0 none}.ui-treetable tfoot td,.ui-treetable th{text-align:center}.ui-treetable tbody td,.ui-treetable tfoot td,.ui-treetable thead th{padding:.25em .5em;overflow:hidden;white-space:nowrap;border-width:1px;border-style:solid}.ui-treetable tbody td{border-color:inherit}.ui-treetable tbody td:first-child span{vertical-align:middle}.ui-treetable .ui-treetable-toggler{vertical-align:middle;cursor:pointer;text-decoration:none}.ui-treetable .ui-treetable-checkbox{margin-right:.5em}.ui-treetable .ui-treetable-checkbox .ui-chkbox-icon{margin-left:1px}.ui-treetable .ui-treetable-row.ui-treetable-row-selectable{cursor:pointer}.ui-treetable .ui-treetable-row.ui-state-highlight{border:0 none}.ui-treetable tr.ui-state-hover{border-color:inherit;font-weight:inherit}.ui-treetable .ui-treetable-indent{width:1em;height:1em;float:left}.ui-treetable .ui-column-resizer{display:block;position:absolute!important;top:0;right:0;margin:0;width:.5em;height:100%;padding:0;cursor:col-resize;border:1px solid transparent}.ui-treetable .ui-column-resizer-helper{width:1px;position:absolute;z-index:10;display:none}.ui-treetable-resizable{padding-bottom:1px;overflow:auto}.ui-treetable-resizable tbody td,.ui-treetable-resizable tfoot td,.ui-treetable-resizable thead th{white-space:nowrap}.ui-treetable-resizable th.ui-resizable-column{background-clip:padding-box;position:relative}.ui-treetable td.ui-treetable-child-table-container{padding:0;border:0 none}.ui-treetable .ui-treetable-row{display:table-row;border-bottom:0 transparent}.ui-treetable tbody .ui-treetable-row td{border:0 none}.ui-treetable tbody .ui-treetable-row td input{outline:0 none}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/tsconfig.json b/asterixdb/asterix-app/src/main/resources/dashboard/tsconfig.json
new file mode 100755
index 0000000..0897e9e
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/tsconfig.json
@@ -0,0 +1,32 @@
+/*
+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.
+*/
+{
+  "compileOnSave": false,
+  "compilerOptions": {
+    "outDir": "./dist/out-tsc",
+    "sourceMap": true,
+    "declaration": false,
+    "moduleResolution": "node",
+    "emitDecoratorMetadata": true,
+    "experimentalDecorators": true,
+    "target": "es5",
+    "typeRoots": [
+      "node_modules/@types"
+    ],
+    "lib": [
+      "es2017",
+      "dom"
+    ]
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/dashboard/tslint.json b/asterixdb/asterix-app/src/main/resources/dashboard/tslint.json
new file mode 100755
index 0000000..1d02629
--- /dev/null
+++ b/asterixdb/asterix-app/src/main/resources/dashboard/tslint.json
@@ -0,0 +1,154 @@
+/*
+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.
+*/
+{
+  "rulesDirectory": [
+    "node_modules/codelyzer"
+  ],
+  "rules": {
+    "arrow-return-shorthand": true,
+    "callable-types": true,
+    "class-name": true,
+    "comment-format": [
+      true,
+      "check-space"
+    ],
+    "curly": true,
+    "eofline": true,
+    "forin": true,
+    "import-blacklist": [
+      true,
+      "rxjs",
+      "rxjs/Rx"
+    ],
+    "import-spacing": true,
+    "indent": [
+      true,
+      "spaces"
+    ],
+    "interface-over-type-literal": true,
+    "label-position": true,
+    "max-line-length": [
+      true,
+      140
+    ],
+    "member-access": false,
+    "member-ordering": [
+      true,
+      {
+        "order": [
+          "static-field",
+          "instance-field",
+          "static-method",
+          "instance-method"
+        ]
+      }
+    ],
+    "no-arg": true,
+    "no-bitwise": true,
+    "no-console": [
+      true,
+      "debug",
+      "info",
+      "time",
+      "timeEnd",
+      "trace"
+    ],
+    "no-construct": true,
+    "no-debugger": true,
+    "no-duplicate-super": true,
+    "no-empty": false,
+    "no-empty-interface": true,
+    "no-eval": true,
+    "no-inferrable-types": [
+      true,
+      "ignore-params"
+    ],
+    "no-misused-new": true,
+    "no-non-null-assertion": true,
+    "no-shadowed-variable": true,
+    "no-string-literal": false,
+    "no-string-throw": true,
+    "no-switch-case-fall-through": true,
+    "no-trailing-whitespace": true,
+    "no-unnecessary-initializer": true,
+    "no-unused-expression": true,
+    "no-use-before-declare": true,
+    "no-var-keyword": true,
+    "object-literal-sort-keys": false,
+    "one-line": [
+      true,
+      "check-open-brace",
+      "check-catch",
+      "check-else",
+      "check-whitespace"
+    ],
+    "prefer-const": true,
+    "quotemark": [
+      true,
+      "single"
+    ],
+    "radix": true,
+    "semicolon": [
+      true,
+      "always"
+    ],
+    "triple-equals": [
+      true,
+      "allow-null-check"
+    ],
+    "typedef-whitespace": [
+      true,
+      {
+        "call-signature": "nospace",
+        "index-signature": "nospace",
+        "parameter": "nospace",
+        "property-declaration": "nospace",
+        "variable-declaration": "nospace"
+      }
+    ],
+    "typeof-compare": true,
+    "unified-signatures": true,
+    "variable-name": false,
+    "whitespace": [
+      true,
+      "check-branch",
+      "check-decl",
+      "check-operator",
+      "check-separator",
+      "check-type"
+    ],
+    "directive-selector": [
+      true,
+      "attribute",
+      "app",
+      "camelCase"
+    ],
+    "component-selector": [
+      true,
+      "element",
+      "app",
+      "kebab-case"
+    ],
+    "use-input-property-decorator": true,
+    "use-output-property-decorator": true,
+    "use-host-property-decorator": true,
+    "no-input-rename": true,
+    "no-output-rename": true,
+    "use-life-cycle-interface": true,
+    "use-pipe-transform-interface": true,
+    "component-class-suffix": true,
+    "directive-class-suffix": true,
+    "invoke-injectable": true
+  }
+}
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/css/bootstrap-theme.min.css b/asterixdb/asterix-app/src/main/resources/queryui/css/bootstrap-theme.min.css
deleted file mode 100644
index 0d35c4a..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/css/bootstrap-theme.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! Bootstrap v3.3.6 (http://getbootstrap.com) | Copyright 2011-2015 Twitter, Inc. | Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
-/*# sourceMappingURL=bootstrap-theme.min.css.map */
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/css/bootstrap.min.css b/asterixdb/asterix-app/src/main/resources/queryui/css/bootstrap.min.css
deleted file mode 100644
index 4cf729e..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/css/bootstrap.min.css
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
-/*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/css/codemirror.css b/asterixdb/asterix-app/src/main/resources/queryui/css/codemirror.css
deleted file mode 100644
index 04f2561..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/css/codemirror.css
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * Copyright (C) 2016 by Marijn Haverbeke <marijnh@gmail.com> and others
- *
- * 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.
- */
-/* BASICS */
-
-.CodeMirror {
-  /* Set height, width, borders, and global font properties here */
-  font-family: monospace;
-  height: 300px;
-  color: black;
-}
-
-/* PADDING */
-
-.CodeMirror-lines {
-  padding: 4px 0; /* Vertical padding around content */
-}
-.CodeMirror pre {
-  padding: 0 4px; /* Horizontal padding of content */
-}
-
-.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
-  background-color: white; /* The little square between H and V scrollbars */
-}
-
-/* GUTTER */
-
-.CodeMirror-gutters {
-  background-color: #FFF;
-  white-space: nowrap;
-}
-.CodeMirror-linenumbers {}
-.CodeMirror-linenumber {
-  padding: 0 3px 0 5px;
-  min-width: 20px;
-  text-align: right;
-  color: #999;
-  white-space: nowrap;
-}
-
-.CodeMirror-guttermarker { color: black; }
-.CodeMirror-guttermarker-subtle { color: #999; }
-
-/* CURSOR */
-
-.CodeMirror-cursor {
-  border-left: 1px solid black;
-  border-right: none;
-  width: 0;
-}
-/* Shown when moving in bi-directional text */
-.CodeMirror div.CodeMirror-secondarycursor {
-  border-left: 1px solid silver;
-}
-.cm-fat-cursor .CodeMirror-cursor {
-  width: auto;
-  border: 0 !important;
-  background: #7e7;
-}
-.cm-fat-cursor div.CodeMirror-cursors {
-  z-index: 1;
-}
-
-.cm-animate-fat-cursor {
-  width: auto;
-  border: 0;
-  -webkit-animation: blink 1.06s steps(1) infinite;
-  -moz-animation: blink 1.06s steps(1) infinite;
-  animation: blink 1.06s steps(1) infinite;
-  background-color: #7e7;
-}
-@-moz-keyframes blink {
-  0% {}
-  50% { background-color: transparent; }
-  100% {}
-}
-@-webkit-keyframes blink {
-  0% {}
-  50% { background-color: transparent; }
-  100% {}
-}
-@keyframes blink {
-  0% {}
-  50% { background-color: transparent; }
-  100% {}
-}
-
-/* Can style cursor different in overwrite (non-insert) mode */
-.CodeMirror-overwrite .CodeMirror-cursor {}
-
-.cm-tab { display: inline-block; text-decoration: inherit; }
-
-.CodeMirror-ruler {
-  border-left: 1px solid #ccc;
-  position: absolute;
-}
-
-/* DEFAULT THEME */
-
-.cm-s-default .cm-header {color: blue;}
-.cm-s-default .cm-quote {color: #090;}
-.cm-negative {color: #d44;}
-.cm-positive {color: #292;}
-.cm-header, .cm-strong {font-weight: bold;}
-.cm-em {font-style: italic;}
-.cm-link {text-decoration: underline;}
-.cm-strikethrough {text-decoration: line-through;}
-
-.cm-s-default .cm-keyword {color: #708;}
-.cm-s-default .cm-atom {color: #219;}
-.cm-s-default .cm-number {color: #164;}
-.cm-s-default .cm-def {color: #00f;}
-.cm-s-default .cm-variable,
-.cm-s-default .cm-punctuation,
-.cm-s-default .cm-property,
-.cm-s-default .cm-operator {}
-.cm-s-default .cm-variable-2 {color: #05a;}
-.cm-s-default .cm-variable-3 {color: #085;}
-.cm-s-default .cm-comment {color: #a50;}
-.cm-s-default .cm-string {color: #a11;}
-.cm-s-default .cm-string-2 {color: #f50;}
-.cm-s-default .cm-meta {color: #555;}
-.cm-s-default .cm-qualifier {color: #555;}
-.cm-s-default .cm-builtin {color: #30a;}
-.cm-s-default .cm-bracket {color: #997;}
-.cm-s-default .cm-tag {color: #170;}
-.cm-s-default .cm-attribute {color: #00c;}
-.cm-s-default .cm-hr {color: #999;}
-.cm-s-default .cm-link {color: #00c;}
-
-.cm-s-default .cm-error {color: #f00;}
-.cm-invalidchar {color: #f00;}
-
-.CodeMirror-composing { border-bottom: 2px solid; }
-
-/* Default styles for common addons */
-
-div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
-div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
-.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
-.CodeMirror-activeline-background {background: #e8f2ff;}
-
-/* STOP */
-
-/* The rest of this file contains styles related to the mechanics of
-   the editor. You probably shouldn't touch them. */
-
-.CodeMirror {
-  position: relative;
-  overflow: hidden;
-  background: white;
-}
-
-.CodeMirror-scroll {
-  overflow: scroll !important; /* Things will break if this is overridden */
-  /* 30px is the magic margin used to hide the element's real scrollbars */
-  /* See overflow: hidden in .CodeMirror */
-  margin-bottom: -30px; margin-right: -30px;
-  padding-bottom: 30px;
-  height: 100%;
-  outline: none; /* Prevent dragging from highlighting the element */
-  position: relative;
-}
-.CodeMirror-sizer {
-  position: relative;
-  border-right: 30px solid transparent;
-}
-
-/* The fake, visible scrollbars. Used to force redraw during scrolling
-   before actual scrolling happens, thus preventing shaking and
-   flickering artifacts. */
-.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
-  position: absolute;
-  z-index: 6;
-  display: none;
-}
-.CodeMirror-vscrollbar {
-  right: 0; top: 0;
-  overflow-x: hidden;
-  overflow-y: scroll;
-}
-.CodeMirror-hscrollbar {
-  bottom: 0; left: 0;
-  overflow-y: hidden;
-  overflow-x: scroll;
-}
-.CodeMirror-scrollbar-filler {
-  right: 0; bottom: 0;
-}
-.CodeMirror-gutter-filler {
-  left: 0; bottom: 0;
-}
-
-.CodeMirror-gutters {
-  position: absolute; left: 0; top: 0;
-  min-height: 100%;
-  z-index: 3;
-}
-.CodeMirror-gutter {
-  white-space: normal;
-  height: 100%;
-  display: inline-block;
-  vertical-align: top;
-  margin-bottom: -30px;
-  /* Hack to make IE7 behave */
-  *zoom:1;
-  *display:inline;
-}
-.CodeMirror-gutter-wrapper {
-  position: absolute;
-  z-index: 4;
-  background: none !important;
-  border: none !important;
-}
-.CodeMirror-gutter-background {
-  position: absolute;
-  top: 0; bottom: 0;
-  z-index: 4;
-}
-.CodeMirror-gutter-elt {
-  position: absolute;
-  cursor: default;
-  z-index: 4;
-}
-.CodeMirror-gutter-wrapper {
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  user-select: none;
-}
-
-.CodeMirror-lines {
-  cursor: text;
-  min-height: 1px; /* prevents collapsing before first draw */
-}
-.CodeMirror pre {
-  /* Reset some styles that the rest of the page might have set */
-  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
-  border-width: 0;
-  background: transparent;
-  font-family: inherit;
-  font-size: inherit;
-  margin: 0;
-  white-space: pre;
-  word-wrap: normal;
-  line-height: inherit;
-  color: inherit;
-  z-index: 2;
-  position: relative;
-  overflow: visible;
-  -webkit-tap-highlight-color: transparent;
-  -webkit-font-variant-ligatures: none;
-  font-variant-ligatures: none;
-}
-.CodeMirror-wrap pre {
-  word-wrap: break-word;
-  white-space: pre-wrap;
-  word-break: normal;
-}
-
-.CodeMirror-linebackground {
-  position: absolute;
-  left: 0; right: 0; top: 0; bottom: 0;
-  z-index: 0;
-}
-
-.CodeMirror-linewidget {
-  position: relative;
-  z-index: 2;
-  overflow: auto;
-}
-
-.CodeMirror-widget {}
-
-.CodeMirror-code {
-  outline: none;
-}
-
-/* Force content-box sizing for the elements where we expect it */
-.CodeMirror-scroll,
-.CodeMirror-sizer,
-.CodeMirror-gutter,
-.CodeMirror-gutters,
-.CodeMirror-linenumber {
-  -moz-box-sizing: content-box;
-  box-sizing: content-box;
-}
-
-.CodeMirror-measure {
-  position: absolute;
-  width: 100%;
-  height: 0;
-  overflow: hidden;
-  visibility: hidden;
-}
-
-.CodeMirror-cursor { position: absolute; }
-.CodeMirror-measure pre { position: static; }
-
-div.CodeMirror-cursors {
-  visibility: hidden;
-  position: relative;
-  z-index: 3;
-}
-div.CodeMirror-dragcursors {
-  visibility: visible;
-}
-
-.CodeMirror-focused div.CodeMirror-cursors {
-  visibility: visible;
-}
-
-.CodeMirror-selected { background: #d9d9d9; }
-.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
-.CodeMirror-crosshair { cursor: crosshair; }
-.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
-.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }
-
-.cm-searching {
-  background: #ffa;
-  background: rgba(255, 255, 0, .4);
-}
-
-/* IE7 hack to prevent it from returning funny offsetTops on the spans */
-.CodeMirror span { *vertical-align: text-bottom; }
-
-/* Used to force a border model for a node */
-.cm-force-border { padding-right: .1px; }
-
-@media print {
-  /* Hide the cursor when printing */
-  .CodeMirror div.CodeMirror-cursors {
-    visibility: hidden;
-  }
-}
-
-/* See issue #2901 */
-.cm-tab-wrap-hack:after { content: ''; }
-
-/* Help users use markselection to safely style text background */
-span.CodeMirror-selectedtext { background: none; }
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/css/json-formatter.min.css b/asterixdb/asterix-app/src/main/resources/queryui/css/json-formatter.min.css
deleted file mode 100644
index 4e69a40..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/css/json-formatter.min.css
+++ /dev/null
@@ -1 +0,0 @@
-/*! jsonformatter 0.6.0 - 2016-04-29T03:24:40.680Z | (c) 2014 Mohsen Azimi | http://www.apache.org/licenses/LICENSE-2.0 */.json-formatter-dark.json-formatter-row,.json-formatter-row{font-family:monospace}.json-formatter-dark.json-formatter-row .toggler.open:after,.json-formatter-row .toggler.open:after{transform:rotate(90deg)}.json-formatter-row,.json-formatter-row a,.json-formatter-row a:hover{color:#000;text-decoration:none}.json-formatter-row .json-formatter-row{margin-left:1em}.json-formatter-row .children.empty{opacity:.5;margin-left:1em}.json-formatter-row .children.empty.object:after{content:"No properties"}.json-formatter-row .children.empty.array:after{content:"[]"}.json-formatter-row .string{color:green;white-space:pre;word-wrap:break-word}.json-formatter-row .number{color:#00f}.json-formatter-row .boolean{color:red}.json-formatter-row .null{color:#855A00}.json-formatter-row .undefined{color:#ca0b69}.json-formatter-row .function{color:#FF20ED}.json-formatter-row .date{background-color:rgba(0,0,0,.05)}.json-formatter-row .url{text-decoration:underline;color:#00f;cursor:pointer}.json-formatter-row .bracket{color:#00f}.json-formatter-row .key{color:#00008B;cursor:pointer}.json-formatter-row .constructor-name{cursor:pointer}.json-formatter-row .toggler{font-size:.8em;line-height:1.2em;vertical-align:middle;opacity:.6;cursor:pointer}.json-formatter-row .toggler:after{display:inline-block;transition:transform .1s ease-in;content:"►"}.json-formatter-row>a>.thumbnail-text{opacity:0;transition:opacity .15s ease-in;font-style:italic}.json-formatter-row:hover>a>.thumbnail-text{opacity:.6}.json-formatter-dark.json-formatter-row,.json-formatter-dark.json-formatter-row a,.json-formatter-dark.json-formatter-row a:hover{color:#fff;text-decoration:none}.json-formatter-dark.json-formatter-row .json-formatter-row{margin-left:1em}.json-formatter-dark.json-formatter-row .children.empty{opacity:.5;margin-left:1em}.json-formatter-dark.json-formatter-row .children.empty.object:after{content:"No properties"}.json-formatter-dark.json-formatter-row .children.empty.array:after{content:"[]"}.json-formatter-dark.json-formatter-row .string{color:#31F031;white-space:pre;word-wrap:break-word}.json-formatter-dark.json-formatter-row .number{color:#66C2FF}.json-formatter-dark.json-formatter-row .boolean{color:#EC4242}.json-formatter-dark.json-formatter-row .null{color:#EEC97D}.json-formatter-dark.json-formatter-row .undefined{color:#ef8fbe}.json-formatter-dark.json-formatter-row .function{color:#FD48CB}.json-formatter-dark.json-formatter-row .date{background-color:rgba(255,255,255,.05)}.json-formatter-dark.json-formatter-row .url{text-decoration:underline;color:#027BFF;cursor:pointer}.json-formatter-dark.json-formatter-row .bracket{color:#9494FF}.json-formatter-dark.json-formatter-row .key{color:#23A0DB;cursor:pointer}.json-formatter-dark.json-formatter-row .constructor-name{cursor:pointer}.json-formatter-dark.json-formatter-row .toggler{font-size:.8em;line-height:1.2em;vertical-align:middle;opacity:.6;cursor:pointer}.json-formatter-dark.json-formatter-row .toggler:after{display:inline-block;transition:transform .1s ease-in;content:"►"}.json-formatter-dark.json-formatter-row>a>.thumbnail-text{opacity:0;transition:opacity .15s ease-in;font-style:italic}.json-formatter-dark.json-formatter-row:hover>a>.thumbnail-text{opacity:.6}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/css/master.css b/asterixdb/asterix-app/src/main/resources/queryui/css/master.css
deleted file mode 100644
index d174e9d..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/css/master.css
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-html,body{
-  height:100%;
-  padding: 0px;
-  margin: 0px;
-  overflow: hidden;
-}
-.main-container {
-  height:100%;
-  overflow-x:hidden;
-}
-
-.left-container{
-  transition:width .3s ease-out;
-  height:100%;
-  padding: 25px;
-  padding-left : 35px;
-  background-color: #ffffff;
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-.right-container{
-  transition:width .3s ease-out;
-  height:100%;
-  padding: 25px;
-  padding-left: 50px !important;
-  padding-right: 50px !important;
-  background-color: #fafafa;
-  background: linear-gradient(to right, #e9e9e9, #fafafa 3%);
-  overflow-y: scroll;
-}
-
-.right-toolbar{
-  margin-top: 20px;
-  margin-bottom: 20px;
-}
-
-.left-using-container{
-  margin-top: 5vh;
-}
-
-.asterix-nav{
-  box-shadow: 0 0px 5px 0 rgba(0, 0, 0, 0.2), 0 0px 20px 0 rgba(0, 0, 0, 0.19);
-  border-bottom: 1px solid #5687e4;
-}
-
-.asterix-nav > li{
-  background-color: #FFF;
-}
-
-.asterix-nav > li > a{
-  color: #cacaca;
-}
-
-.asterix-nav > li:first-child{
-  border-top-left-radius: 5px !important;
-}
-
-.asterix-nav > li:last-child{
-  border-top-right-radius: 5px !important;
-}
-
-.asterix-nav > li > a:hover, a:focus{
-  color: #000 !important;
-  background-color: inherit !important;
-  border-top-left-radius: inherit !important;
-  border-top-right-radius: inherit !important;
-  transition: 500ms;
-}
-
-.asterix-tabpage {
-  background-color: #FFF;
-  box-shadow: 0 0px 5px 0 rgba(0, 0, 0, 0.2), 0 0px 20px 0 rgba(0, 0, 0, 0.19);
-  padding : 15px;
-}
-
-.asterix-tabpage-scroll{
-  height: 45vh;
-  overflow-y: scroll;
-  overflow-x:hidden;
-  margin-bottom: 15px;
-  padding-right: 10px;
-}
-
-.asterix-nav-active {
-  background-color: #5687e4 !important;
-  color: #FFF !important;
-}
-
-.asterix-nav-active > a{
-  color: #FFF !important;
-}
-
-.input-container{
-  padding-top: 30px;
-}
-
-.input-container-code{
-  border: none !important;
-  box-shadow: none !important;
-  resize: none;
-  overflow-y : auto;
-}
-
-.logo {
-  width: 15vh;
-}
-
-.logo-collapsed{
-  width : 90%;
-  max-width : 15vh;
-  transition: .8s ease;
-}
-
-.icon-maximize{
-  text-align: right;
-  margin-top:15px;
-}
-
-.asterix-button{
-  cursor: pointer;
-  font-size: 1.4em;
-  text-decoration: none;
-  color: #AAA;
-  margin-right: 8px;
-}
-
-.asterix-button-selected{
-  color: #5687e4;
-}
-
-.asterix-button:only-of-type{
-  margin-right: 0px;
-}
-
-.asterix-button:hover{
-  color: #DDD;
-  transition-duration: 200ms;
-}
-
-.asterix-status{
-  color: #d7d0cb;
-  font-size: 1.3em;
-  text-emphasis: none;
-}
-
-.asterix-small{
-  color: #d7d0cb !important;
-  display: inline-block;
-  margin-right: 0.5em;
-  margin-top: 0px;
-  margin-bottom: 0px;
-}
-
-.asterix-nested{
-  color: #f5bd5b !important;
-}
-
-.asterix-inline-item{
-  padding: 0px;
-  margin: 0px;
-  text-decoration: none;
-  color: #000;
-}
-
-.asterix-list-view{
-  background-color: #FFF;
-}
-
-.asterix-list-wells{
-  width: 100%;
-  overflow: hidden;
-  padding: 10px;
-  background-color: #EEE;
-  display: flex;
-  flex-wrap: wrap;
-}
-
-.asterix-well{
-  background-color: #FFF;
-  padding: 10px;
-  border: 2px solid #d7d0cb;
-  border-radius: 5px;
-}
-
-.flex-well{
-  flex : 1 1 auto;
-  flex-basis: 1;
-  margin: 10px;
-}
-
-.margin-bottom{
-  margin-bottom: 10px;
-}
-
-.asterix-well:hover{
-  background-color: #f6f6f6;
-  transition: 200ms;
-}
-
-.asterix-well-right{
-  text-align: right;
-}
-
-.asterix-well-row{
-  margin-bottom: 10px;
-}
-
-.asterix-table {
-  border-bottom: 3px solid #EEE;
-  border-left: 3px solid #EEE;
-  border-right: 3px solid #EEE;
-}
-.asterix-table tr{
-  border-top: 3px solid #EEE !important;
-}
-
-.btn-asterix {
-  background-color: #5687e4;
-  color: #FFF;
-  padding-top: 5px;
-  padding-bottom: 5px;
-  width: 30%;
-  box-shadow: 0 0px 5px 0 rgba(0, 0, 0, 0.2), 0 0px 20px 0 rgba(0, 0, 0, 0.19);
-}
-
-.vh-spacer{
-  margin-top: 35px;
-}
-
-::-webkit-scrollbar {
-    width: 12px;
-}
-::-webkit-scrollbar-track {
-    background-color: #EEE;
-}
-::-webkit-scrollbar-thumb {
-    background-color: #CCC;
-}
-::-webkit-scrollbar-thumb:hover {
-    background-color: #AAA;
-}
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/fonts/glyphicons-halflings-regular.eot b/asterixdb/asterix-app/src/main/resources/queryui/fonts/glyphicons-halflings-regular.eot
deleted file mode 100644
index b93a495..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/fonts/glyphicons-halflings-regular.eot
+++ /dev/null
Binary files differ
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/fonts/glyphicons-halflings-regular.svg b/asterixdb/asterix-app/src/main/resources/queryui/fonts/glyphicons-halflings-regular.svg
deleted file mode 100644
index 94fb549..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/fonts/glyphicons-halflings-regular.svg
+++ /dev/null
@@ -1,288 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
-<font-face units-per-em="1200" ascent="960" descent="-240" />
-<missing-glyph horiz-adv-x="500" />
-<glyph horiz-adv-x="0" />
-<glyph horiz-adv-x="400" />
-<glyph unicode=" " />
-<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
-<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xa0;" />
-<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
-<glyph unicode="&#x2000;" horiz-adv-x="650" />
-<glyph unicode="&#x2001;" horiz-adv-x="1300" />
-<glyph unicode="&#x2002;" horiz-adv-x="650" />
-<glyph unicode="&#x2003;" horiz-adv-x="1300" />
-<glyph unicode="&#x2004;" horiz-adv-x="433" />
-<glyph unicode="&#x2005;" horiz-adv-x="325" />
-<glyph unicode="&#x2006;" horiz-adv-x="216" />
-<glyph unicode="&#x2007;" horiz-adv-x="216" />
-<glyph unicode="&#x2008;" horiz-adv-x="162" />
-<glyph unicode="&#x2009;" horiz-adv-x="260" />
-<glyph unicode="&#x200a;" horiz-adv-x="72" />
-<glyph unicode="&#x202f;" horiz-adv-x="260" />
-<glyph unicode="&#x205f;" horiz-adv-x="325" />
-<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
-<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
-<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
-<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
-<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
-<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
-<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
-<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
-<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
-<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
-<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
-<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
-<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
-<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
-<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
-<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
-<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
-<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
-<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
-<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
-<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
-<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
-<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
-<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
-<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
-<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
-<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
-<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
-<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
-<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
-<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
-<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
-<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
-<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
-<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
-<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
-<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
-<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
-<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
-<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
-<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
-<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
-<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
-<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
-<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
-<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
-<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
-<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
-<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
-<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
-<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
-<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
-<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
-<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
-<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
-<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
-<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
-<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
-<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
-<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
-<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
-<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
-<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
-<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
-<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
-<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
-<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
-<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
-<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
-<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
-<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
-<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
-<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
-<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
-<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
-<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
-<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
-<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
-<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
-<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
-<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
-<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
-<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
-<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
-<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
-<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
-<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
-<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
-<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
-<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
-<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
-<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
-<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
-<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
-<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
-<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
-<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
-<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
-<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
-<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
-<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
-<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
-<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
-<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
-<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
-<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
-<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
-<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
-<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
-<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
-<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
-<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
-<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
-<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
-<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
-<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
-<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
-<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
-<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
-<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
-<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
-<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
-<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
-<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
-<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
-<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
-<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
-<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
-<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
-<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
-<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
-<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
-<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
-<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
-<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
-<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
-<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
-<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
-<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
-<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
-<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
-<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
-<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
-<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
-<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
-<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
-<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
-<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
-<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
-<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
-<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
-<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
-<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
-<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
-<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
-<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
-<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
-<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
-<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
-<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
-<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
-<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
-<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
-<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
-<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
-<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
-<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
-<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
-<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
-<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
-<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
-<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
-<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
-<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
-<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
-<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
-<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
-<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
-<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
-<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
-<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
-<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
-<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
-<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
-<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
-<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
-<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
-<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
-<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
-<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
-<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
-<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
-<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
-<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
-<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
-<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
-<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
-<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
-<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
-<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
-<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
-<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/fonts/glyphicons-halflings-regular.ttf b/asterixdb/asterix-app/src/main/resources/queryui/fonts/glyphicons-halflings-regular.ttf
deleted file mode 100644
index 1413fc6..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/fonts/glyphicons-halflings-regular.ttf
+++ /dev/null
Binary files differ
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/fonts/glyphicons-halflings-regular.woff b/asterixdb/asterix-app/src/main/resources/queryui/fonts/glyphicons-halflings-regular.woff
deleted file mode 100644
index 9e61285..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/fonts/glyphicons-halflings-regular.woff
+++ /dev/null
Binary files differ
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/fonts/glyphicons-halflings-regular.woff2 b/asterixdb/asterix-app/src/main/resources/queryui/fonts/glyphicons-halflings-regular.woff2
deleted file mode 100644
index 64539b5..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/fonts/glyphicons-halflings-regular.woff2
+++ /dev/null
Binary files differ
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/img/asterixlogo-collapsed.png b/asterixdb/asterix-app/src/main/resources/queryui/img/asterixlogo-collapsed.png
deleted file mode 100644
index aa9d127..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/img/asterixlogo-collapsed.png
+++ /dev/null
Binary files differ
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/img/finalasterixlogo.png b/asterixdb/asterix-app/src/main/resources/queryui/img/finalasterixlogo.png
deleted file mode 100644
index 10ce431..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/img/finalasterixlogo.png
+++ /dev/null
Binary files differ
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/js/angular.min.js b/asterixdb/asterix-app/src/main/resources/queryui/js/angular.min.js
deleted file mode 100644
index 734260c..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/js/angular.min.js
+++ /dev/null
@@ -1,310 +0,0 @@
-/* AngularJS v1.5.5 http://angularjs.org | (c) 2010-2016 Google, Inc. | License: MIT */
-(function(v){'use strict';function O(a){return function(){var b=arguments[0],d;d="["+(a?a+":":"")+b+"] http://errors.angularjs.org/1.5.5/"+(a?a+"/":"")+b;for(b=1;b<arguments.length;b++){d=d+(1==b?"?":"&")+"p"+(b-1)+"=";var c=encodeURIComponent,e;e=arguments[b];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;d+=c(e)}return Error(d)}}function ya(a){if(null==a||Va(a))return!1;if(K(a)||F(a)||B&&a instanceof B)return!0;
-var b="length"in Object(a)&&a.length;return Q(b)&&(0<=b&&(b-1 in a||a instanceof Array)||"function"==typeof a.item)}function q(a,b,d){var c,e;if(a)if(E(a))for(c in a)"prototype"==c||"length"==c||"name"==c||a.hasOwnProperty&&!a.hasOwnProperty(c)||b.call(d,a[c],c,a);else if(K(a)||ya(a)){var f="object"!==typeof a;c=0;for(e=a.length;c<e;c++)(f||c in a)&&b.call(d,a[c],c,a)}else if(a.forEach&&a.forEach!==q)a.forEach(b,d,a);else if(oc(a))for(c in a)b.call(d,a[c],c,a);else if("function"===typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&&
-b.call(d,a[c],c,a);else for(c in a)ua.call(a,c)&&b.call(d,a[c],c,a);return a}function pc(a,b,d){for(var c=Object.keys(a).sort(),e=0;e<c.length;e++)b.call(d,a[c[e]],c[e]);return c}function qc(a){return function(b,d){a(d,b)}}function Xd(){return++nb}function Nb(a,b,d){for(var c=a.$$hashKey,e=0,f=b.length;e<f;++e){var g=b[e];if(G(g)||E(g))for(var h=Object.keys(g),k=0,l=h.length;k<l;k++){var n=h[k],m=g[n];d&&G(m)?fa(m)?a[n]=new Date(m.valueOf()):Wa(m)?a[n]=new RegExp(m):m.nodeName?a[n]=m.cloneNode(!0):
-Ob(m)?a[n]=m.clone():(G(a[n])||(a[n]=K(m)?[]:{}),Nb(a[n],[m],!0)):a[n]=m}}c?a.$$hashKey=c:delete a.$$hashKey;return a}function R(a){return Nb(a,za.call(arguments,1),!1)}function Yd(a){return Nb(a,za.call(arguments,1),!0)}function X(a){return parseInt(a,10)}function Pb(a,b){return R(Object.create(a),b)}function C(){}function Xa(a){return a}function da(a){return function(){return a}}function rc(a){return E(a.toString)&&a.toString!==ma}function y(a){return"undefined"===typeof a}function x(a){return"undefined"!==
-typeof a}function G(a){return null!==a&&"object"===typeof a}function oc(a){return null!==a&&"object"===typeof a&&!sc(a)}function F(a){return"string"===typeof a}function Q(a){return"number"===typeof a}function fa(a){return"[object Date]"===ma.call(a)}function E(a){return"function"===typeof a}function Wa(a){return"[object RegExp]"===ma.call(a)}function Va(a){return a&&a.window===a}function Ya(a){return a&&a.$evalAsync&&a.$watch}function Da(a){return"boolean"===typeof a}function Zd(a){return a&&Q(a.length)&&
-$d.test(ma.call(a))}function Ob(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function ae(a){var b={};a=a.split(",");var d;for(d=0;d<a.length;d++)b[a[d]]=!0;return b}function va(a){return P(a.nodeName||a[0]&&a[0].nodeName)}function Za(a,b){var d=a.indexOf(b);0<=d&&a.splice(d,1);return d}function qa(a,b){function d(a,b){var d=b.$$hashKey,e;if(K(a)){e=0;for(var f=a.length;e<f;e++)b.push(c(a[e]))}else if(oc(a))for(e in a)b[e]=c(a[e]);else if(a&&"function"===typeof a.hasOwnProperty)for(e in a)a.hasOwnProperty(e)&&
-(b[e]=c(a[e]));else for(e in a)ua.call(a,e)&&(b[e]=c(a[e]));d?b.$$hashKey=d:delete b.$$hashKey;return b}function c(a){if(!G(a))return a;var b=f.indexOf(a);if(-1!==b)return g[b];if(Va(a)||Ya(a))throw Aa("cpws");var b=!1,c=e(a);void 0===c&&(c=K(a)?[]:Object.create(sc(a)),b=!0);f.push(a);g.push(c);return b?d(a,c):c}function e(a){switch(ma.call(a)){case "[object Int8Array]":case "[object Int16Array]":case "[object Int32Array]":case "[object Float32Array]":case "[object Float64Array]":case "[object Uint8Array]":case "[object Uint8ClampedArray]":case "[object Uint16Array]":case "[object Uint32Array]":return new a.constructor(c(a.buffer));
-case "[object ArrayBuffer]":if(!a.slice){var b=new ArrayBuffer(a.byteLength);(new Uint8Array(b)).set(new Uint8Array(a));return b}return a.slice(0);case "[object Boolean]":case "[object Number]":case "[object String]":case "[object Date]":return new a.constructor(a.valueOf());case "[object RegExp]":return b=new RegExp(a.source,a.toString().match(/[^\/]*$/)[0]),b.lastIndex=a.lastIndex,b;case "[object Blob]":return new a.constructor([a],{type:a.type})}if(E(a.cloneNode))return a.cloneNode(!0)}var f=[],
-g=[];if(b){if(Zd(b)||"[object ArrayBuffer]"===ma.call(b))throw Aa("cpta");if(a===b)throw Aa("cpi");K(b)?b.length=0:q(b,function(a,d){"$$hashKey"!==d&&delete b[d]});f.push(a);g.push(b);return d(a,b)}return c(a)}function ha(a,b){if(K(a)){b=b||[];for(var d=0,c=a.length;d<c;d++)b[d]=a[d]}else if(G(a))for(d in b=b||{},a)if("$"!==d.charAt(0)||"$"!==d.charAt(1))b[d]=a[d];return b||a}function pa(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var d=typeof a,c;if(d==typeof b&&
-"object"==d)if(K(a)){if(!K(b))return!1;if((d=a.length)==b.length){for(c=0;c<d;c++)if(!pa(a[c],b[c]))return!1;return!0}}else{if(fa(a))return fa(b)?pa(a.getTime(),b.getTime()):!1;if(Wa(a))return Wa(b)?a.toString()==b.toString():!1;if(Ya(a)||Ya(b)||Va(a)||Va(b)||K(b)||fa(b)||Wa(b))return!1;d=T();for(c in a)if("$"!==c.charAt(0)&&!E(a[c])){if(!pa(a[c],b[c]))return!1;d[c]=!0}for(c in b)if(!(c in d)&&"$"!==c.charAt(0)&&x(b[c])&&!E(b[c]))return!1;return!0}return!1}function $a(a,b,d){return a.concat(za.call(b,
-d))}function tc(a,b){var d=2<arguments.length?za.call(arguments,2):[];return!E(b)||b instanceof RegExp?b:d.length?function(){return arguments.length?b.apply(a,$a(d,arguments,0)):b.apply(a,d)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function be(a,b){var d=b;"string"===typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?d=void 0:Va(b)?d="$WINDOW":b&&v.document===b?d="$DOCUMENT":Ya(b)&&(d="$SCOPE");return d}function ab(a,b){if(!y(a))return Q(b)||(b=b?2:null),JSON.stringify(a,be,
-b)}function uc(a){return F(a)?JSON.parse(a):a}function vc(a,b){a=a.replace(ce,"");var d=Date.parse("Jan 01, 1970 00:00:00 "+a)/6E4;return isNaN(d)?b:d}function Qb(a,b,d){d=d?-1:1;var c=a.getTimezoneOffset();b=vc(b,c);d*=b-c;a=new Date(a.getTime());a.setMinutes(a.getMinutes()+d);return a}function wa(a){a=B(a).clone();try{a.empty()}catch(b){}var d=B("<div>").append(a).html();try{return a[0].nodeType===Ma?P(d):d.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+P(b)})}catch(c){return P(d)}}
-function wc(a){try{return decodeURIComponent(a)}catch(b){}}function xc(a){var b={};q((a||"").split("&"),function(a){var c,e,f;a&&(e=a=a.replace(/\+/g,"%20"),c=a.indexOf("="),-1!==c&&(e=a.substring(0,c),f=a.substring(c+1)),e=wc(e),x(e)&&(f=x(f)?wc(f):!0,ua.call(b,e)?K(b[e])?b[e].push(f):b[e]=[b[e],f]:b[e]=f))});return b}function Rb(a){var b=[];q(a,function(a,c){K(a)?q(a,function(a){b.push(ja(c,!0)+(!0===a?"":"="+ja(a,!0)))}):b.push(ja(c,!0)+(!0===a?"":"="+ja(a,!0)))});return b.length?b.join("&"):""}
-function ob(a){return ja(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ja(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function de(a,b){var d,c,e=Na.length;for(c=0;c<e;++c)if(d=Na[c]+b,F(d=a.getAttribute(d)))return d;return null}function ee(a,b){var d,c,e={};q(Na,function(b){b+="app";!d&&a.hasAttribute&&a.hasAttribute(b)&&(d=a,c=a.getAttribute(b))});
-q(Na,function(b){b+="app";var e;!d&&(e=a.querySelector("["+b.replace(":","\\:")+"]"))&&(d=e,c=e.getAttribute(b))});d&&(e.strictDi=null!==de(d,"strict-di"),b(d,c?[c]:[],e))}function yc(a,b,d){G(d)||(d={});d=R({strictDi:!1},d);var c=function(){a=B(a);if(a.injector()){var c=a[0]===v.document?"document":wa(a);throw Aa("btstrpd",c.replace(/</,"&lt;").replace(/>/,"&gt;"));}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);d.debugInfoEnabled&&b.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);
-b.unshift("ng");c=bb(b,d.strictDi);c.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;v&&e.test(v.name)&&(d.debugInfoEnabled=!0,v.name=v.name.replace(e,""));if(v&&!f.test(v.name))return c();v.name=v.name.replace(f,"");ea.resumeBootstrap=function(a){q(a,function(a){b.push(a)});return c()};E(ea.resumeDeferredBootstrap)&&ea.resumeDeferredBootstrap()}function fe(){v.name=
-"NG_ENABLE_DEBUG_INFO!"+v.name;v.location.reload()}function ge(a){a=ea.element(a).injector();if(!a)throw Aa("test");return a.get("$$testability")}function zc(a,b){b=b||"_";return a.replace(he,function(a,c){return(c?b:"")+a.toLowerCase()})}function ie(){var a;if(!Ac){var b=pb();(Z=y(b)?v.jQuery:b?v[b]:void 0)&&Z.fn.on?(B=Z,R(Z.fn,{scope:Oa.scope,isolateScope:Oa.isolateScope,controller:Oa.controller,injector:Oa.injector,inheritedData:Oa.inheritedData}),a=Z.cleanData,Z.cleanData=function(b){for(var c,
-e=0,f;null!=(f=b[e]);e++)(c=Z._data(f,"events"))&&c.$destroy&&Z(f).triggerHandler("$destroy");a(b)}):B=U;ea.element=B;Ac=!0}}function qb(a,b,d){if(!a)throw Aa("areq",b||"?",d||"required");return a}function Pa(a,b,d){d&&K(a)&&(a=a[a.length-1]);qb(E(a),b,"not a function, got "+(a&&"object"===typeof a?a.constructor.name||"Object":typeof a));return a}function Qa(a,b){if("hasOwnProperty"===a)throw Aa("badname",b);}function Bc(a,b,d){if(!b)return a;b=b.split(".");for(var c,e=a,f=b.length,g=0;g<f;g++)c=
-b[g],a&&(a=(e=a)[c]);return!d&&E(a)?tc(e,a):a}function rb(a){for(var b=a[0],d=a[a.length-1],c,e=1;b!==d&&(b=b.nextSibling);e++)if(c||a[e]!==b)c||(c=B(za.call(a,0,e))),c.push(b);return c||a}function T(){return Object.create(null)}function je(a){function b(a,b,c){return a[b]||(a[b]=c())}var d=O("$injector"),c=O("ng");a=b(a,"angular",Object);a.$$minErr=a.$$minErr||O;return b(a,"module",function(){var a={};return function(f,g,h){if("hasOwnProperty"===f)throw c("badname","module");g&&a.hasOwnProperty(f)&&
-(a[f]=null);return b(a,f,function(){function a(b,d,e,f){f||(f=c);return function(){f[e||"push"]([b,d,arguments]);return M}}function b(a,d){return function(b,e){e&&E(e)&&(e.$$moduleName=f);c.push([a,d,arguments]);return M}}if(!g)throw d("nomod",f);var c=[],e=[],r=[],N=a("$injector","invoke","push",e),M={_invokeQueue:c,_configBlocks:e,_runBlocks:r,requires:g,name:f,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide",
-"constant","unshift"),decorator:b("$provide","decorator"),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),component:b("$compileProvider","component"),config:N,run:function(a){r.push(a);return this}};h&&N(h);return M})}})}function ke(a){R(a,{bootstrap:yc,copy:qa,extend:R,merge:Yd,equals:pa,element:B,forEach:q,injector:bb,noop:C,bind:tc,toJson:ab,fromJson:uc,identity:Xa,isUndefined:y,
-isDefined:x,isString:F,isFunction:E,isObject:G,isNumber:Q,isElement:Ob,isArray:K,version:le,isDate:fa,lowercase:P,uppercase:sb,callbacks:{counter:0},getTestability:ge,$$minErr:O,$$csp:Ea,reloadWithDebugInfo:fe});Sb=je(v);Sb("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:me});a.provider("$compile",Cc).directive({a:ne,input:Dc,textarea:Dc,form:oe,script:pe,select:qe,style:re,option:se,ngBind:te,ngBindHtml:ue,ngBindTemplate:ve,ngClass:we,ngClassEven:xe,ngClassOdd:ye,ngCloak:ze,ngController:Ae,
-ngForm:Be,ngHide:Ce,ngIf:De,ngInclude:Ee,ngInit:Fe,ngNonBindable:Ge,ngPluralize:He,ngRepeat:Ie,ngShow:Je,ngStyle:Ke,ngSwitch:Le,ngSwitchWhen:Me,ngSwitchDefault:Ne,ngOptions:Oe,ngTransclude:Pe,ngModel:Qe,ngList:Re,ngChange:Se,pattern:Ec,ngPattern:Ec,required:Fc,ngRequired:Fc,minlength:Gc,ngMinlength:Gc,maxlength:Hc,ngMaxlength:Hc,ngValue:Te,ngModelOptions:Ue}).directive({ngInclude:Ve}).directive(tb).directive(Ic);a.provider({$anchorScroll:We,$animate:Xe,$animateCss:Ye,$$animateJs:Ze,$$animateQueue:$e,
-$$AnimateRunner:af,$$animateAsyncRun:bf,$browser:cf,$cacheFactory:df,$controller:ef,$document:ff,$exceptionHandler:gf,$filter:Jc,$$forceReflow:hf,$interpolate:jf,$interval:kf,$http:lf,$httpParamSerializer:mf,$httpParamSerializerJQLike:nf,$httpBackend:of,$xhrFactory:pf,$location:qf,$log:rf,$parse:sf,$rootScope:tf,$q:uf,$$q:vf,$sce:wf,$sceDelegate:xf,$sniffer:yf,$templateCache:zf,$templateRequest:Af,$$testability:Bf,$timeout:Cf,$window:Df,$$rAF:Ef,$$jqLite:Ff,$$HashMap:Gf,$$cookieReader:Hf})}])}function cb(a){return a.replace(If,
-function(a,d,c,e){return e?c.toUpperCase():c}).replace(Jf,"Moz$1")}function Kc(a){a=a.nodeType;return 1===a||!a||9===a}function Lc(a,b){var d,c,e=b.createDocumentFragment(),f=[];if(Tb.test(a)){d=d||e.appendChild(b.createElement("div"));c=(Kf.exec(a)||["",""])[1].toLowerCase();c=ia[c]||ia._default;d.innerHTML=c[1]+a.replace(Lf,"<$1></$2>")+c[2];for(c=c[0];c--;)d=d.lastChild;f=$a(f,d.childNodes);d=e.firstChild;d.textContent=""}else f.push(b.createTextNode(a));e.textContent="";e.innerHTML="";q(f,function(a){e.appendChild(a)});
-return e}function Mc(a,b){var d=a.parentNode;d&&d.replaceChild(b,a);b.appendChild(a)}function U(a){if(a instanceof U)return a;var b;F(a)&&(a=V(a),b=!0);if(!(this instanceof U)){if(b&&"<"!=a.charAt(0))throw Ub("nosel");return new U(a)}if(b){b=v.document;var d;a=(d=Mf.exec(a))?[b.createElement(d[1])]:(d=Lc(a,b))?d.childNodes:[]}Nc(this,a)}function Vb(a){return a.cloneNode(!0)}function ub(a,b){b||db(a);if(a.querySelectorAll)for(var d=a.querySelectorAll("*"),c=0,e=d.length;c<e;c++)db(d[c])}function Oc(a,
-b,d,c){if(x(c))throw Ub("offargs");var e=(c=vb(a))&&c.events,f=c&&c.handle;if(f)if(b){var g=function(b){var c=e[b];x(d)&&Za(c||[],d);x(d)&&c&&0<c.length||(a.removeEventListener(b,f,!1),delete e[b])};q(b.split(" "),function(a){g(a);wb[a]&&g(wb[a])})}else for(b in e)"$destroy"!==b&&a.removeEventListener(b,f,!1),delete e[b]}function db(a,b){var d=a.ng339,c=d&&eb[d];c&&(b?delete c.data[b]:(c.handle&&(c.events.$destroy&&c.handle({},"$destroy"),Oc(a)),delete eb[d],a.ng339=void 0))}function vb(a,b){var d=
-a.ng339,d=d&&eb[d];b&&!d&&(a.ng339=d=++Nf,d=eb[d]={events:{},data:{},handle:void 0});return d}function Wb(a,b,d){if(Kc(a)){var c=x(d),e=!c&&b&&!G(b),f=!b;a=(a=vb(a,!e))&&a.data;if(c)a[b]=d;else{if(f)return a;if(e)return a&&a[b];R(a,b)}}}function xb(a,b){return a.getAttribute?-1<(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" "):!1}function yb(a,b){b&&a.setAttribute&&q(b.split(" "),function(b){a.setAttribute("class",V((" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g,
-" ").replace(" "+V(b)+" "," ")))})}function zb(a,b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");q(b.split(" "),function(a){a=V(a);-1===d.indexOf(" "+a+" ")&&(d+=a+" ")});a.setAttribute("class",V(d))}}function Nc(a,b){if(b)if(b.nodeType)a[a.length++]=b;else{var d=b.length;if("number"===typeof d&&b.window!==b){if(d)for(var c=0;c<d;c++)a[a.length++]=b[c]}else a[a.length++]=b}}function Pc(a,b){return Ab(a,"$"+(b||"ngController")+"Controller")}function Ab(a,
-b,d){9==a.nodeType&&(a=a.documentElement);for(b=K(b)?b:[b];a;){for(var c=0,e=b.length;c<e;c++)if(x(d=B.data(a,b[c])))return d;a=a.parentNode||11===a.nodeType&&a.host}}function Qc(a){for(ub(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function Bb(a,b){b||ub(a);var d=a.parentNode;d&&d.removeChild(a)}function Of(a,b){b=b||v;if("complete"===b.document.readyState)b.setTimeout(a);else B(b).on("load",a)}function Rc(a,b){var d=Cb[b.toLowerCase()];return d&&Sc[va(a)]&&d}function Pf(a,b){var d=function(c,
-d){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=b[d||c.type],g=f?f.length:0;if(g){if(y(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};var k=f.specialHandlerWrapper||Qf;1<g&&(f=ha(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||k(a,c,f[l])}};d.elem=
-a;return d}function Qf(a,b,d){d.call(a,b)}function Rf(a,b,d){var c=b.relatedTarget;c&&(c===a||Sf.call(a,c))||d.call(a,b)}function Ff(){this.$get=function(){return R(U,{hasClass:function(a,b){a.attr&&(a=a[0]);return xb(a,b)},addClass:function(a,b){a.attr&&(a=a[0]);return zb(a,b)},removeClass:function(a,b){a.attr&&(a=a[0]);return yb(a,b)}})}}function Fa(a,b){var d=a&&a.$$hashKey;if(d)return"function"===typeof d&&(d=a.$$hashKey()),d;d=typeof a;return d="function"==d||"object"==d&&null!==a?a.$$hashKey=
-d+":"+(b||Xd)():d+":"+a}function Ra(a,b){if(b){var d=0;this.nextUid=function(){return++d}}q(a,this.put,this)}function Tc(a){a=Function.prototype.toString.call(a).replace(Tf,"");return a.match(Uf)||a.match(Vf)}function Wf(a){return(a=Tc(a))?"function("+(a[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function bb(a,b){function d(a){return function(b,c){if(G(b))q(b,qc(a));else return a(b,c)}}function c(a,b){Qa(a,"service");if(E(b)||K(b))b=r.instantiate(b);if(!b.$get)throw Ga("pget",a);return m[a+"Provider"]=
-b}function e(a,b){return function(){var c=w.invoke(b,this);if(y(c))throw Ga("undef",a);return c}}function f(a,b,d){return c(a,{$get:!1!==d?e(a,b):b})}function g(a){qb(y(a)||K(a),"modulesToLoad","not an array");var b=[],c;q(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=r.get(e[0]);f[e[1]].apply(f,e[2])}}if(!n.get(a)){n.put(a,!0);try{F(a)?(c=Sb(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):E(a)?b.push(r.invoke(a)):K(a)?b.push(r.invoke(a)):
-Pa(a,"module")}catch(e){throw K(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Ga("modulerr",a,e.stack||e.message||e);}}});return b}function h(a,c){function d(b,e){if(a.hasOwnProperty(b)){if(a[b]===k)throw Ga("cdep",b+" <- "+l.join(" <- "));return a[b]}try{return l.unshift(b),a[b]=k,a[b]=c(b,e)}catch(f){throw a[b]===k&&delete a[b],f;}finally{l.shift()}}function e(a,c,f){var g=[];a=bb.$$annotate(a,b,f);for(var h=0,k=a.length;h<k;h++){var l=a[h];
-if("string"!==typeof l)throw Ga("itkn",l);g.push(c&&c.hasOwnProperty(l)?c[l]:d(l,f))}return g}return{invoke:function(a,b,c,d){"string"===typeof c&&(d=c,c=null);c=e(a,c,d);K(a)&&(a=a[a.length-1]);d=11>=Ca?!1:"function"===typeof a&&/^(?:class\s|constructor\()/.test(Function.prototype.toString.call(a));return d?(c.unshift(null),new (Function.prototype.bind.apply(a,c))):a.apply(b,c)},instantiate:function(a,b,c){var d=K(a)?a[a.length-1]:a;a=e(a,b,c);a.unshift(null);return new (Function.prototype.bind.apply(d,
-a))},get:d,annotate:bb.$$annotate,has:function(b){return m.hasOwnProperty(b+"Provider")||a.hasOwnProperty(b)}}}b=!0===b;var k={},l=[],n=new Ra([],!0),m={$provide:{provider:d(c),factory:d(f),service:d(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:d(function(a,b){return f(a,da(b),!1)}),constant:d(function(a,b){Qa(a,"constant");m[a]=b;N[a]=b}),decorator:function(a,b){var c=r.get(a+"Provider"),d=c.$get;c.$get=function(){var a=w.invoke(d,c);return w.invoke(b,null,
-{$delegate:a})}}}},r=m.$injector=h(m,function(a,b){ea.isString(b)&&l.push(b);throw Ga("unpr",l.join(" <- "));}),N={},M=h(N,function(a,b){var c=r.get(a+"Provider",b);return w.invoke(c.$get,c,void 0,a)}),w=M;m.$injectorProvider={$get:da(M)};var p=g(a),w=M.get("$injector");w.strictDi=b;q(p,function(a){a&&w.invoke(a)});return w}function We(){var a=!0;this.disableAutoScrolling=function(){a=!1};this.$get=["$window","$location","$rootScope",function(b,d,c){function e(a){var b=null;Array.prototype.some.call(a,
-function(a){if("a"===va(a))return b=a,!0});return b}function f(a){if(a){a.scrollIntoView();var c;c=g.yOffset;E(c)?c=c():Ob(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):Q(c)||(c=0);c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=F(a)?a:d.hash();var b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var h=b.document;a&&c.$watch(function(){return d.hash()},function(a,b){a===
-b&&""===a||Of(function(){c.$evalAsync(g)})});return g}]}function fb(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;K(a)&&(a=a.join(" "));K(b)&&(b=b.join(" "));return a+" "+b}function Xf(a){F(a)&&(a=a.split(" "));var b=T();q(a,function(a){a.length&&(b[a]=!0)});return b}function Ha(a){return G(a)?a:{}}function Yf(a,b,d,c){function e(a){try{a.apply(null,za.call(arguments,1))}finally{if(M--,0===M)for(;w.length;)try{w.pop()()}catch(b){d.error(b)}}}function f(){u=null;g();h()}function g(){p=I();
-p=y(p)?null:p;pa(p,L)&&(p=L);L=p}function h(){if(t!==k.url()||H!==p)t=k.url(),H=p,q(J,function(a){a(k.url(),p)})}var k=this,l=a.location,n=a.history,m=a.setTimeout,r=a.clearTimeout,N={};k.isMock=!1;var M=0,w=[];k.$$completeOutstandingRequest=e;k.$$incOutstandingRequestCount=function(){M++};k.notifyWhenNoOutstandingRequests=function(a){0===M?a():w.push(a)};var p,H,t=l.href,z=b.find("base"),u=null,I=c.history?function(){try{return n.state}catch(a){}}:C;g();H=p;k.url=function(b,d,e){y(e)&&(e=null);l!==
-a.location&&(l=a.location);n!==a.history&&(n=a.history);if(b){var f=H===e;if(t===b&&(!c.history||f))return k;var h=t&&Ia(t)===Ia(b);t=b;H=e;if(!c.history||h&&f){if(!h||u)u=b;d?l.replace(b):h?(d=l,e=b.indexOf("#"),e=-1===e?"":b.substr(e),d.hash=e):l.href=b;l.href!==b&&(u=b)}else n[d?"replaceState":"pushState"](e,"",b),g(),H=p;return k}return u||l.href.replace(/%27/g,"'")};k.state=function(){return p};var J=[],D=!1,L=null;k.onUrlChange=function(b){if(!D){if(c.history)B(a).on("popstate",f);B(a).on("hashchange",
-f);D=!0}J.push(b);return b};k.$$applicationDestroyed=function(){B(a).off("hashchange popstate",f)};k.$$checkUrlChange=h;k.baseHref=function(){var a=z.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};k.defer=function(a,b){var c;M++;c=m(function(){delete N[c];e(a)},b||0);N[c]=!0;return c};k.defer.cancel=function(a){return N[a]?(delete N[a],r(a),e(C),!0):!1}}function cf(){this.$get=["$window","$log","$sniffer","$document",function(a,b,d,c){return new Yf(a,c,b,d)}]}function df(){this.$get=
-function(){function a(a,c){function e(a){a!=m&&(r?r==a&&(r=a.n):r=a,f(a.n,a.p),f(a,m),m=a,m.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw O("$cacheFactory")("iid",a);var g=0,h=R({},c,{id:a}),k=T(),l=c&&c.capacity||Number.MAX_VALUE,n=T(),m=null,r=null;return b[a]={put:function(a,b){if(!y(b)){if(l<Number.MAX_VALUE){var c=n[a]||(n[a]={key:a});e(c)}a in k||g++;k[a]=b;g>l&&this.remove(r.key);return b}},get:function(a){if(l<Number.MAX_VALUE){var b=n[a];if(!b)return;e(b)}return k[a]},
-remove:function(a){if(l<Number.MAX_VALUE){var b=n[a];if(!b)return;b==m&&(m=b.p);b==r&&(r=b.n);f(b.n,b.p);delete n[a]}a in k&&(delete k[a],g--)},removeAll:function(){k=T();g=0;n=T();m=r=null},destroy:function(){n=h=k=null;delete b[a]},info:function(){return R({},h,{size:g})}}}var b={};a.info=function(){var a={};q(b,function(b,e){a[e]=b.info()});return a};a.get=function(a){return b[a]};return a}}function zf(){this.$get=["$cacheFactory",function(a){return a("templates")}]}function Cc(a,b){function d(a,
-b,c){var d=/^\s*([@&<]|=(\*?))(\??)\s*(\w*)\s*$/,e=T();q(a,function(a,f){if(a in n)e[f]=n[a];else{var g=a.match(d);if(!g)throw ga("iscp",b,f,a,c?"controller bindings definition":"isolate scope definition");e[f]={mode:g[1][0],collection:"*"===g[2],optional:"?"===g[3],attrName:g[4]||f};g[4]&&(n[a]=e[f])}});return e}function c(a){var b=a.charAt(0);if(!b||b!==P(b))throw ga("baddir",a);if(a!==a.trim())throw ga("baddir",a);}var e={},f=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,g=/(([\w\-]+)(?:\:([^;]+))?;?)/,
-h=ae("ngSrc,ngSrcset,src,srcset"),k=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,l=/^(on[a-z]+|formaction)$/,n=T();this.directive=function M(b,d){Qa(b,"directive");F(b)?(c(b),qb(d,"directiveFactory"),e.hasOwnProperty(b)||(e[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var d=[];q(e[b],function(e,f){try{var g=a.invoke(e);E(g)?g={compile:da(g)}:!g.compile&&g.link&&(g.compile=da(g.link));g.priority=g.priority||0;g.index=f;g.name=g.name||b;g.require=g.require||g.controller&&g.name;g.restrict=
-g.restrict||"EA";g.$$moduleName=e.$$moduleName;d.push(g)}catch(h){c(h)}});return d}])),e[b].push(d)):q(b,qc(M));return this};this.component=function(a,b){function c(a){function e(b){return E(b)||K(b)?function(c,d){return a.invoke(b,this,{$element:c,$attrs:d})}:b}var f=b.template||b.templateUrl?b.template:"",g={controller:d,controllerAs:Uc(b.controller)||b.controllerAs||"$ctrl",template:e(f),templateUrl:e(b.templateUrl),transclude:b.transclude,scope:{},bindToController:b.bindings||{},restrict:"E",
-require:b.require};q(b,function(a,b){"$"===b.charAt(0)&&(g[b]=a)});return g}var d=b.controller||function(){};q(b,function(a,b){"$"===b.charAt(0)&&(c[b]=a,E(d)&&(d[b]=a))});c.$inject=["$injector"];return this.directive(a,c)};this.aHrefSanitizationWhitelist=function(a){return x(a)?(b.aHrefSanitizationWhitelist(a),this):b.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(a){return x(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()};var m=!0;this.debugInfoEnabled=
-function(a){return x(a)?(m=a,this):m};var r=10;this.onChangesTtl=function(a){return arguments.length?(r=a,this):r};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate","$$sanitizeUri",function(a,b,c,n,t,z,u,I,J,D){function L(){try{if(!--qa)throw Z=void 0,ga("infchng",r);u.$apply(function(){for(var a=0,b=Z.length;a<b;++a)Z[a]();Z=void 0})}finally{qa++}}function S(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<
-e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a}function $(a,b,c){na.innerHTML="<span "+b+">";b=na.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name);d.value=c;a.attributes.setNamedItem(d)}function A(a,b){try{a.addClass(b)}catch(c){}}function ba(a,b,c,d,e){a instanceof B||(a=B(a));for(var f=/\S+/,g=0,h=a.length;g<h;g++){var k=a[g];k.nodeType===Ma&&k.nodeValue.match(f)&&Mc(k,a[g]=v.document.createElement("span"))}var l=s(a,b,a,c,d,e);ba.$$addScopeClass(a);var m=null;return function(b,
-c,d){qb(b,"scope");e&&e.needsNewScope&&(b=b.$parent.$new());d=d||{};var f=d.parentBoundTranscludeFn,g=d.transcludeControllers;d=d.futureParentElement;f&&f.$$boundTransclude&&(f=f.$$boundTransclude);m||(m=(d=d&&d[0])?"foreignobject"!==va(d)&&ma.call(d).match(/SVG/)?"svg":"html":"html");d="html"!==m?B(ca(m,B("<div>").append(a).html())):c?Oa.clone.call(a):a;if(g)for(var h in g)d.data("$"+h+"Controller",g[h].instance);ba.$$addScopeInfo(d,b);c&&c(d,b);l&&l(b,d,d,f);return d}}function s(a,b,c,d,e,f){function g(a,
-c,d,e){var f,k,l,m,n,t,p;if(r)for(p=Array(c.length),m=0;m<h.length;m+=3)f=h[m],p[f]=c[f];else p=c;m=0;for(n=h.length;m<n;)k=p[h[m++]],c=h[m++],f=h[m++],c?(c.scope?(l=a.$new(),ba.$$addScopeInfo(B(k),l)):l=a,t=c.transcludeOnThisElement?ka(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?ka(a,b):null,c(f,l,k,d,t)):f&&f(a,k.childNodes,void 0,e)}for(var h=[],k,l,m,n,r,t=0;t<a.length;t++){k=new S;l=x(a[t],[],k,0===t?d:void 0,e);(f=l.length?Ba(l,a[t],k,b,c,null,[],[],f):null)&&f.scope&&ba.$$addScopeClass(k.$$element);
-k=f&&f.terminal||!(m=a[t].childNodes)||!m.length?null:s(m,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||k)h.push(t,f,k),n=!0,r=r||f;f=null}return n?g:null}function ka(a,b,c){function d(e,f,g,h,k){e||(e=a.$new(!1,k),e.$$transcluded=!0);return b(e,f,{parentBoundTranscludeFn:c,transcludeControllers:g,futureParentElement:h})}var e=d.$$slots=T(),f;for(f in b.$$slots)e[f]=b.$$slots[f]?ka(a,b.$$slots[f],c):null;return d}function x(a,b,c,d,e){var h=c.$attr,k;switch(a.nodeType){case 1:la(b,
-xa(va(a)),"E",d,e);for(var l,m,n,t=a.attributes,r=0,p=t&&t.length;r<p;r++){var I=!1,D=!1;l=t[r];k=l.name;m=V(l.value);l=xa(k);if(n=ya.test(l))k=k.replace(Vc,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()});(l=l.match(Aa))&&Q(l[1])&&(I=k,D=k.substr(0,k.length-5)+"end",k=k.substr(0,k.length-6));l=xa(k.toLowerCase());h[l]=k;if(n||!c.hasOwnProperty(l))c[l]=m,Rc(a,l)&&(c[l]=!0);fa(a,b,m,l,n);la(b,l,"A",d,e,I,D)}a=a.className;G(a)&&(a=a.animVal);if(F(a)&&""!==a)for(;k=g.exec(a);)l=xa(k[2]),
-la(b,l,"C",d,e)&&(c[l]=V(k[3])),a=a.substr(k.index+k[0].length);break;case Ma:if(11===Ca)for(;a.parentNode&&a.nextSibling&&a.nextSibling.nodeType===Ma;)a.nodeValue+=a.nextSibling.nodeValue,a.parentNode.removeChild(a.nextSibling);X(b,a.nodeValue);break;case 8:try{if(k=f.exec(a.nodeValue))l=xa(k[1]),la(b,l,"M",d,e)&&(c[l]=V(k[2]))}catch(J){}}b.sort(Y);return b}function Wc(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ga("uterdir",b,c);1==a.nodeType&&(a.hasAttribute(b)&&
-e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return B(d)}function Xc(a,b,c){return function(d,e,f,g,h){e=Wc(e[0],b,c);return a(d,e,f,g,h)}}function Yb(a,b,c,d,e,f){var g;return a?ba(b,c,d,e,f):function(){g||(g=ba(b,c,d,e,f),b=c=f=null);return g.apply(this,arguments)}}function Ba(a,b,d,e,f,g,h,k,l){function m(a,b,c,d){if(a){c&&(a=Xc(a,c,d));a.require=A.require;a.directiveName=M;if(D===A||A.$$isolateScope)a=ha(a,{isolateScope:!0});h.push(a)}if(b){c&&(b=Xc(b,c,d));
-b.require=A.require;b.directiveName=M;if(D===A||A.$$isolateScope)b=ha(b,{isolateScope:!0});k.push(b)}}function n(a,c,e,f,g){function l(a,b,c,d){var e;Ya(a)||(d=c,c=b,b=a,a=void 0);H&&(e=u);c||(c=H?z.parent():z);if(d){var f=g.$$slots[d];if(f)return f(a,b,e,c,$);if(y(f))throw ga("noslot",d,wa(z));}else return g(a,b,e,c,$)}var m,t,p,A,w,u,L,z;b===e?(f=d,z=d.$$element):(z=B(e),f=new S(z,d));w=c;D?A=c.$new(!0):r&&(w=c.$parent);g&&(L=l,L.$$boundTransclude=g,L.isSlotFilled=function(a){return!!g.$$slots[a]});
-I&&(u=O(z,f,L,I,A,c,D));D&&(ba.$$addScopeInfo(z,A,!0,!(J&&(J===D||J===D.$$originalDirective))),ba.$$addScopeClass(z,!0),A.$$isolateBindings=D.$$isolateBindings,t=ia(c,f,A,A.$$isolateBindings,D),t.removeWatches&&A.$on("$destroy",t.removeWatches));for(m in u){t=I[m];p=u[m];var Xb=t.$$bindings.bindToController;p.bindingInfo=p.identifier&&Xb?ia(w,f,p.instance,Xb,t):{};var M=p();M!==p.instance&&(p.instance=M,z.data("$"+t.name+"Controller",M),p.bindingInfo.removeWatches&&p.bindingInfo.removeWatches(),p.bindingInfo=
-ia(w,f,p.instance,Xb,t))}q(I,function(a,b){var c=a.require;a.bindToController&&!K(c)&&G(c)&&R(u[b].instance,gb(b,c,z,u))});q(u,function(a){var b=a.instance;E(b.$onChanges)&&b.$onChanges(a.bindingInfo.initialChanges);E(b.$onInit)&&b.$onInit();E(b.$onDestroy)&&w.$on("$destroy",function(){b.$onDestroy()})});m=0;for(t=h.length;m<t;m++)p=h[m],ja(p,p.isolateScope?A:c,z,f,p.require&&gb(p.directiveName,p.require,z,u),L);var $=c;D&&(D.template||null===D.templateUrl)&&($=A);a&&a($,e.childNodes,void 0,g);for(m=
-k.length-1;0<=m;m--)p=k[m],ja(p,p.isolateScope?A:c,z,f,p.require&&gb(p.directiveName,p.require,z,u),L);q(u,function(a){a=a.instance;E(a.$postLink)&&a.$postLink()})}l=l||{};for(var t=-Number.MAX_VALUE,r=l.newScopeDirective,I=l.controllerDirectives,D=l.newIsolateScopeDirective,J=l.templateDirective,w=l.nonTlbTranscludeDirective,u=!1,L=!1,H=l.hasElementTranscludeDirective,z=d.$$element=B(b),A,M,$,s=e,Sa,ka=!1,C=!1,v,F=0,Ba=a.length;F<Ba;F++){A=a[F];var P=A.$$start,Q=A.$$end;P&&(z=Wc(b,P,Q));$=void 0;
-if(t>A.priority)break;if(v=A.scope)A.templateUrl||(G(v)?(W("new/isolated scope",D||r,A,z),D=A):W("new/isolated scope",D,A,z)),r=r||A;M=A.name;if(!ka&&(A.replace&&(A.templateUrl||A.template)||A.transclude&&!A.$$tlb)){for(v=F+1;ka=a[v++];)if(ka.transclude&&!ka.$$tlb||ka.replace&&(ka.templateUrl||ka.template)){C=!0;break}ka=!0}!A.templateUrl&&A.controller&&(v=A.controller,I=I||T(),W("'"+M+"' controller",I[M],A,z),I[M]=A);if(v=A.transclude)if(u=!0,A.$$tlb||(W("transclusion",w,A,z),w=A),"element"==v)H=
-!0,t=A.priority,$=z,z=d.$$element=B(ba.$$createComment(M,d[M])),b=z[0],da(f,za.call($,0),b),$[0].$$parentNode=$[0].parentNode,s=Yb(C,$,e,t,g&&g.name,{nonTlbTranscludeDirective:w});else{var la=T();$=B(Vb(b)).contents();if(G(v)){$=[];var Y=T(),X=T();q(v,function(a,b){var c="?"===a.charAt(0);a=c?a.substring(1):a;Y[a]=b;la[b]=null;X[b]=c});q(z.contents(),function(a){var b=Y[xa(va(a))];b?(X[b]=!0,la[b]=la[b]||[],la[b].push(a)):$.push(a)});q(X,function(a,b){if(!a)throw ga("reqslot",b);});for(var Z in la)la[Z]&&
-(la[Z]=Yb(C,la[Z],e))}z.empty();s=Yb(C,$,e,void 0,void 0,{needsNewScope:A.$$isolateScope||A.$$newScope});s.$$slots=la}if(A.template)if(L=!0,W("template",J,A,z),J=A,v=E(A.template)?A.template(z,d):A.template,v=ta(v),A.replace){g=A;$=Tb.test(v)?Yc(ca(A.templateNamespace,V(v))):[];b=$[0];if(1!=$.length||1!==b.nodeType)throw ga("tplrt",M,"");da(f,z,b);Ba={$attr:{}};v=x(b,[],Ba);var ea=a.splice(F+1,a.length-(F+1));(D||r)&&Zc(v,D,r);a=a.concat(v).concat(ea);U(d,Ba);Ba=a.length}else z.html(v);if(A.templateUrl)L=
-!0,W("template",J,A,z),J=A,A.replace&&(g=A),n=aa(a.splice(F,a.length-F),z,d,f,u&&s,h,k,{controllerDirectives:I,newScopeDirective:r!==A&&r,newIsolateScopeDirective:D,templateDirective:J,nonTlbTranscludeDirective:w}),Ba=a.length;else if(A.compile)try{Sa=A.compile(z,d,s),E(Sa)?m(null,Sa,P,Q):Sa&&m(Sa.pre,Sa.post,P,Q)}catch(fa){c(fa,wa(z))}A.terminal&&(n.terminal=!0,t=Math.max(t,A.priority))}n.scope=r&&!0===r.scope;n.transcludeOnThisElement=u;n.templateOnThisElement=L;n.transclude=s;l.hasElementTranscludeDirective=
-H;return n}function gb(a,b,c,d){var e;if(F(b)){var f=b.match(k);b=b.substring(f[0].length);var g=f[1]||f[3],f="?"===f[2];"^^"===g?c=c.parent():e=(e=d&&d[b])&&e.instance;if(!e){var h="$"+b+"Controller";e=g?c.inheritedData(h):c.data(h)}if(!e&&!f)throw ga("ctreq",b,a);}else if(K(b))for(e=[],g=0,f=b.length;g<f;g++)e[g]=gb(a,b[g],c,d);else G(b)&&(e={},q(b,function(b,f){e[f]=gb(a,b,c,d)}));return e||null}function O(a,b,c,d,e,f,g){var h=T(),k;for(k in d){var l=d[k],m={$scope:l===g||l.$$isolateScope?e:f,
-$element:a,$attrs:b,$transclude:c},n=l.controller;"@"==n&&(n=b[l.name]);m=z(n,m,!0,l.controllerAs);h[l.name]=m;a.data("$"+l.name+"Controller",m.instance)}return h}function Zc(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d]=Pb(a[d],{$$isolateScope:b,$$newScope:c})}function la(b,f,g,h,k,l,m){if(f===k)return null;k=null;if(e.hasOwnProperty(f)){var n;f=a.get(f+"Directive");for(var t=0,r=f.length;t<r;t++)try{if(n=f[t],(y(h)||h>n.priority)&&-1!=n.restrict.indexOf(g)){l&&(n=Pb(n,{$$start:l,$$end:m}));if(!n.$$bindings){var I=
-n,D=n,A=n.name,J={isolateScope:null,bindToController:null};G(D.scope)&&(!0===D.bindToController?(J.bindToController=d(D.scope,A,!0),J.isolateScope={}):J.isolateScope=d(D.scope,A,!1));G(D.bindToController)&&(J.bindToController=d(D.bindToController,A,!0));if(G(J.bindToController)){var w=D.controller,z=D.controllerAs;if(!w)throw ga("noctrl",A);if(!Uc(w,z))throw ga("noident",A);}var u=I.$$bindings=J;G(u.isolateScope)&&(n.$$isolateBindings=u.isolateScope)}b.push(n);k=n}}catch(L){c(L)}}return k}function Q(b){if(e.hasOwnProperty(b))for(var c=
-a.get(b+"Directive"),d=0,f=c.length;d<f;d++)if(b=c[d],b.multiElement)return!0;return!1}function U(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});q(b,function(b,f){"class"==f?(A(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function aa(a,b,c,d,e,f,
-g,h){var k=[],l,m,t=b[0],p=a.shift(),r=Pb(p,{templateUrl:null,transclude:null,replace:null,$$originalDirective:p}),I=E(p.templateUrl)?p.templateUrl(b,c):p.templateUrl,D=p.templateNamespace;b.empty();n(I).then(function(n){var J,w;n=ta(n);if(p.replace){n=Tb.test(n)?Yc(ca(D,V(n))):[];J=n[0];if(1!=n.length||1!==J.nodeType)throw ga("tplrt",p.name,I);n={$attr:{}};da(d,b,J);var z=x(J,[],n);G(p.scope)&&Zc(z,!0);a=z.concat(a);U(c,n)}else J=t,b.html(n);a.unshift(r);l=Ba(a,J,c,e,b,p,f,g,h);q(d,function(a,c){a==
-J&&(d[c]=b[0])});for(m=s(b[0].childNodes,e);k.length;){n=k.shift();w=k.shift();var u=k.shift(),L=k.shift(),z=b[0];if(!n.$$destroyed){if(w!==t){var S=w.className;h.hasElementTranscludeDirective&&p.replace||(z=Vb(J));da(u,B(w),z);A(B(z),S)}w=l.transcludeOnThisElement?ka(n,l.transclude,L):L;l(m,n,z,d,w)}}k=null});return function(a,b,c,d,e){a=e;b.$$destroyed||(k?k.push(b,c,d,a):(l.transcludeOnThisElement&&(a=ka(b,l.transclude,e)),l(m,b,c,d,a)))}}function Y(a,b){var c=b.priority-a.priority;return 0!==
-c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function W(a,b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw ga("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),a,wa(d));}function X(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&ba.$$addBindingClass(a);return function(a,c){var e=c.parent();b||ba.$$addBindingClass(e);ba.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function ca(a,b){a=
-P(a||"html");switch(a){case "svg":case "math":var c=v.document.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function ea(a,b){if("srcdoc"==b)return I.HTML;var c=va(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b))return I.RESOURCE_URL}function fa(a,c,d,e,f){var g=ea(a,e);f=h[e]||f;var k=b(d,!0,g,f);if(k){if("multiple"===e&&"select"===va(a))throw ga("selmulti",wa(a));c.push({priority:100,compile:function(){return{pre:function(a,
-c,h){c=h.$$observers||(h.$$observers=T());if(l.test(e))throw ga("nodomevents");var m=h[e];m!==d&&(k=m&&b(m,!0,g,f),d=m);k&&(h[e]=k(a),(c[e]||(c[e]=[])).$$inter=!0,(h.$$observers&&h.$$observers[e].$$scope||a).$watch(k,function(a,b){"class"===e&&a!=b?h.$updateClass(a,b):h.$set(e,a)}))}}}})}}function da(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c;h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=
-c);break}f&&f.replaceChild(c,d);a=v.document.createDocumentFragment();for(g=0;g<e;g++)a.appendChild(b[g]);B.hasData(d)&&(B.data(c,B.data(d)),B(d).off("$destroy"));B.cleanData(a.querySelectorAll("*"));for(g=1;g<e;g++)delete b[g];b[0]=c;b.length=1}function ha(a,b){return R(function(){return a.apply(null,arguments)},a,b)}function ja(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,wa(d))}}function ia(a,c,d,e,f){function g(b,c,e){E(d.$onChanges)&&c!==e&&(Z||(a.$$postDigest(L),Z=[]),m||(m={},Z.push(h)),m[b]&&
-(e=m[b].previousValue),m[b]=new Db(e,c))}function h(){d.$onChanges(m);m=void 0}var k=[],l={},m;q(e,function(e,h){var m=e.attrName,n=e.optional,p,r,I,D;switch(e.mode){case "@":n||ua.call(c,m)||(d[h]=c[m]=void 0);c.$observe(m,function(a){if(F(a)||Da(a))g(h,a,d[h]),d[h]=a});c.$$observers[m].$$scope=a;p=c[m];F(p)?d[h]=b(p)(a):Da(p)&&(d[h]=p);l[h]=new Db(Zb,d[h]);break;case "=":if(!ua.call(c,m)){if(n)break;c[m]=void 0}if(n&&!c[m])break;r=t(c[m]);D=r.literal?pa:function(a,b){return a===b||a!==a&&b!==b};
-I=r.assign||function(){p=d[h]=r(a);throw ga("nonassign",c[m],m,f.name);};p=d[h]=r(a);n=function(b){D(b,d[h])||(D(b,p)?I(a,b=d[h]):d[h]=b);return p=b};n.$stateful=!0;n=e.collection?a.$watchCollection(c[m],n):a.$watch(t(c[m],n),null,r.literal);k.push(n);break;case "<":if(!ua.call(c,m)){if(n)break;c[m]=void 0}if(n&&!c[m])break;r=t(c[m]);d[h]=r(a);l[h]=new Db(Zb,d[h]);n=a.$watch(r,function(a,b){a===b&&(b=d[h]);g(h,a,b);d[h]=a},r.literal);k.push(n);break;case "&":r=c.hasOwnProperty(m)?t(c[m]):C;if(r===
-C&&n)break;d[h]=function(b){return r(a,b)}}});return{initialChanges:l,removeWatches:k.length&&function(){for(var a=0,b=k.length;a<b;++a)k[a]()}}}var oa=/^\w/,na=v.document.createElement("div"),qa=r,Z;S.prototype={$normalize:xa,$addClass:function(a){a&&0<a.length&&J.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&J.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=$c(a,b);c&&c.length&&J.addClass(this.$$element,c);(c=$c(b,a))&&c.length&&J.removeClass(this.$$element,
-c)},$set:function(a,b,d,e){var f=Rc(this.$$element[0],a),g=ad[a],h=a;f?(this.$$element.prop(a,b),e=f):g&&(this[g]=b,h=g);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=zc(a,"-"));f=va(this.$$element);if("a"===f&&("href"===a||"xlinkHref"===a)||"img"===f&&"src"===a)this[a]=b=D(b,"src"===a);else if("img"===f&&"srcset"===a){for(var f="",g=V(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(g)?k:/(,)/,g=g.split(k),k=Math.floor(g.length/2),l=0;l<k;l++)var m=2*l,f=f+D(V(g[m]),!0),f=
-f+(" "+V(g[m+1]));g=V(g[2*l]).split(/\s/);f+=D(V(g[0]),!0);2===g.length&&(f+=" "+V(g[1]));this[a]=b=f}!1!==d&&(null===b||y(b)?this.$$element.removeAttr(e):oa.test(e)?this.$$element.attr(e,b):$(this.$$element[0],e,b));(a=this.$$observers)&&q(a[h],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=T()),e=d[a]||(d[a]=[]);e.push(b);u.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||y(c[a])||b(c[a])});return function(){Za(e,b)}}};var ra=b.startSymbol(),
-sa=b.endSymbol(),ta="{{"==ra&&"}}"==sa?Xa:function(a){return a.replace(/\{\{/g,ra).replace(/}}/g,sa)},ya=/^ngAttr[A-Z]/,Aa=/^(.+)Start$/;ba.$$addBindingInfo=m?function(a,b){var c=a.data("$binding")||[];K(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:C;ba.$$addBindingClass=m?function(a){A(a,"ng-binding")}:C;ba.$$addScopeInfo=m?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:C;ba.$$addScopeClass=m?function(a,b){A(a,b?"ng-isolate-scope":"ng-scope")}:C;ba.$$createComment=
-function(a,b){var c="";m&&(c=" "+(a||"")+": "+(b||"")+" ");return v.document.createComment(c)};return ba}]}function Db(a,b){this.previousValue=a;this.currentValue=b}function xa(a){return cb(a.replace(Vc,""))}function $c(a,b){var d="",c=a.split(/\s+/),e=b.split(/\s+/),f=0;a:for(;f<c.length;f++){for(var g=c[f],h=0;h<e.length;h++)if(g==e[h])continue a;d+=(0<d.length?" ":"")+g}return d}function Yc(a){a=B(a);var b=a.length;if(1>=b)return a;for(;b--;)8===a[b].nodeType&&Zf.call(a,b,1);return a}function Uc(a,
-b){if(b&&F(b))return b;if(F(a)){var d=bd.exec(a);if(d)return d[3]}}function ef(){var a={},b=!1;this.has=function(b){return a.hasOwnProperty(b)};this.register=function(b,c){Qa(b,"controller");G(b)?R(a,b):a[b]=c};this.allowGlobals=function(){b=!0};this.$get=["$injector","$window",function(d,c){function e(a,b,c,d){if(!a||!G(a.$scope))throw O("$controller")("noscp",d,b);a.$scope[b]=c}return function(f,g,h,k){var l,n,m;h=!0===h;k&&F(k)&&(m=k);if(F(f)){k=f.match(bd);if(!k)throw $f("ctrlfmt",f);n=k[1];m=
-m||k[3];f=a.hasOwnProperty(n)?a[n]:Bc(g.$scope,n,!0)||(b?Bc(c,n,!0):void 0);Pa(f,n,!0)}if(h)return h=(K(f)?f[f.length-1]:f).prototype,l=Object.create(h||null),m&&e(g,m,l,n||f.name),R(function(){var a=d.invoke(f,l,g,n);a!==l&&(G(a)||E(a))&&(l=a,m&&e(g,m,l,n||f.name));return l},{instance:l,identifier:m});l=d.instantiate(f,g,n);m&&e(g,m,l,n||f.name);return l}}]}function ff(){this.$get=["$window",function(a){return B(a.document)}]}function gf(){this.$get=["$log",function(a){return function(b,d){a.error.apply(a,
-arguments)}}]}function $b(a){return G(a)?fa(a)?a.toISOString():ab(a):a}function mf(){this.$get=function(){return function(a){if(!a)return"";var b=[];pc(a,function(a,c){null===a||y(a)||(K(a)?q(a,function(a){b.push(ja(c)+"="+ja($b(a)))}):b.push(ja(c)+"="+ja($b(a))))});return b.join("&")}}}function nf(){this.$get=function(){return function(a){function b(a,e,f){null===a||y(a)||(K(a)?q(a,function(a,c){b(a,e+"["+(G(a)?c:"")+"]")}):G(a)&&!fa(a)?pc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}):d.push(ja(e)+
-"="+ja($b(a))))}if(!a)return"";var d=[];b(a,"",!0);return d.join("&")}}}function ac(a,b){if(F(a)){var d=a.replace(ag,"").trim();if(d){var c=b("Content-Type");(c=c&&0===c.indexOf(cd))||(c=(c=d.match(bg))&&cg[c[0]].test(d));c&&(a=uc(d))}}return a}function dd(a){var b=T(),d;F(a)?q(a.split("\n"),function(a){d=a.indexOf(":");var e=P(V(a.substr(0,d)));a=V(a.substr(d+1));e&&(b[e]=b[e]?b[e]+", "+a:a)}):G(a)&&q(a,function(a,d){var f=P(d),g=V(a);f&&(b[f]=b[f]?b[f]+", "+g:g)});return b}function ed(a){var b;
-return function(d){b||(b=dd(a));return d?(d=b[P(d)],void 0===d&&(d=null),d):b}}function fd(a,b,d,c){if(E(c))return c(a,b,d);q(c,function(c){a=c(a,b,d)});return a}function lf(){var a=this.defaults={transformResponse:[ac],transformRequest:[function(a){return G(a)&&"[object File]"!==ma.call(a)&&"[object Blob]"!==ma.call(a)&&"[object FormData]"!==ma.call(a)?ab(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ha(bc),put:ha(bc),patch:ha(bc)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",
-paramSerializer:"$httpParamSerializer"},b=!1;this.useApplyAsync=function(a){return x(a)?(b=!!a,this):b};var d=!0;this.useLegacyPromiseExtensions=function(a){return x(a)?(d=!!a,this):d};var c=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(e,f,g,h,k,l){function n(b){function c(a){var b=R({},a);b.data=fd(a.data,a.headers,a.status,f.transformResponse);a=a.status;return 200<=a&&300>a?b:k.reject(b)}function e(a,b){var c,d={};q(a,function(a,
-e){E(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a});return d}if(!G(b))throw O("$http")("badreq",b);if(!F(b.url))throw O("$http")("badreq",b.url);var f=R({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer},b);f.headers=function(b){var c=a.headers,d=R({},b.headers),f,g,h,c=R({},c.common,c[P(b.method)]);a:for(f in c){g=P(f);for(h in d)if(P(h)===g)continue a;d[f]=c[f]}return e(d,ha(b))}(b);f.method=sb(f.method);f.paramSerializer=F(f.paramSerializer)?
-l.get(f.paramSerializer):f.paramSerializer;var g=[function(b){var d=b.headers,e=fd(b.data,ed(d),void 0,b.transformRequest);y(e)&&q(d,function(a,b){"content-type"===P(b)&&delete d[b]});y(b.withCredentials)&&!y(a.withCredentials)&&(b.withCredentials=a.withCredentials);return m(b,e).then(c,c)},void 0],h=k.when(f);for(q(M,function(a){(a.request||a.requestError)&&g.unshift(a.request,a.requestError);(a.response||a.responseError)&&g.push(a.response,a.responseError)});g.length;){b=g.shift();var n=g.shift(),
-h=h.then(b,n)}d?(h.success=function(a){Pa(a,"fn");h.then(function(b){a(b.data,b.status,b.headers,f)});return h},h.error=function(a){Pa(a,"fn");h.then(null,function(b){a(b.data,b.status,b.headers,f)});return h}):(h.success=gd("success"),h.error=gd("error"));return h}function m(c,d){function g(a){if(a){var c={};q(a,function(a,d){c[d]=function(c){function d(){a(c)}b?h.$applyAsync(d):h.$$phase?d():h.$apply(d)}});return c}}function l(a,c,d,e){function f(){m(c,a,d,e)}L&&(200<=a&&300>a?L.put(A,[a,c,dd(d),
-e]):L.remove(A));b?h.$applyAsync(f):(f(),h.$$phase||h.$apply())}function m(a,b,d,e){b=-1<=b?b:0;(200<=b&&300>b?J.resolve:J.reject)({data:a,status:b,headers:ed(d),config:c,statusText:e})}function u(a){m(a.data,a.status,ha(a.headers()),a.statusText)}function I(){var a=n.pendingRequests.indexOf(c);-1!==a&&n.pendingRequests.splice(a,1)}var J=k.defer(),D=J.promise,L,S,M=c.headers,A=r(c.url,c.paramSerializer(c.params));n.pendingRequests.push(c);D.then(I,I);!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&
-"JSONP"!==c.method||(L=G(c.cache)?c.cache:G(a.cache)?a.cache:N);L&&(S=L.get(A),x(S)?S&&E(S.then)?S.then(u,u):K(S)?m(S[1],S[0],ha(S[2]),S[3]):m(S,200,{},"OK"):L.put(A,D));y(S)&&((S=hd(c.url)?f()[c.xsrfCookieName||a.xsrfCookieName]:void 0)&&(M[c.xsrfHeaderName||a.xsrfHeaderName]=S),e(c.method,A,d,l,M,c.timeout,c.withCredentials,c.responseType,g(c.eventHandlers),g(c.uploadEventHandlers)));return D}function r(a,b){0<b.length&&(a+=(-1==a.indexOf("?")?"?":"&")+b);return a}var N=g("$http");a.paramSerializer=
-F(a.paramSerializer)?l.get(a.paramSerializer):a.paramSerializer;var M=[];q(c,function(a){M.unshift(F(a)?l.get(a):l.invoke(a))});n.pendingRequests=[];(function(a){q(arguments,function(a){n[a]=function(b,c){return n(R({},c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){q(arguments,function(a){n[a]=function(b,c,d){return n(R({},d||{},{method:a,url:b,data:c}))}})})("post","put","patch");n.defaults=a;return n}]}function pf(){this.$get=function(){return function(){return new v.XMLHttpRequest}}}
-function of(){this.$get=["$browser","$window","$document","$xhrFactory",function(a,b,d,c){return dg(a,c,a.defer,b.angular.callbacks,d[0])}]}function dg(a,b,d,c,e){function f(a,b,d){var f=e.createElement("script"),n=null;f.type="text/javascript";f.src=a;f.async=!0;n=function(a){f.removeEventListener("load",n,!1);f.removeEventListener("error",n,!1);e.body.removeChild(f);f=null;var g=-1,N="unknown";a&&("load"!==a.type||c[b].called||(a={type:"error"}),N=a.type,g="error"===a.type?404:200);d&&d(g,N)};f.addEventListener("load",
-n,!1);f.addEventListener("error",n,!1);e.body.appendChild(f);return n}return function(e,h,k,l,n,m,r,N,M,w){function p(){z&&z();u&&u.abort()}function H(b,c,e,f,g){x(J)&&d.cancel(J);z=u=null;b(c,e,f,g);a.$$completeOutstandingRequest(C)}a.$$incOutstandingRequestCount();h=h||a.url();if("jsonp"==P(e)){var t="_"+(c.counter++).toString(36);c[t]=function(a){c[t].data=a;c[t].called=!0};var z=f(h.replace("JSON_CALLBACK","angular.callbacks."+t),t,function(a,b){H(l,a,c[t].data,"",b);c[t]=C})}else{var u=b(e,h);
-u.open(e,h,!0);q(n,function(a,b){x(a)&&u.setRequestHeader(b,a)});u.onload=function(){var a=u.statusText||"",b="response"in u?u.response:u.responseText,c=1223===u.status?204:u.status;0===c&&(c=b?200:"file"==ra(h).protocol?404:0);H(l,c,b,u.getAllResponseHeaders(),a)};e=function(){H(l,-1,null,null,"")};u.onerror=e;u.onabort=e;q(M,function(a,b){u.addEventListener(b,a)});q(w,function(a,b){u.upload.addEventListener(b,a)});r&&(u.withCredentials=!0);if(N)try{u.responseType=N}catch(I){if("json"!==N)throw I;
-}u.send(y(k)?null:k)}if(0<m)var J=d(p,m);else m&&E(m.then)&&m.then(p)}}function jf(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a};this.endSymbol=function(a){return a?(b=a,this):b};this.$get=["$parse","$exceptionHandler","$sce",function(d,c,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(m,a).replace(r,b)}function h(a,b,c,d){var e;return e=a.$watch(function(a){e();return d(a)},b,c)}function k(f,k,m,r){function H(a){try{var b=a;a=m?e.getTrusted(m,b):e.valueOf(b);
-var d;if(r&&!x(a))d=a;else if(null==a)d="";else{switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=ab(a)}d=a}return d}catch(g){c(Ja.interr(f,g))}}if(!f.length||-1===f.indexOf(a)){var t;k||(k=g(f),t=da(k),t.exp=f,t.expressions=[],t.$$watchDelegate=h);return t}r=!!r;var z,u,I=0,J=[],D=[];t=f.length;for(var L=[],S=[];I<t;)if(-1!=(z=f.indexOf(a,I))&&-1!=(u=f.indexOf(b,z+l)))I!==z&&L.push(g(f.substring(I,z))),I=f.substring(z+l,u),J.push(I),D.push(d(I,H)),I=u+n,S.push(L.length),L.push("");
-else{I!==t&&L.push(g(f.substring(I)));break}m&&1<L.length&&Ja.throwNoconcat(f);if(!k||J.length){var q=function(a){for(var b=0,c=J.length;b<c;b++){if(r&&y(a[b]))return;L[S[b]]=a[b]}return L.join("")};return R(function(a){var b=0,d=J.length,e=Array(d);try{for(;b<d;b++)e[b]=D[b](a);return q(e)}catch(g){c(Ja.interr(f,g))}},{exp:f,expressions:J,$$watchDelegate:function(a,b){var c;return a.$watchGroup(D,function(d,e){var f=q(d);E(b)&&b.call(this,f,d!==e?c:f,a);c=f})}})}}var l=a.length,n=b.length,m=new RegExp(a.replace(/./g,
-f),"g"),r=new RegExp(b.replace(/./g,f),"g");k.startSymbol=function(){return a};k.endSymbol=function(){return b};return k}]}function kf(){this.$get=["$rootScope","$window","$q","$$q","$browser",function(a,b,d,c,e){function f(f,k,l,n){function m(){r?f.apply(null,N):f(p)}var r=4<arguments.length,N=r?za.call(arguments,4):[],q=b.setInterval,w=b.clearInterval,p=0,H=x(n)&&!n,t=(H?c:d).defer(),z=t.promise;l=x(l)?l:0;z.$$intervalId=q(function(){H?e.defer(m):a.$evalAsync(m);t.notify(p++);0<l&&p>=l&&(t.resolve(p),
-w(z.$$intervalId),delete g[z.$$intervalId]);H||a.$apply()},k);g[z.$$intervalId]=t;return z}var g={};f.cancel=function(a){return a&&a.$$intervalId in g?(g[a.$$intervalId].reject("canceled"),b.clearInterval(a.$$intervalId),delete g[a.$$intervalId],!0):!1};return f}]}function cc(a){a=a.split("/");for(var b=a.length;b--;)a[b]=ob(a[b]);return a.join("/")}function id(a,b){var d=ra(a);b.$$protocol=d.protocol;b.$$host=d.hostname;b.$$port=X(d.port)||eg[d.protocol]||null}function jd(a,b){var d="/"!==a.charAt(0);
-d&&(a="/"+a);var c=ra(a);b.$$path=decodeURIComponent(d&&"/"===c.pathname.charAt(0)?c.pathname.substring(1):c.pathname);b.$$search=xc(c.search);b.$$hash=decodeURIComponent(c.hash);b.$$path&&"/"!=b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function na(a,b){if(0===b.indexOf(a))return b.substr(a.length)}function Ia(a){var b=a.indexOf("#");return-1==b?a:a.substr(0,b)}function hb(a){return a.replace(/(#.+)|#$/,"$1")}function dc(a,b,d){this.$$html5=!0;d=d||"";id(a,this);this.$$parse=function(a){var d=na(b,
-a);if(!F(d))throw Eb("ipthprfx",a,b);jd(d,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Rb(this.$$search),d=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=cc(this.$$path)+(a?"?"+a:"")+d;this.$$absUrl=b+this.$$url.substr(1)};this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;x(f=na(a,c))?(g=f,g=x(f=na(d,f))?b+(na("/",f)||f):a+g):x(f=na(b,c))?g=b+f:b==c+"/"&&(g=b);g&&this.$$parse(g);return!!g}}function ec(a,b,d){id(a,this);
-this.$$parse=function(c){var e=na(a,c)||na(b,c),f;y(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",y(e)&&(a=c,this.replace())):(f=na(d,e),y(f)&&(f=e));jd(f,this);c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;0===f.indexOf(e)&&(f=f.replace(e,""));g.exec(f)||(c=(f=g.exec(c))?f[1]:c);this.$$path=c;this.$$compose()};this.$$compose=function(){var b=Rb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=cc(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+(this.$$url?d+this.$$url:"")};this.$$parseLinkUrl=
-function(b,d){return Ia(a)==Ia(b)?(this.$$parse(b),!0):!1}}function kd(a,b,d){this.$$html5=!0;ec.apply(this,arguments);this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;a==Ia(c)?f=c:(g=na(b,c))?f=a+d+g:b===c+"/"&&(f=b);f&&this.$$parse(f);return!!f};this.$$compose=function(){var b=Rb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=cc(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+d+this.$$url}}function Fb(a){return function(){return this[a]}}function ld(a,
-b){return function(d){if(y(d))return this[a];this[a]=b(d);this.$$compose();return this}}function qf(){var a="",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return x(b)?(a=b,this):a};this.html5Mode=function(a){return Da(a)?(b.enabled=a,this):G(a)?(Da(a.enabled)&&(b.enabled=a.enabled),Da(a.requireBase)&&(b.requireBase=a.requireBase),Da(a.rewriteLinks)&&(b.rewriteLinks=a.rewriteLinks),this):b};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(d,
-c,e,f,g){function h(a,b,d){var e=l.url(),f=l.$$state;try{c.url(a,b,d),l.$$state=c.state()}catch(g){throw l.url(e),l.$$state=f,g;}}function k(a,b){d.$broadcast("$locationChangeSuccess",l.absUrl(),a,l.$$state,b)}var l,n;n=c.baseHref();var m=c.url(),r;if(b.enabled){if(!n&&b.requireBase)throw Eb("nobase");r=m.substring(0,m.indexOf("/",m.indexOf("//")+2))+(n||"/");n=e.history?dc:kd}else r=Ia(m),n=ec;var N=r.substr(0,Ia(r).lastIndexOf("/")+1);l=new n(r,N,"#"+a);l.$$parseLinkUrl(m,m);l.$$state=c.state();
-var q=/^\s*(javascript|mailto):/i;f.on("click",function(a){if(b.rewriteLinks&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!=a.which&&2!=a.button){for(var e=B(a.target);"a"!==va(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),k=e.attr("href")||e.attr("xlink:href");G(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=ra(h.animVal).href);q.test(h)||!h||e.attr("target")||a.isDefaultPrevented()||!l.$$parseLinkUrl(h,k)||(a.preventDefault(),l.absUrl()!=c.url()&&(d.$apply(),g.angular["ff-684208-preventDefault"]=
-!0))}});hb(l.absUrl())!=hb(m)&&c.url(l.absUrl(),!0);var w=!0;c.onUrlChange(function(a,b){y(na(N,a))?g.location.href=a:(d.$evalAsync(function(){var c=l.absUrl(),e=l.$$state,f;a=hb(a);l.$$parse(a);l.$$state=b;f=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented;l.absUrl()===a&&(f?(l.$$parse(c),l.$$state=e,h(c,!1,e)):(w=!1,k(c,e)))}),d.$$phase||d.$digest())});d.$watch(function(){var a=hb(c.url()),b=hb(l.absUrl()),f=c.state(),g=l.$$replace,m=a!==b||l.$$html5&&e.history&&f!==l.$$state;if(w||
-m)w=!1,d.$evalAsync(function(){var b=l.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,l.$$state,f).defaultPrevented;l.absUrl()===b&&(c?(l.$$parse(a),l.$$state=f):(m&&h(b,g,f===l.$$state?null:l.$$state),k(a,f)))});l.$$replace=!1});return l}]}function rf(){var a=!0,b=this;this.debugEnabled=function(b){return x(b)?(a=b,this):a};this.$get=["$window",function(d){function c(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&
-(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=d.console||{},e=b[a]||b.log||C;a=!1;try{a=!!e.apply}catch(k){}return a?function(){var a=[];q(arguments,function(b){a.push(c(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Ta(a,b){if("__defineGetter__"===a||"__defineSetter__"===a||"__lookupGetter__"===a||"__lookupSetter__"===
-a||"__proto__"===a)throw ca("isecfld",b);return a}function fg(a){return a+""}function sa(a,b){if(a){if(a.constructor===a)throw ca("isecfn",b);if(a.window===a)throw ca("isecwindow",b);if(a.children&&(a.nodeName||a.prop&&a.attr&&a.find))throw ca("isecdom",b);if(a===Object)throw ca("isecobj",b);}return a}function md(a,b){if(a){if(a.constructor===a)throw ca("isecfn",b);if(a===gg||a===hg||a===ig)throw ca("isecff",b);}}function Gb(a,b){if(a&&(a===(0).constructor||a===(!1).constructor||a==="".constructor||
-a==={}.constructor||a===[].constructor||a===Function.constructor))throw ca("isecaf",b);}function jg(a,b){return"undefined"!==typeof a?a:b}function nd(a,b){return"undefined"===typeof a?b:"undefined"===typeof b?a:a+b}function aa(a,b){var d,c;switch(a.type){case s.Program:d=!0;q(a.body,function(a){aa(a.expression,b);d=d&&a.expression.constant});a.constant=d;break;case s.Literal:a.constant=!0;a.toWatch=[];break;case s.UnaryExpression:aa(a.argument,b);a.constant=a.argument.constant;a.toWatch=a.argument.toWatch;
-break;case s.BinaryExpression:aa(a.left,b);aa(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case s.LogicalExpression:aa(a.left,b);aa(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case s.ConditionalExpression:aa(a.test,b);aa(a.alternate,b);aa(a.consequent,b);a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case s.Identifier:a.constant=
-!1;a.toWatch=[a];break;case s.MemberExpression:aa(a.object,b);a.computed&&aa(a.property,b);a.constant=a.object.constant&&(!a.computed||a.property.constant);a.toWatch=[a];break;case s.CallExpression:d=a.filter?!b(a.callee.name).$stateful:!1;c=[];q(a.arguments,function(a){aa(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});a.constant=d;a.toWatch=a.filter&&!b(a.callee.name).$stateful?c:[a];break;case s.AssignmentExpression:aa(a.left,b);aa(a.right,b);a.constant=a.left.constant&&a.right.constant;
-a.toWatch=[a];break;case s.ArrayExpression:d=!0;c=[];q(a.elements,function(a){aa(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});a.constant=d;a.toWatch=c;break;case s.ObjectExpression:d=!0;c=[];q(a.properties,function(a){aa(a.value,b);d=d&&a.value.constant;a.value.constant||c.push.apply(c,a.value.toWatch)});a.constant=d;a.toWatch=c;break;case s.ThisExpression:a.constant=!1;a.toWatch=[];break;case s.LocalsExpression:a.constant=!1,a.toWatch=[]}}function od(a){if(1==a.length){a=a[0].expression;
-var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:void 0}}function pd(a){return a.type===s.Identifier||a.type===s.MemberExpression}function qd(a){if(1===a.body.length&&pd(a.body[0].expression))return{type:s.AssignmentExpression,left:a.body[0].expression,right:{type:s.NGValueParameter},operator:"="}}function rd(a){return 0===a.body.length||1===a.body.length&&(a.body[0].expression.type===s.Literal||a.body[0].expression.type===s.ArrayExpression||a.body[0].expression.type===s.ObjectExpression)}function sd(a,
-b){this.astBuilder=a;this.$filter=b}function td(a,b){this.astBuilder=a;this.$filter=b}function Hb(a){return"constructor"==a}function fc(a){return E(a.valueOf)?a.valueOf():kg.call(a)}function sf(){var a=T(),b=T(),d={"true":!0,"false":!1,"null":null,undefined:void 0},c,e;this.addLiteral=function(a,b){d[a]=b};this.setIdentifierFns=function(a,b){c=a;e=b;return this};this.$get=["$filter",function(f){function g(c,d,e){var g,k,D;e=e||H;switch(typeof c){case "string":D=c=c.trim();var q=e?b:a;g=q[D];if(!g){":"===
-c.charAt(0)&&":"===c.charAt(1)&&(k=!0,c=c.substring(2));g=e?p:w;var S=new gc(g);g=(new hc(S,f,g)).parse(c);g.constant?g.$$watchDelegate=r:k?g.$$watchDelegate=g.literal?m:n:g.inputs&&(g.$$watchDelegate=l);e&&(g=h(g));q[D]=g}return N(g,d);case "function":return N(c,d);default:return N(C,d)}}function h(a){function b(c,d,e,f){var g=H;H=!0;try{return a(c,d,e,f)}finally{H=g}}if(!a)return a;b.$$watchDelegate=a.$$watchDelegate;b.assign=h(a.assign);b.constant=a.constant;b.literal=a.literal;for(var c=0;a.inputs&&
-c<a.inputs.length;++c)a.inputs[c]=h(a.inputs[c]);b.inputs=a.inputs;return b}function k(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=fc(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function l(a,b,c,d,e){var f=d.inputs,g;if(1===f.length){var h=k,f=f[0];return a.$watch(function(a){var b=f(a);k(b,h)||(g=d(a,void 0,void 0,[b]),h=b&&fc(b));return g},b,c,e)}for(var l=[],m=[],n=0,r=f.length;n<r;n++)l[n]=k,m[n]=null;return a.$watch(function(a){for(var b=!1,c=0,e=f.length;c<e;c++){var h=f[c](a);
-if(b||(b=!k(h,l[c])))m[c]=h,l[c]=h&&fc(h)}b&&(g=d(a,void 0,void 0,m));return g},b,c,e)}function n(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a;E(b)&&b.apply(this,arguments);x(a)&&d.$$postDigest(function(){x(f)&&e()})},c)}function m(a,b,c,d){function e(a){var b=!0;q(a,function(a){x(a)||(b=!1)});return b}var f,g;return f=a.$watch(function(a){return d(a)},function(a,c,d){g=a;E(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function r(a,b,c,d){var e;
-return e=a.$watch(function(a){e();return d(a)},b,c)}function N(a,b){if(!b)return a;var c=a.$$watchDelegate,d=!1,c=c!==m&&c!==n?function(c,e,f,g){f=d&&g?g[0]:a(c,e,f,g);return b(f,c,e)}:function(c,d,e,f){e=a(c,d,e,f);c=b(e,c,d);return x(e)?c:e};a.$$watchDelegate&&a.$$watchDelegate!==l?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=l,d=!a.inputs,c.inputs=a.inputs?a.inputs:[a]);return c}var M=Ea().noUnsafeEval,w={csp:M,expensiveChecks:!1,literals:qa(d),isIdentifierStart:E(c)&&c,
-isIdentifierContinue:E(e)&&e},p={csp:M,expensiveChecks:!0,literals:qa(d),isIdentifierStart:E(c)&&c,isIdentifierContinue:E(e)&&e},H=!1;g.$$runningExpensiveChecks=function(){return H};return g}]}function uf(){this.$get=["$rootScope","$exceptionHandler",function(a,b){return ud(function(b){a.$evalAsync(b)},b)}]}function vf(){this.$get=["$browser","$exceptionHandler",function(a,b){return ud(function(b){a.defer(b)},b)}]}function ud(a,b){function d(){this.$$state={status:0}}function c(a,b){return function(c){b.call(a,
-c)}}function e(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,a(function(){var a,d,e;e=c.pending;c.processScheduled=!1;c.pending=void 0;for(var f=0,g=e.length;f<g;++f){d=e[f][0];a=e[f][c.status];try{E(a)?d.resolve(a(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),b(h)}}}))}function f(){this.promise=new d}var g=O("$q",TypeError);R(d.prototype,{then:function(a,b,c){if(y(a)&&y(b)&&y(c))return this;var d=new f;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,
-a,b,c]);0<this.$$state.status&&e(this.$$state);return d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return k(b,!0,a)},function(b){return k(b,!1,a)},b)}});R(f.prototype,{resolve:function(a){this.promise.$$state.status||(a===this.promise?this.$$reject(g("qcycle",a)):this.$$resolve(a))},$$resolve:function(a){function d(a){k||(k=!0,h.$$resolve(a))}function f(a){k||(k=!0,h.$$reject(a))}var g,h=this,k=!1;try{if(G(a)||E(a))g=a&&a.then;E(g)?
-(this.promise.$$state.status=-1,g.call(a,d,f,c(this,this.notify))):(this.promise.$$state.value=a,this.promise.$$state.status=1,e(this.promise.$$state))}catch(l){f(l),b(l)}},reject:function(a){this.promise.$$state.status||this.$$reject(a)},$$reject:function(a){this.promise.$$state.value=a;this.promise.$$state.status=2;e(this.promise.$$state)},notify:function(c){var d=this.promise.$$state.pending;0>=this.promise.$$state.status&&d&&d.length&&a(function(){for(var a,e,f=0,g=d.length;f<g;f++){e=d[f][0];
-a=d[f][3];try{e.notify(E(a)?a(c):c)}catch(h){b(h)}}})}});var h=function(a,b){var c=new f;b?c.resolve(a):c.reject(a);return c.promise},k=function(a,b,c){var d=null;try{E(c)&&(d=c())}catch(e){return h(e,!1)}return d&&E(d.then)?d.then(function(){return h(a,b)},function(a){return h(a,!1)}):h(a,b)},l=function(a,b,c,d){var e=new f;e.resolve(a);return e.promise.then(b,c,d)},n=function(a){if(!E(a))throw g("norslvr",a);var b=new f;a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise};n.prototype=
-d.prototype;n.defer=function(){var a=new f;a.resolve=c(a,a.resolve);a.reject=c(a,a.reject);a.notify=c(a,a.notify);return a};n.reject=function(a){var b=new f;b.reject(a);return b.promise};n.when=l;n.resolve=l;n.all=function(a){var b=new f,c=0,d=K(a)?[]:{};q(a,function(a,e){c++;l(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&b.resolve(d);return b.promise};return n}function Ef(){this.$get=["$window","$timeout",function(a,
-b){var d=a.requestAnimationFrame||a.webkitRequestAnimationFrame,c=a.cancelAnimationFrame||a.webkitCancelAnimationFrame||a.webkitCancelRequestAnimationFrame,e=!!d,f=e?function(a){var b=d(a);return function(){c(b)}}:function(a){var c=b(a,16.66,!1);return function(){b.cancel(c)}};f.supported=e;return f}]}function tf(){function a(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++nb;this.$$ChildScope=
-null}b.prototype=a;return b}var b=10,d=O("$rootScope"),c=null,e=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$exceptionHandler","$parse","$browser",function(f,g,h){function k(a){a.currentScope.$$destroyed=!0}function l(a){9===Ca&&(a.$$childHead&&l(a.$$childHead),a.$$nextSibling&&l(a.$$nextSibling));a.$parent=a.$$nextSibling=a.$$prevSibling=a.$$childHead=a.$$childTail=a.$root=a.$$watchers=null}function n(){this.$id=++nb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=
-this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$$isolateBindings=null}function m(a){if(H.$$phase)throw d("inprog",H.$$phase);H.$$phase=a}function r(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function N(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function s(){}function w(){for(;u.length;)try{u.shift()()}catch(a){f(a)}e=
-null}function p(){null===e&&(e=h.defer(function(){H.$apply(w)}))}n.prototype={constructor:n,$new:function(b,c){var d;c=c||this;b?(d=new n,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=a(this)),d=new this.$$ChildScope);d.$parent=c;d.$$prevSibling=c.$$childTail;c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=d):c.$$childHead=c.$$childTail=d;(b||c!=this)&&d.$on("$destroy",k);return d},$watch:function(a,b,d,e){var f=g(a);if(f.$$watchDelegate)return f.$$watchDelegate(this,b,d,f,
-a);var h=this,k=h.$$watchers,l={fn:b,last:s,get:f,exp:e||a,eq:!!d};c=null;E(b)||(l.fn=C);k||(k=h.$$watchers=[]);k.unshift(l);r(this,1);return function(){0<=Za(k,l)&&r(h,-1);c=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});q(a,function(a,
-b){var k=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(k)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!y(e)){if(G(e))if(ya(e))for(f!==m&&(f=m,t=f.length=0,l++),a=e.length,t!==a&&(l++,f.length=t=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==r&&(f=r={},t=0,l++);a=0;for(b in e)ua.call(e,b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(t++,f[b]=g,l++));if(t>
-a)for(b in l++,f)ua.call(e,b)||(t--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,h,k=1<b.length,l=0,n=g(a,c),m=[],r={},p=!0,t=0;return this.$watch(n,function(){p?(p=!1,b(e,e,d)):b(e,h,d);if(k)if(G(e))if(ya(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)ua.call(e,a)&&(h[a]=e[a]);else h=e})},$digest:function(){var a,g,k,l,n,r,p,q,N=b,u,x=[],y,v;m("$digest");h.$$checkUrlChange();this===H&&null!==e&&(h.defer.cancel(e),w());c=null;do{q=!1;
-for(u=this;t.length;){try{v=t.shift(),v.scope.$eval(v.expression,v.locals)}catch(C){f(C)}c=null}a:do{if(r=u.$$watchers)for(p=r.length;p--;)try{if(a=r[p])if(n=a.get,(g=n(u))!==(k=a.last)&&!(a.eq?pa(g,k):"number"===typeof g&&"number"===typeof k&&isNaN(g)&&isNaN(k)))q=!0,c=a,a.last=a.eq?qa(g,null):g,l=a.fn,l(g,k===s?g:k,u),5>N&&(y=4-N,x[y]||(x[y]=[]),x[y].push({msg:E(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):a.exp,newVal:g,oldVal:k}));else if(a===c){q=!1;break a}}catch(F){f(F)}if(!(r=u.$$watchersCount&&
-u.$$childHead||u!==this&&u.$$nextSibling))for(;u!==this&&!(r=u.$$nextSibling);)u=u.$parent}while(u=r);if((q||t.length)&&!N--)throw H.$$phase=null,d("infdig",b,x);}while(q||t.length);for(H.$$phase=null;z.length;)try{z.shift()()}catch(B){f(B)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===H&&h.$$applicationDestroyed();r(this,-this.$$watchersCount);for(var b in this.$$listenerCount)N(this,this.$$listenerCount[b],b);a&&a.$$childHead==
-this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=C;this.$on=this.$watch=this.$watchGroup=function(){return C};this.$$listeners={};this.$$nextSibling=null;l(this)}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a,b){H.$$phase||
-t.length||h.defer(function(){t.length&&H.$digest()});t.push({scope:this,expression:g(a),locals:b})},$$postDigest:function(a){z.push(a)},$apply:function(a){try{m("$apply");try{return this.$eval(a)}finally{H.$$phase=null}}catch(b){f(b)}finally{try{H.$digest()}catch(c){throw f(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&u.push(b);a=g(a);p()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=
-0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,N(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=$a([h],arguments,1),l,n;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(n=d.length;l<n;l++)if(d[l])try{d[l].apply(null,k)}catch(m){f(m)}else d.splice(l,1),l--,n--;if(g)return h.currentScope=null,h;e=e.$parent}while(e);
-h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;for(var g=$a([e],arguments,1),h,k;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,g)}catch(l){f(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}e.currentScope=
-null;return e}};var H=new n,t=H.$$asyncQueue=[],z=H.$$postDigestQueue=[],u=H.$$applyAsyncQueue=[];return H}]}function me(){var a=/^\s*(https?|ftp|mailto|tel|file):/,b=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(b){return x(b)?(a=b,this):a};this.imgSrcSanitizationWhitelist=function(a){return x(a)?(b=a,this):b};this.$get=function(){return function(d,c){var e=c?b:a,f;f=ra(d).href;return""===f||f.match(e)?d:"unsafe:"+f}}}function lg(a){if("self"===a)return a;
-if(F(a)){if(-1<a.indexOf("***"))throw ta("iwcard",a);a=vd(a).replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return new RegExp("^"+a+"$")}if(Wa(a))return new RegExp("^"+a.source+"$");throw ta("imatcher");}function wd(a){var b=[];x(a)&&q(a,function(a){b.push(lg(a))});return b}function xf(){this.SCE_CONTEXTS=oa;var a=["self"],b=[];this.resourceUrlWhitelist=function(b){arguments.length&&(a=wd(b));return a};this.resourceUrlBlacklist=function(a){arguments.length&&(b=wd(a));return b};this.$get=["$injector",
-function(d){function c(a,b){return"self"===a?hd(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw ta("unsafe");};d.has("$sanitize")&&(f=d.get("$sanitize"));var g=e(),h={};h[oa.HTML]=e(g);h[oa.CSS]=e(g);h[oa.URL]=e(g);h[oa.JS]=e(g);h[oa.RESOURCE_URL]=
-e(h[oa.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw ta("icontext",a,b);if(null===b||y(b)||""===b)return b;if("string"!==typeof b)throw ta("itype",a);return new c(b)},getTrusted:function(d,e){if(null===e||y(e)||""===e)return e;var g=h.hasOwnProperty(d)?h[d]:null;if(g&&e instanceof g)return e.$$unwrapTrustedValue();if(d===oa.RESOURCE_URL){var g=ra(e.toString()),m,r,q=!1;m=0;for(r=a.length;m<r;m++)if(c(a[m],g)){q=!0;break}if(q)for(m=0,r=b.length;m<r;m++)if(c(b[m],
-g)){q=!1;break}if(q)return e;throw ta("insecurl",e.toString());}if(d===oa.HTML)return f(e);throw ta("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function wf(){var a=!0;this.enabled=function(b){arguments.length&&(a=!!b);return a};this.$get=["$parse","$sceDelegate",function(b,d){if(a&&8>Ca)throw ta("iequirks");var c=ha(oa);c.isEnabled=function(){return a};c.trustAs=d.trustAs;c.getTrusted=d.getTrusted;c.valueOf=d.valueOf;a||(c.trustAs=c.getTrusted=function(a,b){return b},
-c.valueOf=Xa);c.parseAs=function(a,d){var e=b(d);return e.literal&&e.constant?e:b(d,function(b){return c.getTrusted(a,b)})};var e=c.parseAs,f=c.getTrusted,g=c.trustAs;q(oa,function(a,b){var d=P(b);c[cb("parse_as_"+d)]=function(b){return e(a,b)};c[cb("get_trusted_"+d)]=function(b){return f(a,b)};c[cb("trust_as_"+d)]=function(b){return g(a,b)}});return c}]}function yf(){this.$get=["$window","$document",function(a,b){var d={},c=!(a.chrome&&a.chrome.app&&a.chrome.app.runtime)&&a.history&&a.history.pushState,
-e=X((/android (\d+)/.exec(P((a.navigator||{}).userAgent))||[])[1]),f=/Boxee/i.test((a.navigator||{}).userAgent),g=b[0]||{},h,k=/^(Moz|webkit|ms)(?=[A-Z])/,l=g.body&&g.body.style,n=!1,m=!1;if(l){for(var r in l)if(n=k.exec(r)){h=n[0];h=h.substr(0,1).toUpperCase()+h.substr(1);break}h||(h="WebkitOpacity"in l&&"webkit");n=!!("transition"in l||h+"Transition"in l);m=!!("animation"in l||h+"Animation"in l);!e||n&&m||(n=F(l.webkitTransition),m=F(l.webkitAnimation))}return{history:!(!c||4>e||f),hasEvent:function(a){if("input"===
-a&&11>=Ca)return!1;if(y(d[a])){var b=g.createElement("div");d[a]="on"+a in b}return d[a]},csp:Ea(),vendorPrefix:h,transitions:n,animations:m,android:e}}]}function Af(){var a;this.httpOptions=function(b){return b?(a=b,this):a};this.$get=["$templateCache","$http","$q","$sce",function(b,d,c,e){function f(g,h){f.totalPendingRequests++;F(g)&&b.get(g)||(g=e.getTrustedResourceUrl(g));var k=d.defaults&&d.defaults.transformResponse;K(k)?k=k.filter(function(a){return a!==ac}):k===ac&&(k=null);return d.get(g,
-R({cache:b,transformResponse:k},a))["finally"](function(){f.totalPendingRequests--}).then(function(a){b.put(g,a.data);return a.data},function(a){if(!h)throw mg("tpload",g,a.status,a.statusText);return c.reject(a)})}f.totalPendingRequests=0;return f}]}function Bf(){this.$get=["$rootScope","$browser","$location",function(a,b,d){return{findBindings:function(a,b,d){a=a.getElementsByClassName("ng-binding");var g=[];q(a,function(a){var c=ea.element(a).data("$binding");c&&q(c,function(c){d?(new RegExp("(^|\\s)"+
-vd(b)+"(\\s|\\||$)")).test(c)&&g.push(a):-1!=c.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,d){for(var g=["ng-","data-ng-","ng\\:"],h=0;h<g.length;++h){var k=a.querySelectorAll("["+g[h]+"model"+(d?"=":"*=")+'"'+b+'"]');if(k.length)return k}},getLocation:function(){return d.url()},setLocation:function(b){b!==d.url()&&(d.url(b),a.$digest())},whenStable:function(a){b.notifyWhenNoOutstandingRequests(a)}}}]}function Cf(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",
-function(a,b,d,c,e){function f(f,k,l){E(f)||(l=k,k=f,f=C);var n=za.call(arguments,3),m=x(l)&&!l,r=(m?c:d).defer(),q=r.promise,s;s=b.defer(function(){try{r.resolve(f.apply(null,n))}catch(b){r.reject(b),e(b)}finally{delete g[q.$$timeoutId]}m||a.$apply()},k);q.$$timeoutId=s;g[s]=r;return q}var g={};f.cancel=function(a){return a&&a.$$timeoutId in g?(g[a.$$timeoutId].reject("canceled"),delete g[a.$$timeoutId],b.defer.cancel(a.$$timeoutId)):!1};return f}]}function ra(a){Ca&&(Y.setAttribute("href",a),a=
-Y.href);Y.setAttribute("href",a);return{href:Y.href,protocol:Y.protocol?Y.protocol.replace(/:$/,""):"",host:Y.host,search:Y.search?Y.search.replace(/^\?/,""):"",hash:Y.hash?Y.hash.replace(/^#/,""):"",hostname:Y.hostname,port:Y.port,pathname:"/"===Y.pathname.charAt(0)?Y.pathname:"/"+Y.pathname}}function hd(a){a=F(a)?ra(a):a;return a.protocol===xd.protocol&&a.host===xd.host}function Df(){this.$get=da(v)}function yd(a){function b(a){try{return decodeURIComponent(a)}catch(b){return a}}var d=a[0]||{},
-c={},e="";return function(){var a,g,h,k,l;a=d.cookie||"";if(a!==e)for(e=a,a=e.split("; "),c={},h=0;h<a.length;h++)g=a[h],k=g.indexOf("="),0<k&&(l=b(g.substring(0,k)),y(c[l])&&(c[l]=b(g.substring(k+1))));return c}}function Hf(){this.$get=yd}function Jc(a){function b(d,c){if(G(d)){var e={};q(d,function(a,c){e[c]=b(c,a)});return e}return a.factory(d+"Filter",c)}this.register=b;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];b("currency",zd);b("date",Ad);b("filter",ng);
-b("json",og);b("limitTo",pg);b("lowercase",qg);b("number",Bd);b("orderBy",Cd);b("uppercase",rg)}function ng(){return function(a,b,d){if(!ya(a)){if(null==a)return a;throw O("filter")("notarray",a);}var c;switch(ic(b)){case "function":break;case "boolean":case "null":case "number":case "string":c=!0;case "object":b=sg(b,d,c);break;default:return a}return Array.prototype.filter.call(a,b)}}function sg(a,b,d){var c=G(a)&&"$"in a;!0===b?b=pa:E(b)||(b=function(a,b){if(y(a))return!1;if(null===a||null===b)return a===
-b;if(G(b)||G(a)&&!rc(a))return!1;a=P(""+a);b=P(""+b);return-1!==a.indexOf(b)});return function(e){return c&&!G(e)?Ka(e,a.$,b,!1):Ka(e,a,b,d)}}function Ka(a,b,d,c,e){var f=ic(a),g=ic(b);if("string"===g&&"!"===b.charAt(0))return!Ka(a,b.substring(1),d,c);if(K(a))return a.some(function(a){return Ka(a,b,d,c)});switch(f){case "object":var h;if(c){for(h in a)if("$"!==h.charAt(0)&&Ka(a[h],b,d,!0))return!0;return e?!1:Ka(a,b,d,!1)}if("object"===g){for(h in b)if(e=b[h],!E(e)&&!y(e)&&(f="$"===h,!Ka(f?a:a[h],
-e,d,f,f)))return!1;return!0}return d(a,b);case "function":return!1;default:return d(a,b)}}function ic(a){return null===a?"null":typeof a}function zd(a){var b=a.NUMBER_FORMATS;return function(a,c,e){y(c)&&(c=b.CURRENCY_SYM);y(e)&&(e=b.PATTERNS[1].maxFrac);return null==a?a:Dd(a,b.PATTERNS[1],b.GROUP_SEP,b.DECIMAL_SEP,e).replace(/\u00A4/g,c)}}function Bd(a){var b=a.NUMBER_FORMATS;return function(a,c){return null==a?a:Dd(a,b.PATTERNS[0],b.GROUP_SEP,b.DECIMAL_SEP,c)}}function tg(a){var b=0,d,c,e,f,g;-1<
-(c=a.indexOf(Ed))&&(a=a.replace(Ed,""));0<(e=a.search(/e/i))?(0>c&&(c=e),c+=+a.slice(e+1),a=a.substring(0,e)):0>c&&(c=a.length);for(e=0;a.charAt(e)==jc;e++);if(e==(g=a.length))d=[0],c=1;else{for(g--;a.charAt(g)==jc;)g--;c-=e;d=[];for(f=0;e<=g;e++,f++)d[f]=+a.charAt(e)}c>Fd&&(d=d.splice(0,Fd-1),b=c-1,c=1);return{d:d,e:b,i:c}}function ug(a,b,d,c){var e=a.d,f=e.length-a.i;b=y(b)?Math.min(Math.max(d,f),c):+b;d=b+a.i;c=e[d];if(0<d){e.splice(Math.max(a.i,d));for(var g=d;g<e.length;g++)e[g]=0}else for(f=
-Math.max(0,f),a.i=1,e.length=Math.max(1,d=b+1),e[0]=0,g=1;g<d;g++)e[g]=0;if(5<=c)if(0>d-1){for(c=0;c>d;c--)e.unshift(0),a.i++;e.unshift(1);a.i++}else e[d-1]++;for(;f<Math.max(0,b);f++)e.push(0);if(b=e.reduceRight(function(a,b,c,d){b+=a;d[c]=b%10;return Math.floor(b/10)},0))e.unshift(b),a.i++}function Dd(a,b,d,c,e){if(!F(a)&&!Q(a)||isNaN(a))return"";var f=!isFinite(a),g=!1,h=Math.abs(a)+"",k="";if(f)k="\u221e";else{g=tg(h);ug(g,e,b.minFrac,b.maxFrac);k=g.d;h=g.i;e=g.e;f=[];for(g=k.reduce(function(a,
-b){return a&&!b},!0);0>h;)k.unshift(0),h++;0<h?f=k.splice(h):(f=k,k=[0]);h=[];for(k.length>=b.lgSize&&h.unshift(k.splice(-b.lgSize).join(""));k.length>b.gSize;)h.unshift(k.splice(-b.gSize).join(""));k.length&&h.unshift(k.join(""));k=h.join(d);f.length&&(k+=c+f.join(""));e&&(k+="e+"+e)}return 0>a&&!g?b.negPre+k+b.negSuf:b.posPre+k+b.posSuf}function Ib(a,b,d,c){var e="";if(0>a||c&&0>=a)c?a=-a+1:(a=-a,e="-");for(a=""+a;a.length<b;)a=jc+a;d&&(a=a.substr(a.length-b));return e+a}function W(a,b,d,c,e){d=
-d||0;return function(f){f=f["get"+a]();if(0<d||f>-d)f+=d;0===f&&-12==d&&(f=12);return Ib(f,b,c,e)}}function ib(a,b,d){return function(c,e){var f=c["get"+a](),g=sb((d?"STANDALONE":"")+(b?"SHORT":"")+a);return e[g][f]}}function Gd(a){var b=(new Date(a,0,1)).getDay();return new Date(a,0,(4>=b?5:12)-b)}function Hd(a){return function(b){var d=Gd(b.getFullYear());b=+new Date(b.getFullYear(),b.getMonth(),b.getDate()+(4-b.getDay()))-+d;b=1+Math.round(b/6048E5);return Ib(b,a)}}function kc(a,b){return 0>=a.getFullYear()?
-b.ERAS[0]:b.ERAS[1]}function Ad(a){function b(a){var b;if(b=a.match(d)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,k=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=X(b[9]+b[10]),g=X(b[9]+b[11]));h.call(a,X(b[1]),X(b[2])-1,X(b[3]));f=X(b[4]||0)-f;g=X(b[5]||0)-g;h=X(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));k.call(a,f,g,h,b)}return a}var d=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,d,f){var g="",h=
-[],k,l;d=d||"mediumDate";d=a.DATETIME_FORMATS[d]||d;F(c)&&(c=vg.test(c)?X(c):b(c));Q(c)&&(c=new Date(c));if(!fa(c)||!isFinite(c.getTime()))return c;for(;d;)(l=wg.exec(d))?(h=$a(h,l,1),d=h.pop()):(h.push(d),d=null);var n=c.getTimezoneOffset();f&&(n=vc(f,n),c=Qb(c,f,!0));q(h,function(b){k=xg[b];g+=k?k(c,a.DATETIME_FORMATS,n):"''"===b?"'":b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function og(){return function(a,b){y(b)&&(b=2);return ab(a,b)}}function pg(){return function(a,b,d){b=Infinity===
-Math.abs(Number(b))?Number(b):X(b);if(isNaN(b))return a;Q(a)&&(a=a.toString());if(!K(a)&&!F(a))return a;d=!d||isNaN(d)?0:X(d);d=0>d?Math.max(0,a.length+d):d;return 0<=b?a.slice(d,d+b):0===d?a.slice(b,a.length):a.slice(Math.max(0,d+b),d)}}function Cd(a){function b(b,d){d=d?-1:1;return b.map(function(b){var c=1,h=Xa;if(E(b))h=b;else if(F(b)){if("+"==b.charAt(0)||"-"==b.charAt(0))c="-"==b.charAt(0)?-1:1,b=b.substring(1);if(""!==b&&(h=a(b),h.constant))var k=h(),h=function(a){return a[k]}}return{get:h,
-descending:c*d}})}function d(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}return function(a,e,f){if(null==a)return a;if(!ya(a))throw O("orderBy")("notarray",a);K(e)||(e=[e]);0===e.length&&(e=["+"]);var g=b(e,f);g.push({get:function(){return{}},descending:f?-1:1});a=Array.prototype.map.call(a,function(a,b){return{value:a,predicateValues:g.map(function(c){var e=c.get(a);c=typeof e;if(null===e)c="string",e="null";else if("string"===c)e=e.toLowerCase();else if("object"===
-c)a:{if("function"===typeof e.valueOf&&(e=e.valueOf(),d(e)))break a;if(rc(e)&&(e=e.toString(),d(e)))break a;e=b}return{value:e,type:c}})}});a.sort(function(a,b){for(var c=0,d=0,e=g.length;d<e;++d){var c=a.predicateValues[d],f=b.predicateValues[d],q=0;c.type===f.type?c.value!==f.value&&(q=c.value<f.value?-1:1):q=c.type<f.type?-1:1;if(c=q*g[d].descending)break}return c});return a=a.map(function(a){return a.value})}}function La(a){E(a)&&(a={link:a});a.restrict=a.restrict||"AC";return da(a)}function Id(a,
-b,d,c,e){var f=this,g=[];f.$error={};f.$$success={};f.$pending=void 0;f.$name=e(b.name||b.ngForm||"")(d);f.$dirty=!1;f.$pristine=!0;f.$valid=!0;f.$invalid=!1;f.$submitted=!1;f.$$parentForm=Jb;f.$rollbackViewValue=function(){q(g,function(a){a.$rollbackViewValue()})};f.$commitViewValue=function(){q(g,function(a){a.$commitViewValue()})};f.$addControl=function(a){Qa(a.$name,"input");g.push(a);a.$name&&(f[a.$name]=a);a.$$parentForm=f};f.$$renameControl=function(a,b){var c=a.$name;f[c]===a&&delete f[c];
-f[b]=a;a.$name=b};f.$removeControl=function(a){a.$name&&f[a.$name]===a&&delete f[a.$name];q(f.$pending,function(b,c){f.$setValidity(c,null,a)});q(f.$error,function(b,c){f.$setValidity(c,null,a)});q(f.$$success,function(b,c){f.$setValidity(c,null,a)});Za(g,a);a.$$parentForm=Jb};Jd({ctrl:this,$element:a,set:function(a,b,c){var d=a[b];d?-1===d.indexOf(c)&&d.push(c):a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(Za(d,c),0===d.length&&delete a[b])},$animate:c});f.$setDirty=function(){c.removeClass(a,Ua);
-c.addClass(a,Kb);f.$dirty=!0;f.$pristine=!1;f.$$parentForm.$setDirty()};f.$setPristine=function(){c.setClass(a,Ua,Kb+" ng-submitted");f.$dirty=!1;f.$pristine=!0;f.$submitted=!1;q(g,function(a){a.$setPristine()})};f.$setUntouched=function(){q(g,function(a){a.$setUntouched()})};f.$setSubmitted=function(){c.addClass(a,"ng-submitted");f.$submitted=!0;f.$$parentForm.$setSubmitted()}}function lc(a){a.$formatters.push(function(b){return a.$isEmpty(b)?b:b.toString()})}function jb(a,b,d,c,e,f){var g=P(b[0].type);
-if(!e.android){var h=!1;b.on("compositionstart",function(){h=!0});b.on("compositionend",function(){h=!1;l()})}var k,l=function(a){k&&(f.defer.cancel(k),k=null);if(!h){var e=b.val();a=a&&a.type;"password"===g||d.ngTrim&&"false"===d.ngTrim||(e=V(e));(c.$viewValue!==e||""===e&&c.$$hasNativeValidators)&&c.$setViewValue(e,a)}};if(e.hasEvent("input"))b.on("input",l);else{var n=function(a,b,c){k||(k=f.defer(function(){k=null;b&&b.value===c||l(a)}))};b.on("keydown",function(a){var b=a.keyCode;91===b||15<
-b&&19>b||37<=b&&40>=b||n(a,this,this.value)});if(e.hasEvent("paste"))b.on("paste cut",n)}b.on("change",l);if(Kd[g]&&c.$$hasNativeValidators&&g===d.type)b.on("keydown wheel mousedown",function(a){if(!k){var b=this.validity,c=b.badInput,d=b.typeMismatch;k=f.defer(function(){k=null;b.badInput===c&&b.typeMismatch===d||l(a)})}});c.$render=function(){var a=c.$isEmpty(c.$viewValue)?"":c.$viewValue;b.val()!==a&&b.val(a)}}function Lb(a,b){return function(d,c){var e,f;if(fa(d))return d;if(F(d)){'"'==d.charAt(0)&&
-'"'==d.charAt(d.length-1)&&(d=d.substring(1,d.length-1));if(yg.test(d))return new Date(d);a.lastIndex=0;if(e=a.exec(d))return e.shift(),f=c?{yyyy:c.getFullYear(),MM:c.getMonth()+1,dd:c.getDate(),HH:c.getHours(),mm:c.getMinutes(),ss:c.getSeconds(),sss:c.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},q(e,function(a,c){c<b.length&&(f[b[c]]=+a)}),new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0)}return NaN}}function kb(a,b,d,c){return function(e,f,g,h,k,l,n){function m(a){return a&&
-!(a.getTime&&a.getTime()!==a.getTime())}function r(a){return x(a)&&!fa(a)?d(a)||void 0:a}Ld(e,f,g,h);jb(e,f,g,h,k,l);var q=h&&h.$options&&h.$options.timezone,s;h.$$parserName=a;h.$parsers.push(function(a){if(h.$isEmpty(a))return null;if(b.test(a))return a=d(a,s),q&&(a=Qb(a,q)),a});h.$formatters.push(function(a){if(a&&!fa(a))throw lb("datefmt",a);if(m(a))return(s=a)&&q&&(s=Qb(s,q,!0)),n("date")(a,c,q);s=null;return""});if(x(g.min)||g.ngMin){var w;h.$validators.min=function(a){return!m(a)||y(w)||d(a)>=
-w};g.$observe("min",function(a){w=r(a);h.$validate()})}if(x(g.max)||g.ngMax){var p;h.$validators.max=function(a){return!m(a)||y(p)||d(a)<=p};g.$observe("max",function(a){p=r(a);h.$validate()})}}}function Ld(a,b,d,c){(c.$$hasNativeValidators=G(b[0].validity))&&c.$parsers.push(function(a){var c=b.prop("validity")||{};return c.badInput||c.typeMismatch?void 0:a})}function Md(a,b,d,c,e){if(x(c)){a=a(c);if(!a.constant)throw lb("constexpr",d,c);return a(b)}return e}function mc(a,b){a="ngClass"+a;return["$animate",
-function(d){function c(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],n=0;n<b.length;n++)if(e==b[n])continue a;c.push(e)}return c}function e(a){var b=[];return K(a)?(q(a,function(a){b=b.concat(e(a))}),b):F(a)?a.split(" "):G(a)?(q(a,function(a,c){a&&(b=b.concat(c.split(" ")))}),b):a}return{restrict:"AC",link:function(f,g,h){function k(a){a=l(a,1);h.$addClass(a)}function l(a,b){var c=g.data("$classCounts")||T(),d=[];q(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});g.data("$classCounts",
-c);return d.join(" ")}function n(a,b){var e=c(b,a),f=c(a,b),e=l(e,1),f=l(f,-1);e&&e.length&&d.addClass(g,e);f&&f.length&&d.removeClass(g,f)}function m(a){if(!0===b||f.$index%2===b){var c=e(a||[]);if(!r)k(c);else if(!pa(a,r)){var d=e(r);n(d,c)}}r=K(a)?a.map(function(a){return ha(a)}):ha(a)}var r;f.$watch(h[a],m,!0);h.$observe("class",function(b){m(f.$eval(h[a]))});"ngClass"!==a&&f.$watch("$index",function(c,d){var g=c&1;if(g!==(d&1)){var m=e(f.$eval(h[a]));g===b?k(m):(g=l(m,-1),h.$removeClass(g))}})}}}]}
-function Jd(a){function b(a,b){b&&!f[a]?(k.addClass(e,a),f[a]=!0):!b&&f[a]&&(k.removeClass(e,a),f[a]=!1)}function d(a,c){a=a?"-"+zc(a,"-"):"";b(mb+a,!0===c);b(Nd+a,!1===c)}var c=a.ctrl,e=a.$element,f={},g=a.set,h=a.unset,k=a.$animate;f[Nd]=!(f[mb]=e.hasClass(mb));c.$setValidity=function(a,e,f){y(e)?(c.$pending||(c.$pending={}),g(c.$pending,a,f)):(c.$pending&&h(c.$pending,a,f),Od(c.$pending)&&(c.$pending=void 0));Da(e)?e?(h(c.$error,a,f),g(c.$$success,a,f)):(g(c.$error,a,f),h(c.$$success,a,f)):(h(c.$error,
-a,f),h(c.$$success,a,f));c.$pending?(b(Pd,!0),c.$valid=c.$invalid=void 0,d("",null)):(b(Pd,!1),c.$valid=Od(c.$error),c.$invalid=!c.$valid,d("",c.$valid));e=c.$pending&&c.$pending[a]?void 0:c.$error[a]?!1:c.$$success[a]?!0:null;d(a,e);c.$$parentForm.$setValidity(a,e,c)}}function Od(a){if(a)for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}var zg=/^\/(.+)\/([a-z]*)$/,ua=Object.prototype.hasOwnProperty,P=function(a){return F(a)?a.toLowerCase():a},sb=function(a){return F(a)?a.toUpperCase():a},Ca,
-B,Z,za=[].slice,Zf=[].splice,Ag=[].push,ma=Object.prototype.toString,sc=Object.getPrototypeOf,Aa=O("ng"),ea=v.angular||(v.angular={}),Sb,nb=0;Ca=v.document.documentMode;C.$inject=[];Xa.$inject=[];var K=Array.isArray,$d=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array\]$/,V=function(a){return F(a)?a.trim():a},vd=function(a){return a.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},Ea=function(){if(!x(Ea.rules)){var a=v.document.querySelector("[ng-csp]")||
-v.document.querySelector("[data-ng-csp]");if(a){var b=a.getAttribute("ng-csp")||a.getAttribute("data-ng-csp");Ea.rules={noUnsafeEval:!b||-1!==b.indexOf("no-unsafe-eval"),noInlineStyle:!b||-1!==b.indexOf("no-inline-style")}}else{a=Ea;try{new Function(""),b=!1}catch(d){b=!0}a.rules={noUnsafeEval:b,noInlineStyle:!1}}}return Ea.rules},pb=function(){if(x(pb.name_))return pb.name_;var a,b,d=Na.length,c,e;for(b=0;b<d;++b)if(c=Na[b],a=v.document.querySelector("["+c.replace(":","\\:")+"jq]")){e=a.getAttribute(c+
-"jq");break}return pb.name_=e},ce=/:/g,Na=["ng-","data-ng-","ng:","x-ng-"],he=/[A-Z]/g,Ac=!1,Ma=3,le={full:"1.5.5",major:1,minor:5,dot:5,codeName:"material-conspiration"};U.expando="ng339";var eb=U.cache={},Nf=1;U._data=function(a){return this.cache[a[this.expando]]||{}};var If=/([\:\-\_]+(.))/g,Jf=/^moz([A-Z])/,wb={mouseleave:"mouseout",mouseenter:"mouseover"},Ub=O("jqLite"),Mf=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,Tb=/<|&#?\w+;/,Kf=/<([\w:-]+)/,Lf=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,
-ia={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ia.optgroup=ia.option;ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead;ia.th=ia.td;var Sf=v.Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)&16)},Oa=U.prototype={ready:function(a){function b(){d||(d=!0,a())}var d=!1;"complete"===
-v.document.readyState?v.setTimeout(b):(this.on("DOMContentLoaded",b),U(v).on("load",b))},toString:function(){var a=[];q(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},eq:function(a){return 0<=a?B(this[a]):B(this[this.length+a])},length:0,push:Ag,sort:[].sort,splice:[].splice},Cb={};q("multiple selected checked disabled readOnly required open".split(" "),function(a){Cb[P(a)]=a});var Sc={};q("input select option textarea button form details".split(" "),function(a){Sc[a]=!0});var ad={ngMinlength:"minlength",
-ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};q({data:Wb,removeData:db,hasData:function(a){for(var b in eb[a.ng339])return!0;return!1},cleanData:function(a){for(var b=0,d=a.length;b<d;b++)db(a[b])}},function(a,b){U[b]=a});q({data:Wb,inheritedData:Ab,scope:function(a){return B.data(a,"$scope")||Ab(a.parentNode||a,["$isolateScope","$scope"])},isolateScope:function(a){return B.data(a,"$isolateScope")||B.data(a,"$isolateScopeNoTemplate")},controller:Pc,injector:function(a){return Ab(a,
-"$injector")},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:xb,css:function(a,b,d){b=cb(b);if(x(d))a.style[b]=d;else return a.style[b]},attr:function(a,b,d){var c=a.nodeType;if(c!==Ma&&2!==c&&8!==c)if(c=P(b),Cb[c])if(x(d))d?(a[b]=!0,a.setAttribute(b,c)):(a[b]=!1,a.removeAttribute(c));else return a[b]||(a.attributes.getNamedItem(b)||C).specified?c:void 0;else if(x(d))a.setAttribute(b,d);else if(a.getAttribute)return a=a.getAttribute(b,2),null===a?void 0:a},prop:function(a,b,d){if(x(d))a[b]=
-d;else return a[b]},text:function(){function a(a,d){if(y(d)){var c=a.nodeType;return 1===c||c===Ma?a.textContent:""}a.textContent=d}a.$dv="";return a}(),val:function(a,b){if(y(b)){if(a.multiple&&"select"===va(a)){var d=[];q(a.options,function(a){a.selected&&d.push(a.value||a.text)});return 0===d.length?null:d}return a.value}a.value=b},html:function(a,b){if(y(b))return a.innerHTML;ub(a,!0);a.innerHTML=b},empty:Qc},function(a,b){U.prototype[b]=function(b,c){var e,f,g=this.length;if(a!==Qc&&y(2==a.length&&
-a!==xb&&a!==Pc?b:c)){if(G(b)){for(e=0;e<g;e++)if(a===Wb)a(this[e],b);else for(f in b)a(this[e],f,b[f]);return this}e=a.$dv;g=y(e)?Math.min(g,1):g;for(f=0;f<g;f++){var h=a(this[f],b,c);e=e?e+h:h}return e}for(e=0;e<g;e++)a(this[e],b,c);return this}});q({removeData:db,on:function(a,b,d,c){if(x(c))throw Ub("onargs");if(Kc(a)){c=vb(a,!0);var e=c.events,f=c.handle;f||(f=c.handle=Pf(a,e));c=0<=b.indexOf(" ")?b.split(" "):[b];for(var g=c.length,h=function(b,c,g){var h=e[b];h||(h=e[b]=[],h.specialHandlerWrapper=
-c,"$destroy"===b||g||a.addEventListener(b,f,!1));h.push(d)};g--;)b=c[g],wb[b]?(h(wb[b],Rf),h(b,void 0,!0)):h(b)}},off:Oc,one:function(a,b,d){a=B(a);a.on(b,function e(){a.off(b,d);a.off(b,e)});a.on(b,d)},replaceWith:function(a,b){var d,c=a.parentNode;ub(a);q(new U(b),function(b){d?c.insertBefore(b,d.nextSibling):c.replaceChild(b,a);d=b})},children:function(a){var b=[];q(a.childNodes,function(a){1===a.nodeType&&b.push(a)});return b},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,
-b){var d=a.nodeType;if(1===d||11===d){b=new U(b);for(var d=0,c=b.length;d<c;d++)a.appendChild(b[d])}},prepend:function(a,b){if(1===a.nodeType){var d=a.firstChild;q(new U(b),function(b){a.insertBefore(b,d)})}},wrap:function(a,b){Mc(a,B(b).eq(0).clone()[0])},remove:Bb,detach:function(a){Bb(a,!0)},after:function(a,b){var d=a,c=a.parentNode;b=new U(b);for(var e=0,f=b.length;e<f;e++){var g=b[e];c.insertBefore(g,d.nextSibling);d=g}},addClass:zb,removeClass:yb,toggleClass:function(a,b,d){b&&q(b.split(" "),
-function(b){var e=d;y(e)&&(e=!xb(a,b));(e?zb:yb)(a,b)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},find:function(a,b){return a.getElementsByTagName?a.getElementsByTagName(b):[]},clone:Vb,triggerHandler:function(a,b,d){var c,e,f=b.type||b,g=vb(a);if(g=(g=g&&g.events)&&g[f])c={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=
-!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:C,type:f,target:a},b.type&&(c=R(c,b)),b=ha(g),e=d?[c].concat(d):[c],q(b,function(b){c.isImmediatePropagationStopped()||b.apply(a,e)})}},function(a,b){U.prototype[b]=function(b,c,e){for(var f,g=0,h=this.length;g<h;g++)y(f)?(f=a(this[g],b,c,e),x(f)&&(f=B(f))):Nc(f,a(this[g],b,c,e));return x(f)?f:this};U.prototype.bind=U.prototype.on;U.prototype.unbind=U.prototype.off});Ra.prototype={put:function(a,
-b){this[Fa(a,this.nextUid)]=b},get:function(a){return this[Fa(a,this.nextUid)]},remove:function(a){var b=this[a=Fa(a,this.nextUid)];delete this[a];return b}};var Gf=[function(){this.$get=[function(){return Ra}]}],Uf=/^([^\(]+?)=>/,Vf=/^[^\(]*\(\s*([^\)]*)\)/m,Bg=/,/,Cg=/^\s*(_?)(\S+?)\1\s*$/,Tf=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Ga=O("$injector");bb.$$annotate=function(a,b,d){var c;if("function"===typeof a){if(!(c=a.$inject)){c=[];if(a.length){if(b)throw F(d)&&d||(d=a.name||Wf(a)),Ga("strictdi",d);
-b=Tc(a);q(b[1].split(Bg),function(a){a.replace(Cg,function(a,b,d){c.push(d)})})}a.$inject=c}}else K(a)?(b=a.length-1,Pa(a[b],"fn"),c=a.slice(0,b)):Pa(a,"fn",!0);return c};var Qd=O("$animate"),Ze=function(){this.$get=C},$e=function(){var a=new Ra,b=[];this.$get=["$$AnimateRunner","$rootScope",function(d,c){function e(a,b,c){var d=!1;b&&(b=F(b)?b.split(" "):K(b)?b:[],q(b,function(b){b&&(d=!0,a[b]=c)}));return d}function f(){q(b,function(b){var c=a.get(b);if(c){var d=Xf(b.attr("class")),e="",f="";q(c,
-function(a,b){a!==!!d[b]&&(a?e+=(e.length?" ":"")+b:f+=(f.length?" ":"")+b)});q(b,function(a){e&&zb(a,e);f&&yb(a,f)});a.remove(b)}});b.length=0}return{enabled:C,on:C,off:C,pin:C,push:function(g,h,k,l){l&&l();k=k||{};k.from&&g.css(k.from);k.to&&g.css(k.to);if(k.addClass||k.removeClass)if(h=k.addClass,l=k.removeClass,k=a.get(g)||{},h=e(k,h,!0),l=e(k,l,!1),h||l)a.put(g,k),b.push(g),1===b.length&&c.$$postDigest(f);g=new d;g.complete();return g}}}]},Xe=["$provide",function(a){var b=this;this.$$registeredAnimations=
-Object.create(null);this.register=function(d,c){if(d&&"."!==d.charAt(0))throw Qd("notcsel",d);var e=d+"-animation";b.$$registeredAnimations[d.substr(1)]=e;a.factory(e,c)};this.classNameFilter=function(a){if(1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null)&&/(\s+|\/)ng-animate(\s+|\/)/.test(this.$$classNameFilter.toString()))throw Qd("nongcls","ng-animate");return this.$$classNameFilter};this.$get=["$$animateQueue",function(a){function b(a,c,d){if(d){var h;a:{for(h=0;h<d.length;h++){var k=
-d[h];if(1===k.nodeType){h=k;break a}}h=void 0}!h||h.parentNode||h.previousElementSibling||(d=null)}d?d.after(a):c.prepend(a)}return{on:a.on,off:a.off,pin:a.pin,enabled:a.enabled,cancel:function(a){a.end&&a.end()},enter:function(e,f,g,h){f=f&&B(f);g=g&&B(g);f=f||g.parent();b(e,f,g);return a.push(e,"enter",Ha(h))},move:function(e,f,g,h){f=f&&B(f);g=g&&B(g);f=f||g.parent();b(e,f,g);return a.push(e,"move",Ha(h))},leave:function(b,c){return a.push(b,"leave",Ha(c),function(){b.remove()})},addClass:function(b,
-c,g){g=Ha(g);g.addClass=fb(g.addclass,c);return a.push(b,"addClass",g)},removeClass:function(b,c,g){g=Ha(g);g.removeClass=fb(g.removeClass,c);return a.push(b,"removeClass",g)},setClass:function(b,c,g,h){h=Ha(h);h.addClass=fb(h.addClass,c);h.removeClass=fb(h.removeClass,g);return a.push(b,"setClass",h)},animate:function(b,c,g,h,k){k=Ha(k);k.from=k.from?R(k.from,c):c;k.to=k.to?R(k.to,g):g;k.tempClasses=fb(k.tempClasses,h||"ng-inline-animate");return a.push(b,"animate",k)}}}]}],bf=function(){this.$get=
-["$$rAF",function(a){function b(b){d.push(b);1<d.length||a(function(){for(var a=0;a<d.length;a++)d[a]();d=[]})}var d=[];return function(){var a=!1;b(function(){a=!0});return function(d){a?d():b(d)}}}]},af=function(){this.$get=["$q","$sniffer","$$animateAsyncRun","$document","$timeout",function(a,b,d,c,e){function f(a){this.setHost(a);var b=d();this._doneCallbacks=[];this._tick=function(a){var d=c[0];d&&d.hidden?e(a,0,!1):b(a)};this._state=0}f.chain=function(a,b){function c(){if(d===a.length)b(!0);
-else a[d](function(a){!1===a?b(!1):(d++,c())})}var d=0;c()};f.all=function(a,b){function c(f){e=e&&f;++d===a.length&&b(e)}var d=0,e=!0;q(a,function(a){a.done(c)})};f.prototype={setHost:function(a){this.host=a||{}},done:function(a){2===this._state?a():this._doneCallbacks.push(a)},progress:C,getPromise:function(){if(!this.promise){var b=this;this.promise=a(function(a,c){b.done(function(b){!1===b?c():a()})})}return this.promise},then:function(a,b){return this.getPromise().then(a,b)},"catch":function(a){return this.getPromise()["catch"](a)},
-"finally":function(a){return this.getPromise()["finally"](a)},pause:function(){this.host.pause&&this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end();this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel();this._resolve(!1)},complete:function(a){var b=this;0===b._state&&(b._state=1,b._tick(function(){b._resolve(a)}))},_resolve:function(a){2!==this._state&&(q(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=
-0,this._state=2)}};return f}]},Ye=function(){this.$get=["$$rAF","$q","$$AnimateRunner",function(a,b,d){return function(b,e){function f(){a(function(){g.addClass&&(b.addClass(g.addClass),g.addClass=null);g.removeClass&&(b.removeClass(g.removeClass),g.removeClass=null);g.to&&(b.css(g.to),g.to=null);h||k.complete();h=!0});return k}var g=e||{};g.$$prepared||(g=qa(g));g.cleanupStyles&&(g.from=g.to=null);g.from&&(b.css(g.from),g.from=null);var h,k=new d;return{start:f,end:f}}}]},ga=O("$compile"),Zb=new function(){};
-Cc.$inject=["$provide","$$sanitizeUriProvider"];Db.prototype.isFirstChange=function(){return this.previousValue===Zb};var Vc=/^((?:x|data)[\:\-_])/i,$f=O("$controller"),bd=/^(\S+)(\s+as\s+([\w$]+))?$/,hf=function(){this.$get=["$document",function(a){return function(b){b?!b.nodeType&&b instanceof B&&(b=b[0]):b=a[0].body;return b.offsetWidth+1}}]},cd="application/json",bc={"Content-Type":cd+";charset=utf-8"},bg=/^\[|^\{(?!\{)/,cg={"[":/]$/,"{":/}$/},ag=/^\)\]\}',?\n/,Dg=O("$http"),gd=function(a){return function(){throw Dg("legacy",
-a);}},Ja=ea.$interpolateMinErr=O("$interpolate");Ja.throwNoconcat=function(a){throw Ja("noconcat",a);};Ja.interr=function(a,b){return Ja("interr",a,b.toString())};var Eg=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,eg={http:80,https:443,ftp:21},Eb=O("$location"),Fg={$$html5:!1,$$replace:!1,absUrl:Fb("$$absUrl"),url:function(a){if(y(a))return this.$$url;var b=Eg.exec(a);(b[1]||""===a)&&this.path(decodeURIComponent(b[1]));(b[2]||b[1]||""===a)&&this.search(b[3]||"");this.hash(b[5]||"");return this},protocol:Fb("$$protocol"),
-host:Fb("$$host"),port:Fb("$$port"),path:ld("$$path",function(a){a=null!==a?a.toString():"";return"/"==a.charAt(0)?a:"/"+a}),search:function(a,b){switch(arguments.length){case 0:return this.$$search;case 1:if(F(a)||Q(a))a=a.toString(),this.$$search=xc(a);else if(G(a))a=qa(a,{}),q(a,function(b,c){null==b&&delete a[c]}),this.$$search=a;else throw Eb("isrcharg");break;default:y(b)||null===b?delete this.$$search[a]:this.$$search[a]=b}this.$$compose();return this},hash:ld("$$hash",function(a){return null!==
-a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};q([kd,ec,dc],function(a){a.prototype=Object.create(Fg);a.prototype.state=function(b){if(!arguments.length)return this.$$state;if(a!==dc||!this.$$html5)throw Eb("nostate");this.$$state=y(b)?null:b;return this}});var ca=O("$parse"),gg=Function.prototype.call,hg=Function.prototype.apply,ig=Function.prototype.bind,Mb=T();q("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),function(a){Mb[a]=!0});var Gg={n:"\n",f:"\f",r:"\r",
-t:"\t",v:"\v","'":"'",'"':'"'},gc=function(a){this.options=a};gc.prototype={constructor:gc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdentifierStart(this.peekMultichar()))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),this.index++;else if(this.isWhitespace(a))this.index++;
-else{var b=a+this.peek(),d=b+this.peek(2),c=Mb[b],e=Mb[d];Mb[a]||c||e?(a=e?d:c?b:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,b){return-1!==b.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||
-"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdentifierStart:function(a){return this.options.isIdentifierStart?this.options.isIdentifierStart(a,this.codePointAt(a)):this.isValidIdentifierStart(a)},isValidIdentifierStart:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isIdentifierContinue:function(a){return this.options.isIdentifierContinue?this.options.isIdentifierContinue(a,this.codePointAt(a)):this.isValidIdentifierContinue(a)},isValidIdentifierContinue:function(a,b){return this.isValidIdentifierStart(a,
-b)||this.isNumber(a)},codePointAt:function(a){return 1===a.length?a.charCodeAt(0):(a.charCodeAt(0)<<10)+a.charCodeAt(1)-56613888},peekMultichar:function(){var a=this.text.charAt(this.index),b=this.peek();if(!b)return a;var d=a.charCodeAt(0),c=b.charCodeAt(0);return 55296<=d&&56319>=d&&56320<=c&&57343>=c?a+b:a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,b,d){d=d||this.index;b=x(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,d)+"]":" "+d;throw ca("lexerr",
-a,b,this.text);},readNumber:function(){for(var a="",b=this.index;this.index<this.text.length;){var d=P(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var c=this.peek();if("e"==d&&this.isExpOperator(c))a+=d;else if(this.isExpOperator(d)&&c&&this.isNumber(c)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||c&&this.isNumber(c)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:b,text:a,constant:!0,value:Number(a)})},
-readIdent:function(){var a=this.index;for(this.index+=this.peekMultichar().length;this.index<this.text.length;){var b=this.peekMultichar();if(!this.isIdentifierContinue(b))break;this.index+=b.length}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var b=this.index;this.index++;for(var d="",c=a,e=!1;this.index<this.text.length;){var f=this.text.charAt(this.index),c=c+f;if(e)"u"===f?(e=this.text.substring(this.index+1,this.index+5),e.match(/[\da-f]{4}/i)||
-this.throwError("Invalid unicode escape [\\u"+e+"]"),this.index+=4,d+=String.fromCharCode(parseInt(e,16))):d+=Gg[f]||f,e=!1;else if("\\"===f)e=!0;else{if(f===a){this.index++;this.tokens.push({index:b,text:c,constant:!0,value:d});return}d+=f}this.index++}this.throwError("Unterminated quote",b)}};var s=function(a,b){this.lexer=a;this.options=b};s.Program="Program";s.ExpressionStatement="ExpressionStatement";s.AssignmentExpression="AssignmentExpression";s.ConditionalExpression="ConditionalExpression";
-s.LogicalExpression="LogicalExpression";s.BinaryExpression="BinaryExpression";s.UnaryExpression="UnaryExpression";s.CallExpression="CallExpression";s.MemberExpression="MemberExpression";s.Identifier="Identifier";s.Literal="Literal";s.ArrayExpression="ArrayExpression";s.Property="Property";s.ObjectExpression="ObjectExpression";s.ThisExpression="ThisExpression";s.LocalsExpression="LocalsExpression";s.NGValueParameter="NGValueParameter";s.prototype={ast:function(a){this.text=a;this.tokens=this.lexer.lex(a);
-a=this.program();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);return a},program:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.expressionStatement()),!this.expect(";"))return{type:s.Program,body:a}},expressionStatement:function(){return{type:s.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},expression:function(){return this.assignment()},
-assignment:function(){var a=this.ternary();this.expect("=")&&(a={type:s.AssignmentExpression,left:a,right:this.assignment(),operator:"="});return a},ternary:function(){var a=this.logicalOR(),b,d;return this.expect("?")&&(b=this.expression(),this.consume(":"))?(d=this.expression(),{type:s.ConditionalExpression,test:a,alternate:b,consequent:d}):a},logicalOR:function(){for(var a=this.logicalAND();this.expect("||");)a={type:s.LogicalExpression,operator:"||",left:a,right:this.logicalAND()};return a},logicalAND:function(){for(var a=
-this.equality();this.expect("&&");)a={type:s.LogicalExpression,operator:"&&",left:a,right:this.equality()};return a},equality:function(){for(var a=this.relational(),b;b=this.expect("==","!=","===","!==");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.relational()};return a},relational:function(){for(var a=this.additive(),b;b=this.expect("<",">","<=",">=");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),
-b;b=this.expect("+","-");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),b;b=this.expect("*","/","%");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:s.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):
-this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.selfReferential.hasOwnProperty(this.peek().text)?a=qa(this.selfReferential[this.consume().text]):this.options.literals.hasOwnProperty(this.peek().text)?a={type:s.Literal,value:this.options.literals[this.consume().text]}:this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",this.peek());for(var b;b=this.expect("(","[",".");)"("===b.text?(a={type:s.CallExpression,
-callee:a,arguments:this.parseArguments()},this.consume(")")):"["===b.text?(a={type:s.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===b.text?a={type:s.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var b={type:s.CallExpression,callee:this.identifier(),arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return b},parseArguments:function(){var a=[];if(")"!==
-this.peekToken().text){do a.push(this.expression());while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:s.Identifier,name:a.text}},constant:function(){return{type:s.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");return{type:s.ArrayExpression,elements:a}},
-object:function(){var a=[],b;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;b={type:s.Property,kind:"init"};this.peek().constant?b.key=this.constant():this.peek().identifier?b.key=this.identifier():this.throwError("invalid key",this.peek());this.consume(":");b.value=this.expression();a.push(b)}while(this.expect(","))}this.consume("}");return{type:s.ObjectExpression,properties:a}},throwError:function(a,b){throw ca("syntax",b.text,a,b.index+1,this.text,this.text.substring(b.index));},consume:function(a){if(0===
-this.tokens.length)throw ca("ueoe",this.text);var b=this.expect(a);b||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return b},peekToken:function(){if(0===this.tokens.length)throw ca("ueoe",this.text);return this.tokens[0]},peek:function(a,b,d,c){return this.peekAhead(0,a,b,d,c)},peekAhead:function(a,b,d,c,e){if(this.tokens.length>a){a=this.tokens[a];var f=a.text;if(f===b||f===d||f===c||f===e||!(b||d||c||e))return a}return!1},expect:function(a,b,d,c){return(a=this.peek(a,b,d,c))?
-(this.tokens.shift(),a):!1},selfReferential:{"this":{type:s.ThisExpression},$locals:{type:s.LocalsExpression}}};sd.prototype={compile:function(a,b){var d=this,c=this.astBuilder.ast(a);this.state={nextId:0,filters:{},expensiveChecks:b,fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]};aa(c,d.$filter);var e="",f;this.stage="assign";if(f=qd(c))this.state.computing="assign",e=this.nextId(),this.recurse(f,e),this.return_(e),e="fn.assign="+this.generateFunction("assign","s,v,l");f=od(c.body);
-d.stage="inputs";q(f,function(a,b){var c="fn"+b;d.state[c]={vars:[],body:[],own:{}};d.state.computing=c;var e=d.nextId();d.recurse(a,e);d.return_(e);d.state.inputs.push(c);a.watchId=b});this.state.computing="fn";this.stage="main";this.recurse(c);e='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+e+this.watchFns()+"return fn;";e=(new Function("$filter","ensureSafeMemberName","ensureSafeObject","ensureSafeFunction","getStringValue","ensureSafeAssignContext",
-"ifDefined","plus","text",e))(this.$filter,Ta,sa,md,fg,Gb,jg,nd,a);this.state=this.stage=void 0;e.literal=rd(c);e.constant=c.constant;return e},USE:"use",STRICT:"strict",watchFns:function(){var a=[],b=this.state.inputs,d=this;q(b,function(b){a.push("var "+b+"="+d.generateFunction(b,"s"))});b.length&&a.push("fn.inputs=["+b.join(",")+"];");return a.join("")},generateFunction:function(a,b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],b=this;q(this.state.filters,
-function(d,c){a.push(d+"=$filter("+b.escape(c)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,b,d,c,e,f){var g,h,k=this,l,n;c=c||C;if(!f&&x(a.watchId))b=b||this.nextId(),this.if_("i",this.lazyAssign(b,this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,d,c,e,!0));else switch(a.type){case s.Program:q(a.body,function(b,c){k.recurse(b.expression,
-void 0,void 0,function(a){h=a});c!==a.body.length-1?k.current().body.push(h,";"):k.return_(h)});break;case s.Literal:n=this.escape(a.value);this.assign(b,n);c(n);break;case s.UnaryExpression:this.recurse(a.argument,void 0,void 0,function(a){h=a});n=a.operator+"("+this.ifDefined(h,0)+")";this.assign(b,n);c(n);break;case s.BinaryExpression:this.recurse(a.left,void 0,void 0,function(a){g=a});this.recurse(a.right,void 0,void 0,function(a){h=a});n="+"===a.operator?this.plus(g,h):"-"===a.operator?this.ifDefined(g,
-0)+a.operator+this.ifDefined(h,0):"("+g+")"+a.operator+"("+h+")";this.assign(b,n);c(n);break;case s.LogicalExpression:b=b||this.nextId();k.recurse(a.left,b);k.if_("&&"===a.operator?b:k.not(b),k.lazyRecurse(a.right,b));c(b);break;case s.ConditionalExpression:b=b||this.nextId();k.recurse(a.test,b);k.if_(b,k.lazyRecurse(a.alternate,b),k.lazyRecurse(a.consequent,b));c(b);break;case s.Identifier:b=b||this.nextId();d&&(d.context="inputs"===k.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",
-a.name)+"?l:s"),d.computed=!1,d.name=a.name);Ta(a.name);k.if_("inputs"===k.stage||k.not(k.getHasOwnProperty("l",a.name)),function(){k.if_("inputs"===k.stage||"s",function(){e&&1!==e&&k.if_(k.not(k.nonComputedMember("s",a.name)),k.lazyAssign(k.nonComputedMember("s",a.name),"{}"));k.assign(b,k.nonComputedMember("s",a.name))})},b&&k.lazyAssign(b,k.nonComputedMember("l",a.name)));(k.state.expensiveChecks||Hb(a.name))&&k.addEnsureSafeObject(b);c(b);break;case s.MemberExpression:g=d&&(d.context=this.nextId())||
-this.nextId();b=b||this.nextId();k.recurse(a.object,g,void 0,function(){k.if_(k.notNull(g),function(){e&&1!==e&&k.addEnsureSafeAssignContext(g);if(a.computed)h=k.nextId(),k.recurse(a.property,h),k.getStringValue(h),k.addEnsureSafeMemberName(h),e&&1!==e&&k.if_(k.not(k.computedMember(g,h)),k.lazyAssign(k.computedMember(g,h),"{}")),n=k.ensureSafeObject(k.computedMember(g,h)),k.assign(b,n),d&&(d.computed=!0,d.name=h);else{Ta(a.property.name);e&&1!==e&&k.if_(k.not(k.nonComputedMember(g,a.property.name)),
-k.lazyAssign(k.nonComputedMember(g,a.property.name),"{}"));n=k.nonComputedMember(g,a.property.name);if(k.state.expensiveChecks||Hb(a.property.name))n=k.ensureSafeObject(n);k.assign(b,n);d&&(d.computed=!1,d.name=a.property.name)}},function(){k.assign(b,"undefined")});c(b)},!!e);break;case s.CallExpression:b=b||this.nextId();a.filter?(h=k.filter(a.callee.name),l=[],q(a.arguments,function(a){var b=k.nextId();k.recurse(a,b);l.push(b)}),n=h+"("+l.join(",")+")",k.assign(b,n),c(b)):(h=k.nextId(),g={},l=
-[],k.recurse(a.callee,h,g,function(){k.if_(k.notNull(h),function(){k.addEnsureSafeFunction(h);q(a.arguments,function(a){k.recurse(a,k.nextId(),void 0,function(a){l.push(k.ensureSafeObject(a))})});g.name?(k.state.expensiveChecks||k.addEnsureSafeObject(g.context),n=k.member(g.context,g.name,g.computed)+"("+l.join(",")+")"):n=h+"("+l.join(",")+")";n=k.ensureSafeObject(n);k.assign(b,n)},function(){k.assign(b,"undefined")});c(b)}));break;case s.AssignmentExpression:h=this.nextId();g={};if(!pd(a.left))throw ca("lval");
-this.recurse(a.left,void 0,g,function(){k.if_(k.notNull(g.context),function(){k.recurse(a.right,h);k.addEnsureSafeObject(k.member(g.context,g.name,g.computed));k.addEnsureSafeAssignContext(g.context);n=k.member(g.context,g.name,g.computed)+a.operator+h;k.assign(b,n);c(b||n)})},1);break;case s.ArrayExpression:l=[];q(a.elements,function(a){k.recurse(a,k.nextId(),void 0,function(a){l.push(a)})});n="["+l.join(",")+"]";this.assign(b,n);c(n);break;case s.ObjectExpression:l=[];q(a.properties,function(a){k.recurse(a.value,
-k.nextId(),void 0,function(b){l.push(k.escape(a.key.type===s.Identifier?a.key.name:""+a.key.value)+":"+b)})});n="{"+l.join(",")+"}";this.assign(b,n);c(n);break;case s.ThisExpression:this.assign(b,"s");c("s");break;case s.LocalsExpression:this.assign(b,"l");c("l");break;case s.NGValueParameter:this.assign(b,"v"),c("v")}},getHasOwnProperty:function(a,b){var d=a+"."+b,c=this.current().own;c.hasOwnProperty(d)||(c[d]=this.nextId(!1,a+"&&("+this.escape(b)+" in "+a+")"));return c[d]},assign:function(a,b){if(a)return this.current().body.push(a,
-"=",b,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)||(this.state.filters[a]=this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,b){return"ifDefined("+a+","+this.escape(b)+")"},plus:function(a,b){return"plus("+a+","+b+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,b,d){if(!0===a)b();else{var c=this.current().body;c.push("if(",a,"){");b();c.push("}");d&&(c.push("else{"),d(),c.push("}"))}},not:function(a){return"!("+a+")"},notNull:function(a){return a+
-"!=null"},nonComputedMember:function(a,b){var d=/[^$_a-zA-Z0-9]/g;return/[$_a-zA-Z][$_a-zA-Z0-9]*/.test(b)?a+"."+b:a+'["'+b.replace(d,this.stringEscapeFn)+'"]'},computedMember:function(a,b){return a+"["+b+"]"},member:function(a,b,d){return d?this.computedMember(a,b):this.nonComputedMember(a,b)},addEnsureSafeObject:function(a){this.current().body.push(this.ensureSafeObject(a),";")},addEnsureSafeMemberName:function(a){this.current().body.push(this.ensureSafeMemberName(a),";")},addEnsureSafeFunction:function(a){this.current().body.push(this.ensureSafeFunction(a),
-";")},addEnsureSafeAssignContext:function(a){this.current().body.push(this.ensureSafeAssignContext(a),";")},ensureSafeObject:function(a){return"ensureSafeObject("+a+",text)"},ensureSafeMemberName:function(a){return"ensureSafeMemberName("+a+",text)"},ensureSafeFunction:function(a){return"ensureSafeFunction("+a+",text)"},getStringValue:function(a){this.assign(a,"getStringValue("+a+")")},ensureSafeAssignContext:function(a){return"ensureSafeAssignContext("+a+",text)"},lazyRecurse:function(a,b,d,c,e,f){var g=
-this;return function(){g.recurse(a,b,d,c,e,f)}},lazyAssign:function(a,b){var d=this;return function(){d.assign(a,b)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(F(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(Q(a))return a.toString();if(!0===a)return"true";if(!1===a)return"false";if(null===a)return"null";if("undefined"===typeof a)return"undefined";throw ca("esc");},nextId:function(a,
-b){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(b?"="+b:""));return d},current:function(){return this.state[this.state.computing]}};td.prototype={compile:function(a,b){var d=this,c=this.astBuilder.ast(a);this.expression=a;this.expensiveChecks=b;aa(c,d.$filter);var e,f;if(e=qd(c))f=this.recurse(e);e=od(c.body);var g;e&&(g=[],q(e,function(a,b){var c=d.recurse(a);a.input=c;g.push(c);a.watchId=b}));var h=[];q(c.body,function(a){h.push(d.recurse(a.expression))});e=0===c.body.length?C:1===
-c.body.length?h[0]:function(a,b){var c;q(h,function(d){c=d(a,b)});return c};f&&(e.assign=function(a,b,c){return f(a,c,b)});g&&(e.inputs=g);e.literal=rd(c);e.constant=c.constant;return e},recurse:function(a,b,d){var c,e,f=this,g;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case s.Literal:return this.value(a.value,b);case s.UnaryExpression:return e=this.recurse(a.argument),this["unary"+a.operator](e,b);case s.BinaryExpression:return c=this.recurse(a.left),e=this.recurse(a.right),
-this["binary"+a.operator](c,e,b);case s.LogicalExpression:return c=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case s.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),b);case s.Identifier:return Ta(a.name,f.expression),f.identifier(a.name,f.expensiveChecks||Hb(a.name),b,d,f.expression);case s.MemberExpression:return c=this.recurse(a.object,!1,!!d),a.computed||(Ta(a.property.name,f.expression),
-e=a.property.name),a.computed&&(e=this.recurse(a.property)),a.computed?this.computedMember(c,e,b,d,f.expression):this.nonComputedMember(c,e,f.expensiveChecks,b,d,f.expression);case s.CallExpression:return g=[],q(a.arguments,function(a){g.push(f.recurse(a))}),a.filter&&(e=this.$filter(a.callee.name)),a.filter||(e=this.recurse(a.callee,!0)),a.filter?function(a,c,d,f){for(var m=[],r=0;r<g.length;++r)m.push(g[r](a,c,d,f));a=e.apply(void 0,m,f);return b?{context:void 0,name:void 0,value:a}:a}:function(a,
-c,d,n){var m=e(a,c,d,n),r;if(null!=m.value){sa(m.context,f.expression);md(m.value,f.expression);r=[];for(var q=0;q<g.length;++q)r.push(sa(g[q](a,c,d,n),f.expression));r=sa(m.value.apply(m.context,r),f.expression)}return b?{value:r}:r};case s.AssignmentExpression:return c=this.recurse(a.left,!0,1),e=this.recurse(a.right),function(a,d,g,n){var m=c(a,d,g,n);a=e(a,d,g,n);sa(m.value,f.expression);Gb(m.context);m.context[m.name]=a;return b?{value:a}:a};case s.ArrayExpression:return g=[],q(a.elements,function(a){g.push(f.recurse(a))}),
-function(a,c,d,e){for(var f=[],r=0;r<g.length;++r)f.push(g[r](a,c,d,e));return b?{value:f}:f};case s.ObjectExpression:return g=[],q(a.properties,function(a){g.push({key:a.key.type===s.Identifier?a.key.name:""+a.key.value,value:f.recurse(a.value)})}),function(a,c,d,e){for(var f={},r=0;r<g.length;++r)f[g[r].key]=g[r].value(a,c,d,e);return b?{value:f}:f};case s.ThisExpression:return function(a){return b?{value:a}:a};case s.LocalsExpression:return function(a,c){return b?{value:c}:c};case s.NGValueParameter:return function(a,
-c,d){return b?{value:d}:d}}},"unary+":function(a,b){return function(d,c,e,f){d=a(d,c,e,f);d=x(d)?+d:0;return b?{value:d}:d}},"unary-":function(a,b){return function(d,c,e,f){d=a(d,c,e,f);d=x(d)?-d:0;return b?{value:d}:d}},"unary!":function(a,b){return function(d,c,e,f){d=!a(d,c,e,f);return b?{value:d}:d}},"binary+":function(a,b,d){return function(c,e,f,g){var h=a(c,e,f,g);c=b(c,e,f,g);h=nd(h,c);return d?{value:h}:h}},"binary-":function(a,b,d){return function(c,e,f,g){var h=a(c,e,f,g);c=b(c,e,f,g);
-h=(x(h)?h:0)-(x(c)?c:0);return d?{value:h}:h}},"binary*":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)*b(c,e,f,g);return d?{value:c}:c}},"binary/":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)/b(c,e,f,g);return d?{value:c}:c}},"binary%":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)%b(c,e,f,g);return d?{value:c}:c}},"binary===":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)===b(c,e,f,g);return d?{value:c}:c}},"binary!==":function(a,b,d){return function(c,e,f,g){c=a(c,
-e,f,g)!==b(c,e,f,g);return d?{value:c}:c}},"binary==":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)==b(c,e,f,g);return d?{value:c}:c}},"binary!=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)!=b(c,e,f,g);return d?{value:c}:c}},"binary<":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<b(c,e,f,g);return d?{value:c}:c}},"binary>":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)>b(c,e,f,g);return d?{value:c}:c}},"binary<=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,
-g)<=b(c,e,f,g);return d?{value:c}:c}},"binary>=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)>=b(c,e,f,g);return d?{value:c}:c}},"binary&&":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)&&b(c,e,f,g);return d?{value:c}:c}},"binary||":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)||b(c,e,f,g);return d?{value:c}:c}},"ternary?:":function(a,b,d,c){return function(e,f,g,h){e=a(e,f,g,h)?b(e,f,g,h):d(e,f,g,h);return c?{value:e}:e}},value:function(a,b){return function(){return b?{context:void 0,
-name:void 0,value:a}:a}},identifier:function(a,b,d,c,e){return function(f,g,h,k){f=g&&a in g?g:f;c&&1!==c&&f&&!f[a]&&(f[a]={});g=f?f[a]:void 0;b&&sa(g,e);return d?{context:f,name:a,value:g}:g}},computedMember:function(a,b,d,c,e){return function(f,g,h,k){var l=a(f,g,h,k),n,m;null!=l&&(n=b(f,g,h,k),n+="",Ta(n,e),c&&1!==c&&(Gb(l),l&&!l[n]&&(l[n]={})),m=l[n],sa(m,e));return d?{context:l,name:n,value:m}:m}},nonComputedMember:function(a,b,d,c,e,f){return function(g,h,k,l){g=a(g,h,k,l);e&&1!==e&&(Gb(g),
-g&&!g[b]&&(g[b]={}));h=null!=g?g[b]:void 0;(d||Hb(b))&&sa(h,f);return c?{context:g,name:b,value:h}:h}},inputs:function(a,b){return function(d,c,e,f){return f?f[b]:a(d,c,e)}}};var hc=function(a,b,d){this.lexer=a;this.$filter=b;this.options=d;this.ast=new s(a,d);this.astCompiler=d.csp?new td(this.ast,b):new sd(this.ast,b)};hc.prototype={constructor:hc,parse:function(a){return this.astCompiler.compile(a,this.options.expensiveChecks)}};var kg=Object.prototype.valueOf,ta=O("$sce"),oa={HTML:"html",CSS:"css",
-URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},mg=O("$compile"),Y=v.document.createElement("a"),xd=ra(v.location.href);yd.$inject=["$document"];Jc.$inject=["$provide"];var Fd=22,Ed=".",jc="0";zd.$inject=["$locale"];Bd.$inject=["$locale"];var xg={yyyy:W("FullYear",4,0,!1,!0),yy:W("FullYear",2,0,!0,!0),y:W("FullYear",1,0,!1,!0),MMMM:ib("Month"),MMM:ib("Month",!0),MM:W("Month",2,1),M:W("Month",1,1),LLLL:ib("Month",!1,!0),dd:W("Date",2),d:W("Date",1),HH:W("Hours",2),H:W("Hours",1),hh:W("Hours",2,-12),
-h:W("Hours",1,-12),mm:W("Minutes",2),m:W("Minutes",1),ss:W("Seconds",2),s:W("Seconds",1),sss:W("Milliseconds",3),EEEE:ib("Day"),EEE:ib("Day",!0),a:function(a,b){return 12>a.getHours()?b.AMPMS[0]:b.AMPMS[1]},Z:function(a,b,d){a=-1*d;return a=(0<=a?"+":"")+(Ib(Math[0<a?"floor":"ceil"](a/60),2)+Ib(Math.abs(a%60),2))},ww:Hd(2),w:Hd(1),G:kc,GG:kc,GGG:kc,GGGG:function(a,b){return 0>=a.getFullYear()?b.ERANAMES[0]:b.ERANAMES[1]}},wg=/((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,
-vg=/^\-?\d+$/;Ad.$inject=["$locale"];var qg=da(P),rg=da(sb);Cd.$inject=["$parse"];var ne=da({restrict:"E",compile:function(a,b){if(!b.href&&!b.xlinkHref)return function(a,b){if("a"===b[0].nodeName.toLowerCase()){var e="[object SVGAnimatedString]"===ma.call(b.prop("href"))?"xlink:href":"href";b.on("click",function(a){b.attr(e)||a.preventDefault()})}}}}),tb={};q(Cb,function(a,b){function d(a,d,e){a.$watch(e[c],function(a){e.$set(b,!!a)})}if("multiple"!=a){var c=xa("ng-"+b),e=d;"checked"===a&&(e=function(a,
-b,e){e.ngModel!==e[c]&&d(a,b,e)});tb[c]=function(){return{restrict:"A",priority:100,link:e}}}});q(ad,function(a,b){tb[b]=function(){return{priority:100,link:function(a,c,e){if("ngPattern"===b&&"/"==e.ngPattern.charAt(0)&&(c=e.ngPattern.match(zg))){e.$set("ngPattern",new RegExp(c[1],c[2]));return}a.$watch(e[b],function(a){e.$set(b,a)})}}}});q(["src","srcset","href"],function(a){var b=xa("ng-"+a);tb[b]=function(){return{priority:99,link:function(d,c,e){var f=a,g=a;"href"===a&&"[object SVGAnimatedString]"===
-ma.call(c.prop("href"))&&(g="xlinkHref",e.$attr[g]="xlink:href",f=null);e.$observe(b,function(b){b?(e.$set(g,b),Ca&&f&&c.prop(f,e[g])):"href"===a&&e.$set(g,null)})}}}});var Jb={$addControl:C,$$renameControl:function(a,b){a.$name=b},$removeControl:C,$setValidity:C,$setDirty:C,$setPristine:C,$setSubmitted:C};Id.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var Rd=function(a){return["$timeout","$parse",function(b,d){function c(a){return""===a?d('this[""]').assign:d(a).assign||C}return{name:"form",
-restrict:a?"EAC":"E",require:["form","^^?form"],controller:Id,compile:function(d,f){d.addClass(Ua).addClass(mb);var g=f.name?"name":a&&f.ngForm?"ngForm":!1;return{pre:function(a,d,e,f){var m=f[0];if(!("action"in e)){var r=function(b){a.$apply(function(){m.$commitViewValue();m.$setSubmitted()});b.preventDefault()};d[0].addEventListener("submit",r,!1);d.on("$destroy",function(){b(function(){d[0].removeEventListener("submit",r,!1)},0,!1)})}(f[1]||m.$$parentForm).$addControl(m);var q=g?c(m.$name):C;g&&
-(q(a,m),e.$observe(g,function(b){m.$name!==b&&(q(a,void 0),m.$$parentForm.$$renameControl(m,b),q=c(m.$name),q(a,m))}));d.on("$destroy",function(){m.$$parentForm.$removeControl(m);q(a,void 0);R(m,Jb)})}}}}}]},oe=Rd(),Be=Rd(!0),yg=/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/,Hg=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+\])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,Ig=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,
-Jg=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,Sd=/^(\d{4,})-(\d{2})-(\d{2})$/,Td=/^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,nc=/^(\d{4,})-W(\d\d)$/,Ud=/^(\d{4,})-(\d\d)$/,Vd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Kd=T();q(["date","datetime-local","month","time","week"],function(a){Kd[a]=!0});var Wd={text:function(a,b,d,c,e,f){jb(a,b,d,c,e,f);lc(c)},date:kb("date",Sd,Lb(Sd,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":kb("datetimelocal",Td,Lb(Td,"yyyy MM dd HH mm ss sss".split(" ")),
-"yyyy-MM-ddTHH:mm:ss.sss"),time:kb("time",Vd,Lb(Vd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:kb("week",nc,function(a,b){if(fa(a))return a;if(F(a)){nc.lastIndex=0;var d=nc.exec(a);if(d){var c=+d[1],e=+d[2],f=d=0,g=0,h=0,k=Gd(c),e=7*(e-1);b&&(d=b.getHours(),f=b.getMinutes(),g=b.getSeconds(),h=b.getMilliseconds());return new Date(c,0,k.getDate()+e,d,f,g,h)}}return NaN},"yyyy-Www"),month:kb("month",Ud,Lb(Ud,["yyyy","MM"]),"yyyy-MM"),number:function(a,b,d,c,e,f){Ld(a,b,d,c);jb(a,b,d,c,e,f);c.$$parserName=
-"number";c.$parsers.push(function(a){if(c.$isEmpty(a))return null;if(Jg.test(a))return parseFloat(a)});c.$formatters.push(function(a){if(!c.$isEmpty(a)){if(!Q(a))throw lb("numfmt",a);a=a.toString()}return a});if(x(d.min)||d.ngMin){var g;c.$validators.min=function(a){return c.$isEmpty(a)||y(g)||a>=g};d.$observe("min",function(a){x(a)&&!Q(a)&&(a=parseFloat(a,10));g=Q(a)&&!isNaN(a)?a:void 0;c.$validate()})}if(x(d.max)||d.ngMax){var h;c.$validators.max=function(a){return c.$isEmpty(a)||y(h)||a<=h};d.$observe("max",
-function(a){x(a)&&!Q(a)&&(a=parseFloat(a,10));h=Q(a)&&!isNaN(a)?a:void 0;c.$validate()})}},url:function(a,b,d,c,e,f){jb(a,b,d,c,e,f);lc(c);c.$$parserName="url";c.$validators.url=function(a,b){var d=a||b;return c.$isEmpty(d)||Hg.test(d)}},email:function(a,b,d,c,e,f){jb(a,b,d,c,e,f);lc(c);c.$$parserName="email";c.$validators.email=function(a,b){var d=a||b;return c.$isEmpty(d)||Ig.test(d)}},radio:function(a,b,d,c){y(d.name)&&b.attr("name",++nb);b.on("click",function(a){b[0].checked&&c.$setViewValue(d.value,
-a&&a.type)});c.$render=function(){b[0].checked=d.value==c.$viewValue};d.$observe("value",c.$render)},checkbox:function(a,b,d,c,e,f,g,h){var k=Md(h,a,"ngTrueValue",d.ngTrueValue,!0),l=Md(h,a,"ngFalseValue",d.ngFalseValue,!1);b.on("click",function(a){c.$setViewValue(b[0].checked,a&&a.type)});c.$render=function(){b[0].checked=c.$viewValue};c.$isEmpty=function(a){return!1===a};c.$formatters.push(function(a){return pa(a,k)});c.$parsers.push(function(a){return a?k:l})},hidden:C,button:C,submit:C,reset:C,
-file:C},Dc=["$browser","$sniffer","$filter","$parse",function(a,b,d,c){return{restrict:"E",require:["?ngModel"],link:{pre:function(e,f,g,h){h[0]&&(Wd[P(g.type)]||Wd.text)(e,f,g,h[0],b,a,d,c)}}}}],Kg=/^(true|false|\d+)$/,Te=function(){return{restrict:"A",priority:100,compile:function(a,b){return Kg.test(b.ngValue)?function(a,b,e){e.$set("value",a.$eval(e.ngValue))}:function(a,b,e){a.$watch(e.ngValue,function(a){e.$set("value",a)})}}}},te=["$compile",function(a){return{restrict:"AC",compile:function(b){a.$$addBindingClass(b);
-return function(b,c,e){a.$$addBindingInfo(c,e.ngBind);c=c[0];b.$watch(e.ngBind,function(a){c.textContent=y(a)?"":a})}}}}],ve=["$interpolate","$compile",function(a,b){return{compile:function(d){b.$$addBindingClass(d);return function(c,d,f){c=a(d.attr(f.$attr.ngBindTemplate));b.$$addBindingInfo(d,c.expressions);d=d[0];f.$observe("ngBindTemplate",function(a){d.textContent=y(a)?"":a})}}}}],ue=["$sce","$parse","$compile",function(a,b,d){return{restrict:"A",compile:function(c,e){var f=b(e.ngBindHtml),g=
-b(e.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(c);return function(b,c,e){d.$$addBindingInfo(c,e.ngBindHtml);b.$watch(g,function(){c.html(a.getTrustedHtml(f(b))||"")})}}}}],Se=da({restrict:"A",require:"ngModel",link:function(a,b,d,c){c.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),we=mc("",!0),ye=mc("Odd",0),xe=mc("Even",1),ze=La({compile:function(a,b){b.$set("ngCloak",void 0);a.removeClass("ng-cloak")}}),Ae=[function(){return{restrict:"A",scope:!0,controller:"@",
-priority:500}}],Ic={},Lg={blur:!0,focus:!0};q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var b=xa("ng-"+a);Ic[b]=["$parse","$rootScope",function(d,c){return{restrict:"A",compile:function(e,f){var g=d(f[b],null,!0);return function(b,d){d.on(a,function(d){var e=function(){g(b,{$event:d})};Lg[a]&&c.$$phase?b.$evalAsync(e):b.$apply(e)})}}}}]});var De=["$animate","$compile",function(a,
-b){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(d,c,e,f,g){var h,k,l;d.$watch(e.ngIf,function(d){d?k||g(function(d,f){k=f;d[d.length++]=b.$$createComment("end ngIf",e.ngIf);h={clone:d};a.enter(d,c.parent(),c)}):(l&&(l.remove(),l=null),k&&(k.$destroy(),k=null),h&&(l=rb(h.clone),a.leave(l).then(function(){l=null}),h=null))})}}}],Ee=["$templateRequest","$anchorScroll","$animate",function(a,b,d){return{restrict:"ECA",priority:400,terminal:!0,
-transclude:"element",controller:ea.noop,compile:function(c,e){var f=e.ngInclude||e.src,g=e.onload||"",h=e.autoscroll;return function(c,e,n,m,r){var q=0,s,w,p,y=function(){w&&(w.remove(),w=null);s&&(s.$destroy(),s=null);p&&(d.leave(p).then(function(){w=null}),w=p,p=null)};c.$watch(f,function(f){var n=function(){!x(h)||h&&!c.$eval(h)||b()},u=++q;f?(a(f,!0).then(function(a){if(!c.$$destroyed&&u===q){var b=c.$new();m.template=a;a=r(b,function(a){y();d.enter(a,null,e).then(n)});s=b;p=a;s.$emit("$includeContentLoaded",
-f);c.$eval(g)}},function(){c.$$destroyed||u!==q||(y(),c.$emit("$includeContentError",f))}),c.$emit("$includeContentRequested",f)):(y(),m.template=null)})}}}}],Ve=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(b,d,c,e){ma.call(d[0]).match(/SVG/)?(d.empty(),a(Lc(e.template,v.document).childNodes)(b,function(a){d.append(a)},{futureParentElement:d})):(d.html(e.template),a(d.contents())(b))}}}],Fe=La({priority:450,compile:function(){return{pre:function(a,
-b,d){a.$eval(d.ngInit)}}}}),Re=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,d,c){var e=b.attr(d.$attr.ngList)||", ",f="false"!==d.ngTrim,g=f?V(e):e;c.$parsers.push(function(a){if(!y(a)){var b=[];a&&q(a.split(g),function(a){a&&b.push(f?V(a):a)});return b}});c.$formatters.push(function(a){if(K(a))return a.join(e)});c.$isEmpty=function(a){return!a||!a.length}}}},mb="ng-valid",Nd="ng-invalid",Ua="ng-pristine",Kb="ng-dirty",Pd="ng-pending",lb=O("ngModel"),Mg=["$scope",
-"$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,b,d,c,e,f,g,h,k,l){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=void 0;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=void 0;this.$name=l(d.name||"",!1)(a);
-this.$$parentForm=Jb;var n=e(d.ngModel),m=n.assign,r=n,s=m,v=null,w,p=this;this.$$setOptions=function(a){if((p.$options=a)&&a.getterSetter){var b=e(d.ngModel+"()"),f=e(d.ngModel+"($$$p)");r=function(a){var c=n(a);E(c)&&(c=b(a));return c};s=function(a,b){E(n(a))?f(a,{$$$p:b}):m(a,b)}}else if(!n.assign)throw lb("nonassign",d.ngModel,wa(c));};this.$render=C;this.$isEmpty=function(a){return y(a)||""===a||null===a||a!==a};this.$$updateEmptyClasses=function(a){p.$isEmpty(a)?(f.removeClass(c,"ng-not-empty"),
-f.addClass(c,"ng-empty")):(f.removeClass(c,"ng-empty"),f.addClass(c,"ng-not-empty"))};var H=0;Jd({ctrl:this,$element:c,set:function(a,b){a[b]=!0},unset:function(a,b){delete a[b]},$animate:f});this.$setPristine=function(){p.$dirty=!1;p.$pristine=!0;f.removeClass(c,Kb);f.addClass(c,Ua)};this.$setDirty=function(){p.$dirty=!0;p.$pristine=!1;f.removeClass(c,Ua);f.addClass(c,Kb);p.$$parentForm.$setDirty()};this.$setUntouched=function(){p.$touched=!1;p.$untouched=!0;f.setClass(c,"ng-untouched","ng-touched")};
-this.$setTouched=function(){p.$touched=!0;p.$untouched=!1;f.setClass(c,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){g.cancel(v);p.$viewValue=p.$$lastCommittedViewValue;p.$render()};this.$validate=function(){if(!Q(p.$modelValue)||!isNaN(p.$modelValue)){var a=p.$$rawModelValue,b=p.$valid,c=p.$modelValue,d=p.$options&&p.$options.allowInvalid;p.$$runValidators(a,p.$$lastCommittedViewValue,function(e){d||b===e||(p.$modelValue=e?a:void 0,p.$modelValue!==c&&p.$$writeModelToScope())})}};
-this.$$runValidators=function(a,b,c){function d(){var c=!0;q(p.$validators,function(d,e){var g=d(a,b);c=c&&g;f(e,g)});return c?!0:(q(p.$asyncValidators,function(a,b){f(b,null)}),!1)}function e(){var c=[],d=!0;q(p.$asyncValidators,function(e,g){var h=e(a,b);if(!h||!E(h.then))throw lb("nopromise",h);f(g,void 0);c.push(h.then(function(){f(g,!0)},function(){d=!1;f(g,!1)}))});c.length?k.all(c).then(function(){g(d)},C):g(!0)}function f(a,b){h===H&&p.$setValidity(a,b)}function g(a){h===H&&c(a)}H++;var h=
-H;(function(){var a=p.$$parserName||"parse";if(y(w))f(a,null);else return w||(q(p.$validators,function(a,b){f(b,null)}),q(p.$asyncValidators,function(a,b){f(b,null)})),f(a,w),w;return!0})()?d()?e():g(!1):g(!1)};this.$commitViewValue=function(){var a=p.$viewValue;g.cancel(v);if(p.$$lastCommittedViewValue!==a||""===a&&p.$$hasNativeValidators)p.$$updateEmptyClasses(a),p.$$lastCommittedViewValue=a,p.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var b=p.$$lastCommittedViewValue;
-if(w=y(b)?void 0:!0)for(var c=0;c<p.$parsers.length;c++)if(b=p.$parsers[c](b),y(b)){w=!1;break}Q(p.$modelValue)&&isNaN(p.$modelValue)&&(p.$modelValue=r(a));var d=p.$modelValue,e=p.$options&&p.$options.allowInvalid;p.$$rawModelValue=b;e&&(p.$modelValue=b,p.$modelValue!==d&&p.$$writeModelToScope());p.$$runValidators(b,p.$$lastCommittedViewValue,function(a){e||(p.$modelValue=a?b:void 0,p.$modelValue!==d&&p.$$writeModelToScope())})};this.$$writeModelToScope=function(){s(a,p.$modelValue);q(p.$viewChangeListeners,
-function(a){try{a()}catch(c){b(c)}})};this.$setViewValue=function(a,b){p.$viewValue=a;p.$options&&!p.$options.updateOnDefault||p.$$debounceViewValueCommit(b)};this.$$debounceViewValueCommit=function(b){var c=0,d=p.$options;d&&x(d.debounce)&&(d=d.debounce,Q(d)?c=d:Q(d[b])?c=d[b]:Q(d["default"])&&(c=d["default"]));g.cancel(v);c?v=g(function(){p.$commitViewValue()},c):h.$$phase?p.$commitViewValue():a.$apply(function(){p.$commitViewValue()})};a.$watch(function(){var b=r(a);if(b!==p.$modelValue&&(p.$modelValue===
-p.$modelValue||b===b)){p.$modelValue=p.$$rawModelValue=b;w=void 0;for(var c=p.$formatters,d=c.length,e=b;d--;)e=c[d](e);p.$viewValue!==e&&(p.$$updateEmptyClasses(e),p.$viewValue=p.$$lastCommittedViewValue=e,p.$render(),p.$$runValidators(b,e,C))}return b})}],Qe=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:Mg,priority:1,compile:function(b){b.addClass(Ua).addClass("ng-untouched").addClass(mb);return{pre:function(a,b,e,f){var g=f[0];b=f[1]||
-g.$$parentForm;g.$$setOptions(f[2]&&f[2].$options);b.$addControl(g);e.$observe("name",function(a){g.$name!==a&&g.$$parentForm.$$renameControl(g,a)});a.$on("$destroy",function(){g.$$parentForm.$removeControl(g)})},post:function(b,c,e,f){var g=f[0];if(g.$options&&g.$options.updateOn)c.on(g.$options.updateOn,function(a){g.$$debounceViewValueCommit(a&&a.type)});c.on("blur",function(){g.$touched||(a.$$phase?b.$evalAsync(g.$setTouched):b.$apply(g.$setTouched))})}}}}}],Ng=/(\s+|^)default(\s+|$)/,Ue=function(){return{restrict:"A",
-controller:["$scope","$attrs",function(a,b){var d=this;this.$options=qa(a.$eval(b.ngModelOptions));x(this.$options.updateOn)?(this.$options.updateOnDefault=!1,this.$options.updateOn=V(this.$options.updateOn.replace(Ng,function(){d.$options.updateOnDefault=!0;return" "}))):this.$options.updateOnDefault=!0}]}},Ge=La({terminal:!0,priority:1E3}),Og=O("ngOptions"),Pg=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
-Oe=["$compile","$document","$parse",function(a,b,d){function c(a,b,c){function e(a,b,c,d,f){this.selectValue=a;this.viewValue=b;this.label=c;this.group=d;this.disabled=f}function f(a){var b;if(!q&&ya(a))b=a;else{b=[];for(var c in a)a.hasOwnProperty(c)&&"$"!==c.charAt(0)&&b.push(c)}return b}var m=a.match(Pg);if(!m)throw Og("iexp",a,wa(b));var r=m[5]||m[7],q=m[6];a=/ as /.test(m[0])&&m[1];var s=m[9];b=d(m[2]?m[1]:r);var w=a&&d(a)||b,p=s&&d(s),v=s?function(a,b){return p(c,b)}:function(a){return Fa(a)},
-t=function(a,b){return v(a,L(a,b))},z=d(m[2]||m[1]),u=d(m[3]||""),y=d(m[4]||""),x=d(m[8]),D={},L=q?function(a,b){D[q]=b;D[r]=a;return D}:function(a){D[r]=a;return D};return{trackBy:s,getTrackByValue:t,getWatchables:d(x,function(a){var b=[];a=a||[];for(var d=f(a),e=d.length,g=0;g<e;g++){var h=a===d?g:d[g],l=a[h],h=L(l,h),l=v(l,h);b.push(l);if(m[2]||m[1])l=z(c,h),b.push(l);m[4]&&(h=y(c,h),b.push(h))}return b}),getOptions:function(){for(var a=[],b={},d=x(c)||[],g=f(d),h=g.length,m=0;m<h;m++){var p=d===
-g?m:g[m],q=L(d[p],p),r=w(c,q),p=v(r,q),D=z(c,q),N=u(c,q),q=y(c,q),r=new e(p,r,D,N,q);a.push(r);b[p]=r}return{items:a,selectValueMap:b,getOptionFromViewValue:function(a){return b[t(a)]},getViewValueFromOption:function(a){return s?ea.copy(a.viewValue):a.viewValue}}}}}var e=v.document.createElement("option"),f=v.document.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","ngModel"],link:{pre:function(a,b,c,d){d[0].registerOption=C},post:function(d,h,k,l){function n(a,b){a.element=
-b;b.disabled=a.disabled;a.label!==b.label&&(b.label=a.label,b.textContent=a.label);a.value!==b.value&&(b.value=a.selectValue)}function m(){var a=u&&r.readValue();if(u)for(var b=u.items.length-1;0<=b;b--){var c=u.items[b];c.group?Bb(c.element.parentNode):Bb(c.element)}u=I.getOptions();var d={};t&&h.prepend(w);u.items.forEach(function(a){var b;if(x(a.group)){b=d[a.group];b||(b=f.cloneNode(!1),E.appendChild(b),b.label=a.group,d[a.group]=b);var c=e.cloneNode(!1)}else b=E,c=e.cloneNode(!1);b.appendChild(c);
-n(a,c)});h[0].appendChild(E);s.$render();s.$isEmpty(a)||(b=r.readValue(),(I.trackBy||v?pa(a,b):a===b)||(s.$setViewValue(b),s.$render()))}var r=l[0],s=l[1],v=k.multiple,w;l=0;for(var p=h.children(),y=p.length;l<y;l++)if(""===p[l].value){w=p.eq(l);break}var t=!!w,z=B(e.cloneNode(!1));z.val("?");var u,I=c(k.ngOptions,h,d),E=b[0].createDocumentFragment();v?(s.$isEmpty=function(a){return!a||0===a.length},r.writeValue=function(a){u.items.forEach(function(a){a.element.selected=!1});a&&a.forEach(function(a){if(a=
-u.getOptionFromViewValue(a))a.element.selected=!0})},r.readValue=function(){var a=h.val()||[],b=[];q(a,function(a){(a=u.selectValueMap[a])&&!a.disabled&&b.push(u.getViewValueFromOption(a))});return b},I.trackBy&&d.$watchCollection(function(){if(K(s.$viewValue))return s.$viewValue.map(function(a){return I.getTrackByValue(a)})},function(){s.$render()})):(r.writeValue=function(a){var b=u.getOptionFromViewValue(a);b?(h[0].value!==b.selectValue&&(z.remove(),t||w.remove(),h[0].value=b.selectValue,b.element.selected=
-!0),b.element.setAttribute("selected","selected")):null===a||t?(z.remove(),t||h.prepend(w),h.val(""),w.prop("selected",!0),w.attr("selected",!0)):(t||w.remove(),h.prepend(z),h.val("?"),z.prop("selected",!0),z.attr("selected",!0))},r.readValue=function(){var a=u.selectValueMap[h.val()];return a&&!a.disabled?(t||w.remove(),z.remove(),u.getViewValueFromOption(a)):null},I.trackBy&&d.$watch(function(){return I.getTrackByValue(s.$viewValue)},function(){s.$render()}));t?(w.remove(),a(w)(d),w.removeClass("ng-scope")):
-w=B(e.cloneNode(!1));h.empty();m();d.$watchCollection(I.getWatchables,m)}}}}],He=["$locale","$interpolate","$log",function(a,b,d){var c=/{}/g,e=/^when(Minus)?(.+)$/;return{link:function(f,g,h){function k(a){g.text(a||"")}var l=h.count,n=h.$attr.when&&g.attr(h.$attr.when),m=h.offset||0,r=f.$eval(n)||{},s={},v=b.startSymbol(),w=b.endSymbol(),p=v+l+"-"+m+w,x=ea.noop,t;q(h,function(a,b){var c=e.exec(b);c&&(c=(c[1]?"-":"")+P(c[2]),r[c]=g.attr(h.$attr[b]))});q(r,function(a,d){s[d]=b(a.replace(c,p))});f.$watch(l,
-function(b){var c=parseFloat(b),e=isNaN(c);e||c in r||(c=a.pluralCat(c-m));c===t||e&&Q(t)&&isNaN(t)||(x(),e=s[c],y(e)?(null!=b&&d.debug("ngPluralize: no rule defined for '"+c+"' in "+n),x=C,k()):x=f.$watch(e,k),t=c)})}}}],Ie=["$parse","$animate","$compile",function(a,b,d){var c=O("ngRepeat"),e=function(a,b,c,d,e,n,m){a[c]=d;e&&(a[e]=n);a.$index=b;a.$first=0===b;a.$last=b===m-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(b&1))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,
-terminal:!0,$$tlb:!0,compile:function(f,g){var h=g.ngRepeat,k=d.$$createComment("end ngRepeat",h),l=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!l)throw c("iexp",h);var n=l[1],m=l[2],r=l[3],s=l[4],l=n.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);if(!l)throw c("iidexp",n);var v=l[3]||l[1],w=l[2];if(r&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(r)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(r)))throw c("badident",
-r);var p,y,t,z,u={$id:Fa};s?p=a(s):(t=function(a,b){return Fa(b)},z=function(a){return a});return function(a,d,f,g,l){p&&(y=function(b,c,d){w&&(u[w]=b);u[v]=c;u.$index=d;return p(a,u)});var n=T();a.$watchCollection(m,function(f){var g,m,p=d[0],s,u=T(),x,D,E,C,F,B,G;r&&(a[r]=f);if(ya(f))F=f,m=y||t;else for(G in m=y||z,F=[],f)ua.call(f,G)&&"$"!==G.charAt(0)&&F.push(G);x=F.length;G=Array(x);for(g=0;g<x;g++)if(D=f===F?g:F[g],E=f[D],C=m(D,E,g),n[C])B=n[C],delete n[C],u[C]=B,G[g]=B;else{if(u[C])throw q(G,
-function(a){a&&a.scope&&(n[a.id]=a)}),c("dupes",h,C,E);G[g]={id:C,scope:void 0,clone:void 0};u[C]=!0}for(s in n){B=n[s];C=rb(B.clone);b.leave(C);if(C[0].parentNode)for(g=0,m=C.length;g<m;g++)C[g].$$NG_REMOVED=!0;B.scope.$destroy()}for(g=0;g<x;g++)if(D=f===F?g:F[g],E=f[D],B=G[g],B.scope){s=p;do s=s.nextSibling;while(s&&s.$$NG_REMOVED);B.clone[0]!=s&&b.move(rb(B.clone),null,p);p=B.clone[B.clone.length-1];e(B.scope,g,v,E,w,D,x)}else l(function(a,c){B.scope=c;var d=k.cloneNode(!1);a[a.length++]=d;b.enter(a,
-null,p);p=d;B.clone=a;u[B.id]=B;e(B.scope,g,v,E,w,D,x)});n=u})}}}}],Je=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngShow,function(b){a[b?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],Ce=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngHide,function(b){a[b?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],Ke=La(function(a,b,d){a.$watch(d.ngStyle,function(a,
-d){d&&a!==d&&q(d,function(a,c){b.css(c,"")});a&&b.css(a)},!0)}),Le=["$animate","$compile",function(a,b){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(d,c,e,f){var g=[],h=[],k=[],l=[],n=function(a,b){return function(){a.splice(b,1)}};d.$watch(e.ngSwitch||e.on,function(c){var d,e;d=0;for(e=k.length;d<e;++d)a.cancel(k[d]);d=k.length=0;for(e=l.length;d<e;++d){var s=rb(h[d].clone);l[d].$destroy();(k[d]=a.leave(s)).then(n(k,d))}h.length=0;l.length=0;(g=f.cases["!"+
-c]||f.cases["?"])&&q(g,function(c){c.transclude(function(d,e){l.push(e);var f=c.element;d[d.length++]=b.$$createComment("end ngSwitchWhen");h.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],Me=La({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){c.cases["!"+d.ngSwitchWhen]=c.cases["!"+d.ngSwitchWhen]||[];c.cases["!"+d.ngSwitchWhen].push({transclude:e,element:b})}}),Ne=La({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,
-b,d,c,e){c.cases["?"]=c.cases["?"]||[];c.cases["?"].push({transclude:e,element:b})}}),Qg=O("ngTransclude"),Pe=La({restrict:"EAC",link:function(a,b,d,c,e){d.ngTransclude===d.$attr.ngTransclude&&(d.ngTransclude="");if(!e)throw Qg("orphan",wa(b));e(function(a){a.length&&(b.empty(),b.append(a))},null,d.ngTransclude||d.ngTranscludeSlot)}}),pe=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(b,d){"text/ng-template"==d.type&&a.put(d.id,b[0].text)}}}],Rg={$setViewValue:C,$render:C},
-Sg=["$element","$scope",function(a,b){var d=this,c=new Ra;d.ngModelCtrl=Rg;d.unknownOption=B(v.document.createElement("option"));d.renderUnknownOption=function(b){b="? "+Fa(b)+" ?";d.unknownOption.val(b);a.prepend(d.unknownOption);a.val(b)};b.$on("$destroy",function(){d.renderUnknownOption=C});d.removeUnknownOption=function(){d.unknownOption.parent()&&d.unknownOption.remove()};d.readValue=function(){d.removeUnknownOption();return a.val()};d.writeValue=function(b){d.hasOption(b)?(d.removeUnknownOption(),
-a.val(b),""===b&&d.emptyOption.prop("selected",!0)):null==b&&d.emptyOption?(d.removeUnknownOption(),a.val("")):d.renderUnknownOption(b)};d.addOption=function(a,b){if(8!==b[0].nodeType){Qa(a,'"option value"');""===a&&(d.emptyOption=b);var g=c.get(a)||0;c.put(a,g+1);d.ngModelCtrl.$render();b[0].hasAttribute("selected")&&(b[0].selected=!0)}};d.removeOption=function(a){var b=c.get(a);b&&(1===b?(c.remove(a),""===a&&(d.emptyOption=void 0)):c.put(a,b-1))};d.hasOption=function(a){return!!c.get(a)};d.registerOption=
-function(a,b,c,h,k){if(h){var l;c.$observe("value",function(a){x(l)&&d.removeOption(l);l=a;d.addOption(a,b)})}else k?a.$watch(k,function(a,e){c.$set("value",a);e!==a&&d.removeOption(e);d.addOption(a,b)}):d.addOption(c.value,b);b.on("$destroy",function(){d.removeOption(c.value);d.ngModelCtrl.$render()})}}],qe=function(){return{restrict:"E",require:["select","?ngModel"],controller:Sg,priority:1,link:{pre:function(a,b,d,c){var e=c[1];if(e){var f=c[0];f.ngModelCtrl=e;b.on("change",function(){a.$apply(function(){e.$setViewValue(f.readValue())})});
-if(d.multiple){f.readValue=function(){var a=[];q(b.find("option"),function(b){b.selected&&a.push(b.value)});return a};f.writeValue=function(a){var c=new Ra(a);q(b.find("option"),function(a){a.selected=x(c.get(a.value))})};var g,h=NaN;a.$watch(function(){h!==e.$viewValue||pa(g,e.$viewValue)||(g=ha(e.$viewValue),e.$render());h=e.$viewValue});e.$isEmpty=function(a){return!a||0===a.length}}}},post:function(a,b,d,c){var e=c[1];if(e){var f=c[0];e.$render=function(){f.writeValue(e.$viewValue)}}}}}},se=["$interpolate",
-function(a){return{restrict:"E",priority:100,compile:function(b,d){if(x(d.value))var c=a(d.value,!0);else{var e=a(b.text(),!0);e||d.$set("value",b.text())}return function(a,b,d){var k=b.parent();(k=k.data("$selectController")||k.parent().data("$selectController"))&&k.registerOption(a,b,d,c,e)}}}}],re=da({restrict:"E",terminal:!1}),Fc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){c&&(d.required=!0,c.$validators.required=function(a,b){return!d.required||!c.$isEmpty(b)},d.$observe("required",
-function(){c.$validate()}))}}},Ec=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e,f=d.ngPattern||d.pattern;d.$observe("pattern",function(a){F(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw O("ngPattern")("noregexp",f,a,wa(b));e=a||void 0;c.$validate()});c.$validators.pattern=function(a,b){return c.$isEmpty(b)||y(e)||e.test(b)}}}}},Hc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e=-1;d.$observe("maxlength",function(a){a=
-X(a);e=isNaN(a)?-1:a;c.$validate()});c.$validators.maxlength=function(a,b){return 0>e||c.$isEmpty(b)||b.length<=e}}}}},Gc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e=0;d.$observe("minlength",function(a){e=X(a)||0;c.$validate()});c.$validators.minlength=function(a,b){return c.$isEmpty(b)||b.length>=e}}}}};v.angular.bootstrap?v.console&&console.log("WARNING: Tried to load angular more than once."):(ie(),ke(ea),ea.module("ngLocale",[],["$provide",function(a){function b(a){a+=
-"";var b=a.indexOf(".");return-1==b?0:a.length-b-1}a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),STANDALONEMONTH:"January February March April May June July August September October November December".split(" "),
-WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-\u00a4",negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(a,
-c){var e=a|0,f=c;void 0===f&&(f=Math.min(b(a),3));Math.pow(10,f);return 1==e&&0==f?"one":"other"}})}]),B(v.document).ready(function(){ee(v.document,yc)}))})(window);!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>');
-//# sourceMappingURL=angular.min.js.map
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/js/aql-mode.js b/asterixdb/asterix-app/src/main/resources/queryui/js/aql-mode.js
deleted file mode 100644
index 861a507..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/js/aql-mode.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-CodeMirror.defineMode("aql", function() {
-
-  var KEYWORD_MATCH = ["return","select","for","from","at","in","let","with","where","order","by","asc","desc","group",
-                        "keeping","limit","offset","distinct","dataset","or","and"];
-  var VAR_MATCH = /[$][a-zA-Z]+(\d*)/;
-  var DOT_MATCH = /[.](\S)*/;
-  var DOUBLE_QUOTE_MATCH = /["].*["]/;
-  var SINGLE_QUOTE_MATCH = /['].*[']/;
-  var BREAK_POINT = /(\s)/;
-  return {
-    startState: function() {return {inString: false};},
-    token: function(stream, state) {
-
-          if (state.newLine == undefined)state.newLine = true;
-
-          //match variable reference
-          if (stream.match(VAR_MATCH)) {
-            return "variable-2";
-          }
-
-          if (stream.match(DOT_MATCH)) {
-            return "variable-3";
-          }
-
-          //string variable match
-          if (stream.match(DOUBLE_QUOTE_MATCH)) {
-            return "string";
-          }
-          if (stream.match(SINGLE_QUOTE_MATCH)) {
-            return "string";
-          }
-
-          //keyword match
-          for (i in KEYWORD_MATCH){
-            if (state.newLine && stream.match(KEYWORD_MATCH[i])){
-                return "keyword";
-             }
-          }
-          if (stream.peek() === " " || stream.peek() === null){
-            state.newLine = true;
-          }else{
-            state.newLine = false;
-          }
-          stream.next();
-
-      }
-  };
-});
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/js/bootstrap.min.js b/asterixdb/asterix-app/src/main/resources/queryui/js/bootstrap.min.js
deleted file mode 100644
index a74bb45..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/js/bootstrap.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
- /*! Bootstrap v3.3.6 (http://getbootstrap.com) | Copyright 2011-2015 Twitter, Inc. | Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>2)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.6",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.6",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.6",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.6",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.6",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.6",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.6",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.6",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.6",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");
-d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.6",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.6",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/js/codemirror.js b/asterixdb/asterix-app/src/main/resources/queryui/js/codemirror.js
deleted file mode 100644
index b27c2d6..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/js/codemirror.js
+++ /dev/null
@@ -1,8927 +0,0 @@
-/*
- * Copyright (C) 2016 by Marijn Haverbeke <marijnh@gmail.com> and others
- *
- * 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.
- */
-
-// This is CodeMirror (http://codemirror.net), a code editor
-// implemented in JavaScript on top of the browser's DOM.
-//
-// You can find some technical background for some of the code below
-// at http://marijnhaverbeke.nl/blog/#cm-internals .
-
-(function(mod) {
-  if (typeof exports == "object" && typeof module == "object") // CommonJS
-    module.exports = mod();
-  else if (typeof define == "function" && define.amd) // AMD
-    return define([], mod);
-  else // Plain browser env
-    (this || window).CodeMirror = mod();
-})(function() {
-  "use strict";
-
-  // BROWSER SNIFFING
-
-  // Kludges for bugs and behavior differences that can't be feature
-  // detected are enabled based on userAgent etc sniffing.
-  var userAgent = navigator.userAgent;
-  var platform = navigator.platform;
-
-  var gecko = /gecko\/\d/i.test(userAgent);
-  var ie_upto10 = /MSIE \d/.test(userAgent);
-  var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent);
-  var ie = ie_upto10 || ie_11up;
-  var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1]);
-  var webkit = /WebKit\//.test(userAgent);
-  var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent);
-  var chrome = /Chrome\//.test(userAgent);
-  var presto = /Opera\//.test(userAgent);
-  var safari = /Apple Computer/.test(navigator.vendor);
-  var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent);
-  var phantom = /PhantomJS/.test(userAgent);
-
-  var ios = /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent);
-  // This is woefully incomplete. Suggestions for alternative methods welcome.
-  var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);
-  var mac = ios || /Mac/.test(platform);
-  var chromeOS = /\bCrOS\b/.test(userAgent);
-  var windows = /win/i.test(platform);
-
-  var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/);
-  if (presto_version) presto_version = Number(presto_version[1]);
-  if (presto_version && presto_version >= 15) { presto = false; webkit = true; }
-  // Some browsers use the wrong event properties to signal cmd/ctrl on OS X
-  var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));
-  var captureRightClick = gecko || (ie && ie_version >= 9);
-
-  // Optimize some code when these features are not used.
-  var sawReadOnlySpans = false, sawCollapsedSpans = false;
-
-  // EDITOR CONSTRUCTOR
-
-  // A CodeMirror instance represents an editor. This is the object
-  // that user code is usually dealing with.
-
-  function CodeMirror(place, options) {
-    if (!(this instanceof CodeMirror)) return new CodeMirror(place, options);
-
-    this.options = options = options ? copyObj(options) : {};
-    // Determine effective options based on given values and defaults.
-    copyObj(defaults, options, false);
-    setGuttersForLineNumbers(options);
-
-    var doc = options.value;
-    if (typeof doc == "string") doc = new Doc(doc, options.mode, null, options.lineSeparator);
-    this.doc = doc;
-
-    var input = new CodeMirror.inputStyles[options.inputStyle](this);
-    var display = this.display = new Display(place, doc, input);
-    display.wrapper.CodeMirror = this;
-    updateGutters(this);
-    themeChanged(this);
-    if (options.lineWrapping)
-      this.display.wrapper.className += " CodeMirror-wrap";
-    if (options.autofocus && !mobile) display.input.focus();
-    initScrollbars(this);
-
-    this.state = {
-      keyMaps: [],  // stores maps added by addKeyMap
-      overlays: [], // highlighting overlays, as added by addOverlay
-      modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info
-      overwrite: false,
-      delayingBlurEvent: false,
-      focused: false,
-      suppressEdits: false, // used to disable editing during key handlers when in readOnly mode
-      pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll
-      selectingText: false,
-      draggingText: false,
-      highlight: new Delayed(), // stores highlight worker timeout
-      keySeq: null,  // Unfinished key sequence
-      specialChars: null
-    };
-
-    var cm = this;
-
-    // Override magic textarea content restore that IE sometimes does
-    // on our hidden textarea on reload
-    if (ie && ie_version < 11) setTimeout(function() { cm.display.input.reset(true); }, 20);
-
-    registerEventHandlers(this);
-    ensureGlobalHandlers();
-
-    startOperation(this);
-    this.curOp.forceUpdate = true;
-    attachDoc(this, doc);
-
-    if ((options.autofocus && !mobile) || cm.hasFocus())
-      setTimeout(bind(onFocus, this), 20);
-    else
-      onBlur(this);
-
-    for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt))
-      optionHandlers[opt](this, options[opt], Init);
-    maybeUpdateLineNumberWidth(this);
-    if (options.finishInit) options.finishInit(this);
-    for (var i = 0; i < initHooks.length; ++i) initHooks[i](this);
-    endOperation(this);
-    // Suppress optimizelegibility in Webkit, since it breaks text
-    // measuring on line wrapping boundaries.
-    if (webkit && options.lineWrapping &&
-        getComputedStyle(display.lineDiv).textRendering == "optimizelegibility")
-      display.lineDiv.style.textRendering = "auto";
-  }
-
-  // DISPLAY CONSTRUCTOR
-
-  // The display handles the DOM integration, both for input reading
-  // and content drawing. It holds references to DOM nodes and
-  // display-related state.
-
-  function Display(place, doc, input) {
-    var d = this;
-    this.input = input;
-
-    // Covers bottom-right square when both scrollbars are present.
-    d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler");
-    d.scrollbarFiller.setAttribute("cm-not-content", "true");
-    // Covers bottom of gutter when coverGutterNextToScrollbar is on
-    // and h scrollbar is present.
-    d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler");
-    d.gutterFiller.setAttribute("cm-not-content", "true");
-    // Will contain the actual code, positioned to cover the viewport.
-    d.lineDiv = elt("div", null, "CodeMirror-code");
-    // Elements are added to these to represent selection and cursors.
-    d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1");
-    d.cursorDiv = elt("div", null, "CodeMirror-cursors");
-    // A visibility: hidden element used to find the size of things.
-    d.measure = elt("div", null, "CodeMirror-measure");
-    // When lines outside of the viewport are measured, they are drawn in this.
-    d.lineMeasure = elt("div", null, "CodeMirror-measure");
-    // Wraps everything that needs to exist inside the vertically-padded coordinate system
-    d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],
-                      null, "position: relative; outline: none");
-    // Moved around its parent to cover visible view.
-    d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative");
-    // Set to the height of the document, allowing scrolling.
-    d.sizer = elt("div", [d.mover], "CodeMirror-sizer");
-    d.sizerWidth = null;
-    // Behavior of elts with overflow: auto and padding is
-    // inconsistent across browsers. This is used to ensure the
-    // scrollable area is big enough.
-    d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;");
-    // Will contain the gutters, if any.
-    d.gutters = elt("div", null, "CodeMirror-gutters");
-    d.lineGutter = null;
-    // Actual scrollable element.
-    d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll");
-    d.scroller.setAttribute("tabIndex", "-1");
-    // The element in which the editor lives.
-    d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror");
-
-    // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)
-    if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }
-    if (!webkit && !(gecko && mobile)) d.scroller.draggable = true;
-
-    if (place) {
-      if (place.appendChild) place.appendChild(d.wrapper);
-      else place(d.wrapper);
-    }
-
-    // Current rendered range (may be bigger than the view window).
-    d.viewFrom = d.viewTo = doc.first;
-    d.reportedViewFrom = d.reportedViewTo = doc.first;
-    // Information about the rendered lines.
-    d.view = [];
-    d.renderedView = null;
-    // Holds info about a single rendered line when it was rendered
-    // for measurement, while not in view.
-    d.externalMeasured = null;
-    // Empty space (in pixels) above the view
-    d.viewOffset = 0;
-    d.lastWrapHeight = d.lastWrapWidth = 0;
-    d.updateLineNumbers = null;
-
-    d.nativeBarWidth = d.barHeight = d.barWidth = 0;
-    d.scrollbarsClipped = false;
-
-    // Used to only resize the line number gutter when necessary (when
-    // the amount of lines crosses a boundary that makes its width change)
-    d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;
-    // Set to true when a non-horizontal-scrolling line widget is
-    // added. As an optimization, line widget aligning is skipped when
-    // this is false.
-    d.alignWidgets = false;
-
-    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
-
-    // Tracks the maximum line length so that the horizontal scrollbar
-    // can be kept static when scrolling.
-    d.maxLine = null;
-    d.maxLineLength = 0;
-    d.maxLineChanged = false;
-
-    // Used for measuring wheel scrolling granularity
-    d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;
-
-    // True when shift is held down.
-    d.shift = false;
-
-    // Used to track whether anything happened since the context menu
-    // was opened.
-    d.selForContextMenu = null;
-
-    d.activeTouch = null;
-
-    input.init(d);
-  }
-
-  // STATE UPDATES
-
-  // Used to get the editor into a consistent state again when options change.
-
-  function loadMode(cm) {
-    cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption);
-    resetModeState(cm);
-  }
-
-  function resetModeState(cm) {
-    cm.doc.iter(function(line) {
-      if (line.stateAfter) line.stateAfter = null;
-      if (line.styles) line.styles = null;
-    });
-    cm.doc.frontier = cm.doc.first;
-    startWorker(cm, 100);
-    cm.state.modeGen++;
-    if (cm.curOp) regChange(cm);
-  }
-
-  function wrappingChanged(cm) {
-    if (cm.options.lineWrapping) {
-      addClass(cm.display.wrapper, "CodeMirror-wrap");
-      cm.display.sizer.style.minWidth = "";
-      cm.display.sizerWidth = null;
-    } else {
-      rmClass(cm.display.wrapper, "CodeMirror-wrap");
-      findMaxLine(cm);
-    }
-    estimateLineHeights(cm);
-    regChange(cm);
-    clearCaches(cm);
-    setTimeout(function(){updateScrollbars(cm);}, 100);
-  }
-
-  // Returns a function that estimates the height of a line, to use as
-  // first approximation until the line becomes visible (and is thus
-  // properly measurable).
-  function estimateHeight(cm) {
-    var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;
-    var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);
-    return function(line) {
-      if (lineIsHidden(cm.doc, line)) return 0;
-
-      var widgetsHeight = 0;
-      if (line.widgets) for (var i = 0; i < line.widgets.length; i++) {
-        if (line.widgets[i].height) widgetsHeight += line.widgets[i].height;
-      }
-
-      if (wrapping)
-        return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th;
-      else
-        return widgetsHeight + th;
-    };
-  }
-
-  function estimateLineHeights(cm) {
-    var doc = cm.doc, est = estimateHeight(cm);
-    doc.iter(function(line) {
-      var estHeight = est(line);
-      if (estHeight != line.height) updateLineHeight(line, estHeight);
-    });
-  }
-
-  function themeChanged(cm) {
-    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") +
-      cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-");
-    clearCaches(cm);
-  }
-
-  function guttersChanged(cm) {
-    updateGutters(cm);
-    regChange(cm);
-    setTimeout(function(){alignHorizontally(cm);}, 20);
-  }
-
-  // Rebuild the gutter elements, ensure the margin to the left of the
-  // code matches their width.
-  function updateGutters(cm) {
-    var gutters = cm.display.gutters, specs = cm.options.gutters;
-    removeChildren(gutters);
-    for (var i = 0; i < specs.length; ++i) {
-      var gutterClass = specs[i];
-      var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass));
-      if (gutterClass == "CodeMirror-linenumbers") {
-        cm.display.lineGutter = gElt;
-        gElt.style.width = (cm.display.lineNumWidth || 1) + "px";
-      }
-    }
-    gutters.style.display = i ? "" : "none";
-    updateGutterSpace(cm);
-  }
-
-  function updateGutterSpace(cm) {
-    var width = cm.display.gutters.offsetWidth;
-    cm.display.sizer.style.marginLeft = width + "px";
-  }
-
-  // Compute the character length of a line, taking into account
-  // collapsed ranges (see markText) that might hide parts, and join
-  // other lines onto it.
-  function lineLength(line) {
-    if (line.height == 0) return 0;
-    var len = line.text.length, merged, cur = line;
-    while (merged = collapsedSpanAtStart(cur)) {
-      var found = merged.find(0, true);
-      cur = found.from.line;
-      len += found.from.ch - found.to.ch;
-    }
-    cur = line;
-    while (merged = collapsedSpanAtEnd(cur)) {
-      var found = merged.find(0, true);
-      len -= cur.text.length - found.from.ch;
-      cur = found.to.line;
-      len += cur.text.length - found.to.ch;
-    }
-    return len;
-  }
-
-  // Find the longest line in the document.
-  function findMaxLine(cm) {
-    var d = cm.display, doc = cm.doc;
-    d.maxLine = getLine(doc, doc.first);
-    d.maxLineLength = lineLength(d.maxLine);
-    d.maxLineChanged = true;
-    doc.iter(function(line) {
-      var len = lineLength(line);
-      if (len > d.maxLineLength) {
-        d.maxLineLength = len;
-        d.maxLine = line;
-      }
-    });
-  }
-
-  // Make sure the gutters options contains the element
-  // "CodeMirror-linenumbers" when the lineNumbers option is true.
-  function setGuttersForLineNumbers(options) {
-    var found = indexOf(options.gutters, "CodeMirror-linenumbers");
-    if (found == -1 && options.lineNumbers) {
-      options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]);
-    } else if (found > -1 && !options.lineNumbers) {
-      options.gutters = options.gutters.slice(0);
-      options.gutters.splice(found, 1);
-    }
-  }
-
-  // SCROLLBARS
-
-  // Prepare DOM reads needed to update the scrollbars. Done in one
-  // shot to minimize update/measure roundtrips.
-  function measureForScrollbars(cm) {
-    var d = cm.display, gutterW = d.gutters.offsetWidth;
-    var docH = Math.round(cm.doc.height + paddingVert(cm.display));
-    return {
-      clientHeight: d.scroller.clientHeight,
-      viewHeight: d.wrapper.clientHeight,
-      scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,
-      viewWidth: d.wrapper.clientWidth,
-      barLeft: cm.options.fixedGutter ? gutterW : 0,
-      docHeight: docH,
-      scrollHeight: docH + scrollGap(cm) + d.barHeight,
-      nativeBarWidth: d.nativeBarWidth,
-      gutterWidth: gutterW
-    };
-  }
-
-  function NativeScrollbars(place, scroll, cm) {
-    this.cm = cm;
-    var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar");
-    var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar");
-    place(vert); place(horiz);
-
-    on(vert, "scroll", function() {
-      if (vert.clientHeight) scroll(vert.scrollTop, "vertical");
-    });
-    on(horiz, "scroll", function() {
-      if (horiz.clientWidth) scroll(horiz.scrollLeft, "horizontal");
-    });
-
-    this.checkedZeroWidth = false;
-    // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
-    if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = "18px";
-  }
-
-  NativeScrollbars.prototype = copyObj({
-    update: function(measure) {
-      var needsH = measure.scrollWidth > measure.clientWidth + 1;
-      var needsV = measure.scrollHeight > measure.clientHeight + 1;
-      var sWidth = measure.nativeBarWidth;
-
-      if (needsV) {
-        this.vert.style.display = "block";
-        this.vert.style.bottom = needsH ? sWidth + "px" : "0";
-        var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);
-        // A bug in IE8 can cause this value to be negative, so guard it.
-        this.vert.firstChild.style.height =
-          Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px";
-      } else {
-        this.vert.style.display = "";
-        this.vert.firstChild.style.height = "0";
-      }
-
-      if (needsH) {
-        this.horiz.style.display = "block";
-        this.horiz.style.right = needsV ? sWidth + "px" : "0";
-        this.horiz.style.left = measure.barLeft + "px";
-        var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);
-        this.horiz.firstChild.style.width =
-          (measure.scrollWidth - measure.clientWidth + totalWidth) + "px";
-      } else {
-        this.horiz.style.display = "";
-        this.horiz.firstChild.style.width = "0";
-      }
-
-      if (!this.checkedZeroWidth && measure.clientHeight > 0) {
-        if (sWidth == 0) this.zeroWidthHack();
-        this.checkedZeroWidth = true;
-      }
-
-      return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0};
-    },
-    setScrollLeft: function(pos) {
-      if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos;
-      if (this.disableHoriz) this.enableZeroWidthBar(this.horiz, this.disableHoriz);
-    },
-    setScrollTop: function(pos) {
-      if (this.vert.scrollTop != pos) this.vert.scrollTop = pos;
-      if (this.disableVert) this.enableZeroWidthBar(this.vert, this.disableVert);
-    },
-    zeroWidthHack: function() {
-      var w = mac && !mac_geMountainLion ? "12px" : "18px";
-      this.horiz.style.height = this.vert.style.width = w;
-      this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none";
-      this.disableHoriz = new Delayed;
-      this.disableVert = new Delayed;
-    },
-    enableZeroWidthBar: function(bar, delay) {
-      bar.style.pointerEvents = "auto";
-      function maybeDisable() {
-        // To find out whether the scrollbar is still visible, we
-        // check whether the element under the pixel in the bottom
-        // left corner of the scrollbar box is the scrollbar box
-        // itself (when the bar is still visible) or its filler child
-        // (when the bar is hidden). If it is still visible, we keep
-        // it enabled, if it's hidden, we disable pointer events.
-        var box = bar.getBoundingClientRect();
-        var elt = document.elementFromPoint(box.left + 1, box.bottom - 1);
-        if (elt != bar) bar.style.pointerEvents = "none";
-        else delay.set(1000, maybeDisable);
-      }
-      delay.set(1000, maybeDisable);
-    },
-    clear: function() {
-      var parent = this.horiz.parentNode;
-      parent.removeChild(this.horiz);
-      parent.removeChild(this.vert);
-    }
-  }, NativeScrollbars.prototype);
-
-  function NullScrollbars() {}
-
-  NullScrollbars.prototype = copyObj({
-    update: function() { return {bottom: 0, right: 0}; },
-    setScrollLeft: function() {},
-    setScrollTop: function() {},
-    clear: function() {}
-  }, NullScrollbars.prototype);
-
-  CodeMirror.scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars};
-
-  function initScrollbars(cm) {
-    if (cm.display.scrollbars) {
-      cm.display.scrollbars.clear();
-      if (cm.display.scrollbars.addClass)
-        rmClass(cm.display.wrapper, cm.display.scrollbars.addClass);
-    }
-
-    cm.display.scrollbars = new CodeMirror.scrollbarModel[cm.options.scrollbarStyle](function(node) {
-      cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);
-      // Prevent clicks in the scrollbars from killing focus
-      on(node, "mousedown", function() {
-        if (cm.state.focused) setTimeout(function() { cm.display.input.focus(); }, 0);
-      });
-      node.setAttribute("cm-not-content", "true");
-    }, function(pos, axis) {
-      if (axis == "horizontal") setScrollLeft(cm, pos);
-      else setScrollTop(cm, pos);
-    }, cm);
-    if (cm.display.scrollbars.addClass)
-      addClass(cm.display.wrapper, cm.display.scrollbars.addClass);
-  }
-
-  function updateScrollbars(cm, measure) {
-    if (!measure) measure = measureForScrollbars(cm);
-    var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;
-    updateScrollbarsInner(cm, measure);
-    for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {
-      if (startWidth != cm.display.barWidth && cm.options.lineWrapping)
-        updateHeightsInViewport(cm);
-      updateScrollbarsInner(cm, measureForScrollbars(cm));
-      startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;
-    }
-  }
-
-  // Re-synchronize the fake scrollbars with the actual size of the
-  // content.
-  function updateScrollbarsInner(cm, measure) {
-    var d = cm.display;
-    var sizes = d.scrollbars.update(measure);
-
-    d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px";
-    d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px";
-    d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"
-
-    if (sizes.right && sizes.bottom) {
-      d.scrollbarFiller.style.display = "block";
-      d.scrollbarFiller.style.height = sizes.bottom + "px";
-      d.scrollbarFiller.style.width = sizes.right + "px";
-    } else d.scrollbarFiller.style.display = "";
-    if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
-      d.gutterFiller.style.display = "block";
-      d.gutterFiller.style.height = sizes.bottom + "px";
-      d.gutterFiller.style.width = measure.gutterWidth + "px";
-    } else d.gutterFiller.style.display = "";
-  }
-
-  // Compute the lines that are visible in a given viewport (defaults
-  // the the current scroll position). viewport may contain top,
-  // height, and ensure (see op.scrollToPos) properties.
-  function visibleLines(display, doc, viewport) {
-    var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;
-    top = Math.floor(top - paddingTop(display));
-    var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;
-
-    var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);
-    // Ensure is a {from: {line, ch}, to: {line, ch}} object, and
-    // forces those lines into the viewport (if possible).
-    if (viewport && viewport.ensure) {
-      var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;
-      if (ensureFrom < from) {
-        from = ensureFrom;
-        to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);
-      } else if (Math.min(ensureTo, doc.lastLine()) >= to) {
-        from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);
-        to = ensureTo;
-      }
-    }
-    return {from: from, to: Math.max(to, from + 1)};
-  }
-
-  // LINE NUMBERS
-
-  // Re-align line numbers and gutter marks to compensate for
-  // horizontal scrolling.
-  function alignHorizontally(cm) {
-    var display = cm.display, view = display.view;
-    if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return;
-    var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;
-    var gutterW = display.gutters.offsetWidth, left = comp + "px";
-    for (var i = 0; i < view.length; i++) if (!view[i].hidden) {
-      if (cm.options.fixedGutter && view[i].gutter)
-        view[i].gutter.style.left = left;
-      var align = view[i].alignable;
-      if (align) for (var j = 0; j < align.length; j++)
-        align[j].style.left = left;
-    }
-    if (cm.options.fixedGutter)
-      display.gutters.style.left = (comp + gutterW) + "px";
-  }
-
-  // Used to ensure that the line number gutter is still the right
-  // size for the current document size. Returns true when an update
-  // is needed.
-  function maybeUpdateLineNumberWidth(cm) {
-    if (!cm.options.lineNumbers) return false;
-    var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;
-    if (last.length != display.lineNumChars) {
-      var test = display.measure.appendChild(elt("div", [elt("div", last)],
-                                                 "CodeMirror-linenumber CodeMirror-gutter-elt"));
-      var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;
-      display.lineGutter.style.width = "";
-      display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;
-      display.lineNumWidth = display.lineNumInnerWidth + padding;
-      display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;
-      display.lineGutter.style.width = display.lineNumWidth + "px";
-      updateGutterSpace(cm);
-      return true;
-    }
-    return false;
-  }
-
-  function lineNumberFor(options, i) {
-    return String(options.lineNumberFormatter(i + options.firstLineNumber));
-  }
-
-  // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,
-  // but using getBoundingClientRect to get a sub-pixel-accurate
-  // result.
-  function compensateForHScroll(display) {
-    return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left;
-  }
-
-  // DISPLAY DRAWING
-
-  function DisplayUpdate(cm, viewport, force) {
-    var display = cm.display;
-
-    this.viewport = viewport;
-    // Store some values that we'll need later (but don't want to force a relayout for)
-    this.visible = visibleLines(display, cm.doc, viewport);
-    this.editorIsHidden = !display.wrapper.offsetWidth;
-    this.wrapperHeight = display.wrapper.clientHeight;
-    this.wrapperWidth = display.wrapper.clientWidth;
-    this.oldDisplayWidth = displayWidth(cm);
-    this.force = force;
-    this.dims = getDimensions(cm);
-    this.events = [];
-  }
-
-  DisplayUpdate.prototype.signal = function(emitter, type) {
-    if (hasHandler(emitter, type))
-      this.events.push(arguments);
-  };
-  DisplayUpdate.prototype.finish = function() {
-    for (var i = 0; i < this.events.length; i++)
-      signal.apply(null, this.events[i]);
-  };
-
-  function maybeClipScrollbars(cm) {
-    var display = cm.display;
-    if (!display.scrollbarsClipped && display.scroller.offsetWidth) {
-      display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;
-      display.heightForcer.style.height = scrollGap(cm) + "px";
-      display.sizer.style.marginBottom = -display.nativeBarWidth + "px";
-      display.sizer.style.borderRightWidth = scrollGap(cm) + "px";
-      display.scrollbarsClipped = true;
-    }
-  }
-
-  // Does the actual updating of the line display. Bails out
-  // (returning false) when there is nothing to be done and forced is
-  // false.
-  function updateDisplayIfNeeded(cm, update) {
-    var display = cm.display, doc = cm.doc;
-
-    if (update.editorIsHidden) {
-      resetView(cm);
-      return false;
-    }
-
-    // Bail out if the visible area is already rendered and nothing changed.
-    if (!update.force &&
-        update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&
-        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&
-        display.renderedView == display.view && countDirtyView(cm) == 0)
-      return false;
-
-    if (maybeUpdateLineNumberWidth(cm)) {
-      resetView(cm);
-      update.dims = getDimensions(cm);
-    }
-
-    // Compute a suitable new viewport (from & to)
-    var end = doc.first + doc.size;
-    var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);
-    var to = Math.min(end, update.visible.to + cm.options.viewportMargin);
-    if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom);
-    if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo);
-    if (sawCollapsedSpans) {
-      from = visualLineNo(cm.doc, from);
-      to = visualLineEndNo(cm.doc, to);
-    }
-
-    var different = from != display.viewFrom || to != display.viewTo ||
-      display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;
-    adjustView(cm, from, to);
-
-    display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));
-    // Position the mover div to align with the current scroll position
-    cm.display.mover.style.top = display.viewOffset + "px";
-
-    var toUpdate = countDirtyView(cm);
-    if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&
-        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))
-      return false;
-
-    // For big changes, we hide the enclosing element during the
-    // update, since that speeds up the operations on most browsers.
-    var focused = activeElt();
-    if (toUpdate > 4) display.lineDiv.style.display = "none";
-    patchDisplay(cm, display.updateLineNumbers, update.dims);
-    if (toUpdate > 4) display.lineDiv.style.display = "";
-    display.renderedView = display.view;
-    // There might have been a widget with a focused element that got
-    // hidden or updated, if so re-focus it.
-    if (focused && activeElt() != focused && focused.offsetHeight) focused.focus();
-
-    // Prevent selection and cursors from interfering with the scroll
-    // width and height.
-    removeChildren(display.cursorDiv);
-    removeChildren(display.selectionDiv);
-    display.gutters.style.height = display.sizer.style.minHeight = 0;
-
-    if (different) {
-      display.lastWrapHeight = update.wrapperHeight;
-      display.lastWrapWidth = update.wrapperWidth;
-      startWorker(cm, 400);
-    }
-
-    display.updateLineNumbers = null;
-
-    return true;
-  }
-
-  function postUpdateDisplay(cm, update) {
-    var viewport = update.viewport;
-
-    for (var first = true;; first = false) {
-      if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {
-        // Clip forced viewport to actual scrollable area.
-        if (viewport && viewport.top != null)
-          viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)};
-        // Updated line heights might result in the drawn area not
-        // actually covering the viewport. Keep looping until it does.
-        update.visible = visibleLines(cm.display, cm.doc, viewport);
-        if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)
-          break;
-      }
-      if (!updateDisplayIfNeeded(cm, update)) break;
-      updateHeightsInViewport(cm);
-      var barMeasure = measureForScrollbars(cm);
-      updateSelection(cm);
-      updateScrollbars(cm, barMeasure);
-      setDocumentHeight(cm, barMeasure);
-    }
-
-    update.signal(cm, "update", cm);
-    if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {
-      update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo);
-      cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;
-    }
-  }
-
-  function updateDisplaySimple(cm, viewport) {
-    var update = new DisplayUpdate(cm, viewport);
-    if (updateDisplayIfNeeded(cm, update)) {
-      updateHeightsInViewport(cm);
-      postUpdateDisplay(cm, update);
-      var barMeasure = measureForScrollbars(cm);
-      updateSelection(cm);
-      updateScrollbars(cm, barMeasure);
-      setDocumentHeight(cm, barMeasure);
-      update.finish();
-    }
-  }
-
-  function setDocumentHeight(cm, measure) {
-    cm.display.sizer.style.minHeight = measure.docHeight + "px";
-    cm.display.heightForcer.style.top = measure.docHeight + "px";
-    cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px";
-  }
-
-  // Read the actual heights of the rendered lines, and update their
-  // stored heights to match.
-  function updateHeightsInViewport(cm) {
-    var display = cm.display;
-    var prevBottom = display.lineDiv.offsetTop;
-    for (var i = 0; i < display.view.length; i++) {
-      var cur = display.view[i], height;
-      if (cur.hidden) continue;
-      if (ie && ie_version < 8) {
-        var bot = cur.node.offsetTop + cur.node.offsetHeight;
-        height = bot - prevBottom;
-        prevBottom = bot;
-      } else {
-        var box = cur.node.getBoundingClientRect();
-        height = box.bottom - box.top;
-      }
-      var diff = cur.line.height - height;
-      if (height < 2) height = textHeight(display);
-      if (diff > .001 || diff < -.001) {
-        updateLineHeight(cur.line, height);
-        updateWidgetHeight(cur.line);
-        if (cur.rest) for (var j = 0; j < cur.rest.length; j++)
-          updateWidgetHeight(cur.rest[j]);
-      }
-    }
-  }
-
-  // Read and store the height of line widgets associated with the
-  // given line.
-  function updateWidgetHeight(line) {
-    if (line.widgets) for (var i = 0; i < line.widgets.length; ++i)
-      line.widgets[i].height = line.widgets[i].node.parentNode.offsetHeight;
-  }
-
-  // Do a bulk-read of the DOM positions and sizes needed to draw the
-  // view, so that we don't interleave reading and writing to the DOM.
-  function getDimensions(cm) {
-    var d = cm.display, left = {}, width = {};
-    var gutterLeft = d.gutters.clientLeft;
-    for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {
-      left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft;
-      width[cm.options.gutters[i]] = n.clientWidth;
-    }
-    return {fixedPos: compensateForHScroll(d),
-            gutterTotalWidth: d.gutters.offsetWidth,
-            gutterLeft: left,
-            gutterWidth: width,
-            wrapperWidth: d.wrapper.clientWidth};
-  }
-
-  // Sync the actual display DOM structure with display.view, removing
-  // nodes for lines that are no longer in view, and creating the ones
-  // that are not there yet, and updating the ones that are out of
-  // date.
-  function patchDisplay(cm, updateNumbersFrom, dims) {
-    var display = cm.display, lineNumbers = cm.options.lineNumbers;
-    var container = display.lineDiv, cur = container.firstChild;
-
-    function rm(node) {
-      var next = node.nextSibling;
-      // Works around a throw-scroll bug in OS X Webkit
-      if (webkit && mac && cm.display.currentWheelTarget == node)
-        node.style.display = "none";
-      else
-        node.parentNode.removeChild(node);
-      return next;
-    }
-
-    var view = display.view, lineN = display.viewFrom;
-    // Loop over the elements in the view, syncing cur (the DOM nodes
-    // in display.lineDiv) with the view as we go.
-    for (var i = 0; i < view.length; i++) {
-      var lineView = view[i];
-      if (lineView.hidden) {
-      } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet
-        var node = buildLineElement(cm, lineView, lineN, dims);
-        container.insertBefore(node, cur);
-      } else { // Already drawn
-        while (cur != lineView.node) cur = rm(cur);
-        var updateNumber = lineNumbers && updateNumbersFrom != null &&
-          updateNumbersFrom <= lineN && lineView.lineNumber;
-        if (lineView.changes) {
-          if (indexOf(lineView.changes, "gutter") > -1) updateNumber = false;
-          updateLineForChanges(cm, lineView, lineN, dims);
-        }
-        if (updateNumber) {
-          removeChildren(lineView.lineNumber);
-          lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));
-        }
-        cur = lineView.node.nextSibling;
-      }
-      lineN += lineView.size;
-    }
-    while (cur) cur = rm(cur);
-  }
-
-  // When an aspect of a line changes, a string is added to
-  // lineView.changes. This updates the relevant part of the line's
-  // DOM structure.
-  function updateLineForChanges(cm, lineView, lineN, dims) {
-    for (var j = 0; j < lineView.changes.length; j++) {
-      var type = lineView.changes[j];
-      if (type == "text") updateLineText(cm, lineView);
-      else if (type == "gutter") updateLineGutter(cm, lineView, lineN, dims);
-      else if (type == "class") updateLineClasses(lineView);
-      else if (type == "widget") updateLineWidgets(cm, lineView, dims);
-    }
-    lineView.changes = null;
-  }
-
-  // Lines with gutter elements, widgets or a background class need to
-  // be wrapped, and have the extra elements added to the wrapper div
-  function ensureLineWrapped(lineView) {
-    if (lineView.node == lineView.text) {
-      lineView.node = elt("div", null, null, "position: relative");
-      if (lineView.text.parentNode)
-        lineView.text.parentNode.replaceChild(lineView.node, lineView.text);
-      lineView.node.appendChild(lineView.text);
-      if (ie && ie_version < 8) lineView.node.style.zIndex = 2;
-    }
-    return lineView.node;
-  }
-
-  function updateLineBackground(lineView) {
-    var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass;
-    if (cls) cls += " CodeMirror-linebackground";
-    if (lineView.background) {
-      if (cls) lineView.background.className = cls;
-      else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }
-    } else if (cls) {
-      var wrap = ensureLineWrapped(lineView);
-      lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild);
-    }
-  }
-
-  // Wrapper around buildLineContent which will reuse the structure
-  // in display.externalMeasured when possible.
-  function getLineContent(cm, lineView) {
-    var ext = cm.display.externalMeasured;
-    if (ext && ext.line == lineView.line) {
-      cm.display.externalMeasured = null;
-      lineView.measure = ext.measure;
-      return ext.built;
-    }
-    return buildLineContent(cm, lineView);
-  }
-
-  // Redraw the line's text. Interacts with the background and text
-  // classes because the mode may output tokens that influence these
-  // classes.
-  function updateLineText(cm, lineView) {
-    var cls = lineView.text.className;
-    var built = getLineContent(cm, lineView);
-    if (lineView.text == lineView.node) lineView.node = built.pre;
-    lineView.text.parentNode.replaceChild(built.pre, lineView.text);
-    lineView.text = built.pre;
-    if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {
-      lineView.bgClass = built.bgClass;
-      lineView.textClass = built.textClass;
-      updateLineClasses(lineView);
-    } else if (cls) {
-      lineView.text.className = cls;
-    }
-  }
-
-  function updateLineClasses(lineView) {
-    updateLineBackground(lineView);
-    if (lineView.line.wrapClass)
-      ensureLineWrapped(lineView).className = lineView.line.wrapClass;
-    else if (lineView.node != lineView.text)
-      lineView.node.className = "";
-    var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass;
-    lineView.text.className = textClass || "";
-  }
-
-  function updateLineGutter(cm, lineView, lineN, dims) {
-    if (lineView.gutter) {
-      lineView.node.removeChild(lineView.gutter);
-      lineView.gutter = null;
-    }
-    if (lineView.gutterBackground) {
-      lineView.node.removeChild(lineView.gutterBackground);
-      lineView.gutterBackground = null;
-    }
-    if (lineView.line.gutterClass) {
-      var wrap = ensureLineWrapped(lineView);
-      lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass,
-                                      "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) +
-                                      "px; width: " + dims.gutterTotalWidth + "px");
-      wrap.insertBefore(lineView.gutterBackground, lineView.text);
-    }
-    var markers = lineView.line.gutterMarkers;
-    if (cm.options.lineNumbers || markers) {
-      var wrap = ensureLineWrapped(lineView);
-      var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", "left: " +
-                                             (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px");
-      cm.display.input.setUneditable(gutterWrap);
-      wrap.insertBefore(gutterWrap, lineView.text);
-      if (lineView.line.gutterClass)
-        gutterWrap.className += " " + lineView.line.gutterClass;
-      if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
-        lineView.lineNumber = gutterWrap.appendChild(
-          elt("div", lineNumberFor(cm.options, lineN),
-              "CodeMirror-linenumber CodeMirror-gutter-elt",
-              "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: "
-              + cm.display.lineNumInnerWidth + "px"));
-      if (markers) for (var k = 0; k < cm.options.gutters.length; ++k) {
-        var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];
-        if (found)
-          gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " +
-                                     dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px"));
-      }
-    }
-  }
-
-  function updateLineWidgets(cm, lineView, dims) {
-    if (lineView.alignable) lineView.alignable = null;
-    for (var node = lineView.node.firstChild, next; node; node = next) {
-      var next = node.nextSibling;
-      if (node.className == "CodeMirror-linewidget")
-        lineView.node.removeChild(node);
-    }
-    insertLineWidgets(cm, lineView, dims);
-  }
-
-  // Build a line's DOM representation from scratch
-  function buildLineElement(cm, lineView, lineN, dims) {
-    var built = getLineContent(cm, lineView);
-    lineView.text = lineView.node = built.pre;
-    if (built.bgClass) lineView.bgClass = built.bgClass;
-    if (built.textClass) lineView.textClass = built.textClass;
-
-    updateLineClasses(lineView);
-    updateLineGutter(cm, lineView, lineN, dims);
-    insertLineWidgets(cm, lineView, dims);
-    return lineView.node;
-  }
-
-  // A lineView may contain multiple logical lines (when merged by
-  // collapsed spans). The widgets for all of them need to be drawn.
-  function insertLineWidgets(cm, lineView, dims) {
-    insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);
-    if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++)
-      insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false);
-  }
-
-  function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {
-    if (!line.widgets) return;
-    var wrap = ensureLineWrapped(lineView);
-    for (var i = 0, ws = line.widgets; i < ws.length; ++i) {
-      var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget");
-      if (!widget.handleMouseEvents) node.setAttribute("cm-ignore-events", "true");
-      positionLineWidget(widget, node, lineView, dims);
-      cm.display.input.setUneditable(node);
-      if (allowAbove && widget.above)
-        wrap.insertBefore(node, lineView.gutter || lineView.text);
-      else
-        wrap.appendChild(node);
-      signalLater(widget, "redraw");
-    }
-  }
-
-  function positionLineWidget(widget, node, lineView, dims) {
-    if (widget.noHScroll) {
-      (lineView.alignable || (lineView.alignable = [])).push(node);
-      var width = dims.wrapperWidth;
-      node.style.left = dims.fixedPos + "px";
-      if (!widget.coverGutter) {
-        width -= dims.gutterTotalWidth;
-        node.style.paddingLeft = dims.gutterTotalWidth + "px";
-      }
-      node.style.width = width + "px";
-    }
-    if (widget.coverGutter) {
-      node.style.zIndex = 5;
-      node.style.position = "relative";
-      if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px";
-    }
-  }
-
-  // POSITION OBJECT
-
-  // A Pos instance represents a position within the text.
-  var Pos = CodeMirror.Pos = function(line, ch) {
-    if (!(this instanceof Pos)) return new Pos(line, ch);
-    this.line = line; this.ch = ch;
-  };
-
-  // Compare two positions, return 0 if they are the same, a negative
-  // number when a is less, and a positive number otherwise.
-  var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; };
-
-  function copyPos(x) {return Pos(x.line, x.ch);}
-  function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; }
-  function minPos(a, b) { return cmp(a, b) < 0 ? a : b; }
-
-  // INPUT HANDLING
-
-  function ensureFocus(cm) {
-    if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); }
-  }
-
-  // This will be set to a {lineWise: bool, text: [string]} object, so
-  // that, when pasting, we know what kind of selections the copied
-  // text was made out of.
-  var lastCopied = null;
-
-  function applyTextInput(cm, inserted, deleted, sel, origin) {
-    var doc = cm.doc;
-    cm.display.shift = false;
-    if (!sel) sel = doc.sel;
-
-    var paste = cm.state.pasteIncoming || origin == "paste";
-    var textLines = doc.splitLines(inserted), multiPaste = null
-    // When pasing N lines into N selections, insert one line per selection
-    if (paste && sel.ranges.length > 1) {
-      if (lastCopied && lastCopied.text.join("\n") == inserted) {
-        if (sel.ranges.length % lastCopied.text.length == 0) {
-          multiPaste = [];
-          for (var i = 0; i < lastCopied.text.length; i++)
-            multiPaste.push(doc.splitLines(lastCopied.text[i]));
-        }
-      } else if (textLines.length == sel.ranges.length) {
-        multiPaste = map(textLines, function(l) { return [l]; });
-      }
-    }
-
-    // Normal behavior is to insert the new text into every selection
-    for (var i = sel.ranges.length - 1; i >= 0; i--) {
-      var range = sel.ranges[i];
-      var from = range.from(), to = range.to();
-      if (range.empty()) {
-        if (deleted && deleted > 0) // Handle deletion
-          from = Pos(from.line, from.ch - deleted);
-        else if (cm.state.overwrite && !paste) // Handle overwrite
-          to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length));
-        else if (lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted)
-          from = to = Pos(from.line, 0)
-      }
-      var updateInput = cm.curOp.updateInput;
-      var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i % multiPaste.length] : textLines,
-                         origin: origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input")};
-      makeChange(cm.doc, changeEvent);
-      signalLater(cm, "inputRead", cm, changeEvent);
-    }
-    if (inserted && !paste)
-      triggerElectric(cm, inserted);
-
-    ensureCursorVisible(cm);
-    cm.curOp.updateInput = updateInput;
-    cm.curOp.typing = true;
-    cm.state.pasteIncoming = cm.state.cutIncoming = false;
-  }
-
-  function handlePaste(e, cm) {
-    var pasted = e.clipboardData && e.clipboardData.getData("text/plain");
-    if (pasted) {
-      e.preventDefault();
-      if (!cm.isReadOnly() && !cm.options.disableInput)
-        runInOp(cm, function() { applyTextInput(cm, pasted, 0, null, "paste"); });
-      return true;
-    }
-  }
-
-  function triggerElectric(cm, inserted) {
-    // When an 'electric' character is inserted, immediately trigger a reindent
-    if (!cm.options.electricChars || !cm.options.smartIndent) return;
-    var sel = cm.doc.sel;
-
-    for (var i = sel.ranges.length - 1; i >= 0; i--) {
-      var range = sel.ranges[i];
-      if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) continue;
-      var mode = cm.getModeAt(range.head);
-      var indented = false;
-      if (mode.electricChars) {
-        for (var j = 0; j < mode.electricChars.length; j++)
-          if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {
-            indented = indentLine(cm, range.head.line, "smart");
-            break;
-          }
-      } else if (mode.electricInput) {
-        if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))
-          indented = indentLine(cm, range.head.line, "smart");
-      }
-      if (indented) signalLater(cm, "electricInput", cm, range.head.line);
-    }
-  }
-
-  function copyableRanges(cm) {
-    var text = [], ranges = [];
-    for (var i = 0; i < cm.doc.sel.ranges.length; i++) {
-      var line = cm.doc.sel.ranges[i].head.line;
-      var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};
-      ranges.push(lineRange);
-      text.push(cm.getRange(lineRange.anchor, lineRange.head));
-    }
-    return {text: text, ranges: ranges};
-  }
-
-  function disableBrowserMagic(field) {
-    field.setAttribute("autocorrect", "off");
-    field.setAttribute("autocapitalize", "off");
-    field.setAttribute("spellcheck", "false");
-  }
-
-  // TEXTAREA INPUT STYLE
-
-  function TextareaInput(cm) {
-    this.cm = cm;
-    // See input.poll and input.reset
-    this.prevInput = "";
-
-    // Flag that indicates whether we expect input to appear real soon
-    // now (after some event like 'keypress' or 'input') and are
-    // polling intensively.
-    this.pollingFast = false;
-    // Self-resetting timeout for the poller
-    this.polling = new Delayed();
-    // Tracks when input.reset has punted to just putting a short
-    // string into the textarea instead of the full selection.
-    this.inaccurateSelection = false;
-    // Used to work around IE issue with selection being forgotten when focus moves away from textarea
-    this.hasSelection = false;
-    this.composing = null;
-  };
-
-  function hiddenTextarea() {
-    var te = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none");
-    var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;");
-    // The textarea is kept positioned near the cursor to prevent the
-    // fact that it'll be scrolled into view on input from scrolling
-    // our fake cursor out of view. On webkit, when wrap=off, paste is
-    // very slow. So make the area wide instead.
-    if (webkit) te.style.width = "1000px";
-    else te.setAttribute("wrap", "off");
-    // If border: 0; -- iOS fails to open keyboard (issue #1287)
-    if (ios) te.style.border = "1px solid black";
-    disableBrowserMagic(te);
-    return div;
-  }
-
-  TextareaInput.prototype = copyObj({
-    init: function(display) {
-      var input = this, cm = this.cm;
-
-      // Wraps and hides input textarea
-      var div = this.wrapper = hiddenTextarea();
-      // The semihidden textarea that is focused when the editor is
-      // focused, and receives input.
-      var te = this.textarea = div.firstChild;
-      display.wrapper.insertBefore(div, display.wrapper.firstChild);
-
-      // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)
-      if (ios) te.style.width = "0px";
-
-      on(te, "input", function() {
-        if (ie && ie_version >= 9 && input.hasSelection) input.hasSelection = null;
-        input.poll();
-      });
-
-      on(te, "paste", function(e) {
-        if (signalDOMEvent(cm, e) || handlePaste(e, cm)) return
-
-        cm.state.pasteIncoming = true;
-        input.fastPoll();
-      });
-
-      function prepareCopyCut(e) {
-        if (signalDOMEvent(cm, e)) return
-        if (cm.somethingSelected()) {
-          lastCopied = {lineWise: false, text: cm.getSelections()};
-          if (input.inaccurateSelection) {
-            input.prevInput = "";
-            input.inaccurateSelection = false;
-            te.value = lastCopied.text.join("\n");
-            selectInput(te);
-          }
-        } else if (!cm.options.lineWiseCopyCut) {
-          return;
-        } else {
-          var ranges = copyableRanges(cm);
-          lastCopied = {lineWise: true, text: ranges.text};
-          if (e.type == "cut") {
-            cm.setSelections(ranges.ranges, null, sel_dontScroll);
-          } else {
-            input.prevInput = "";
-            te.value = ranges.text.join("\n");
-            selectInput(te);
-          }
-        }
-        if (e.type == "cut") cm.state.cutIncoming = true;
-      }
-      on(te, "cut", prepareCopyCut);
-      on(te, "copy", prepareCopyCut);
-
-      on(display.scroller, "paste", function(e) {
-        if (eventInWidget(display, e) || signalDOMEvent(cm, e)) return;
-        cm.state.pasteIncoming = true;
-        input.focus();
-      });
-
-      // Prevent normal selection in the editor (we handle our own)
-      on(display.lineSpace, "selectstart", function(e) {
-        if (!eventInWidget(display, e)) e_preventDefault(e);
-      });
-
-      on(te, "compositionstart", function() {
-        var start = cm.getCursor("from");
-        if (input.composing) input.composing.range.clear()
-        input.composing = {
-          start: start,
-          range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"})
-        };
-      });
-      on(te, "compositionend", function() {
-        if (input.composing) {
-          input.poll();
-          input.composing.range.clear();
-          input.composing = null;
-        }
-      });
-    },
-
-    prepareSelection: function() {
-      // Redraw the selection and/or cursor
-      var cm = this.cm, display = cm.display, doc = cm.doc;
-      var result = prepareSelection(cm);
-
-      // Move the hidden textarea near the cursor to prevent scrolling artifacts
-      if (cm.options.moveInputWithCursor) {
-        var headPos = cursorCoords(cm, doc.sel.primary().head, "div");
-        var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();
-        result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,
-                                            headPos.top + lineOff.top - wrapOff.top));
-        result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,
-                                             headPos.left + lineOff.left - wrapOff.left));
-      }
-
-      return result;
-    },
-
-    showSelection: function(drawn) {
-      var cm = this.cm, display = cm.display;
-      removeChildrenAndAdd(display.cursorDiv, drawn.cursors);
-      removeChildrenAndAdd(display.selectionDiv, drawn.selection);
-      if (drawn.teTop != null) {
-        this.wrapper.style.top = drawn.teTop + "px";
-        this.wrapper.style.left = drawn.teLeft + "px";
-      }
-    },
-
-    // Reset the input to correspond to the selection (or to be empty,
-    // when not typing and nothing is selected)
-    reset: function(typing) {
-      if (this.contextMenuPending) return;
-      var minimal, selected, cm = this.cm, doc = cm.doc;
-      if (cm.somethingSelected()) {
-        this.prevInput = "";
-        var range = doc.sel.primary();
-        minimal = hasCopyEvent &&
-          (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000);
-        var content = minimal ? "-" : selected || cm.getSelection();
-        this.textarea.value = content;
-        if (cm.state.focused) selectInput(this.textarea);
-        if (ie && ie_version >= 9) this.hasSelection = content;
-      } else if (!typing) {
-        this.prevInput = this.textarea.value = "";
-        if (ie && ie_version >= 9) this.hasSelection = null;
-      }
-      this.inaccurateSelection = minimal;
-    },
-
-    getField: function() { return this.textarea; },
-
-    supportsTouch: function() { return false; },
-
-    focus: function() {
-      if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) {
-        try { this.textarea.focus(); }
-        catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM
-      }
-    },
-
-    blur: function() { this.textarea.blur(); },
-
-    resetPosition: function() {
-      this.wrapper.style.top = this.wrapper.style.left = 0;
-    },
-
-    receivedFocus: function() { this.slowPoll(); },
-
-    // Poll for input changes, using the normal rate of polling. This
-    // runs as long as the editor is focused.
-    slowPoll: function() {
-      var input = this;
-      if (input.pollingFast) return;
-      input.polling.set(this.cm.options.pollInterval, function() {
-        input.poll();
-        if (input.cm.state.focused) input.slowPoll();
-      });
-    },
-
-    // When an event has just come in that is likely to add or change
-    // something in the input textarea, we poll faster, to ensure that
-    // the change appears on the screen quickly.
-    fastPoll: function() {
-      var missed = false, input = this;
-      input.pollingFast = true;
-      function p() {
-        var changed = input.poll();
-        if (!changed && !missed) {missed = true; input.polling.set(60, p);}
-        else {input.pollingFast = false; input.slowPoll();}
-      }
-      input.polling.set(20, p);
-    },
-
-    // Read input from the textarea, and update the document to match.
-    // When something is selected, it is present in the textarea, and
-    // selected (unless it is huge, in which case a placeholder is
-    // used). When nothing is selected, the cursor sits after previously
-    // seen text (can be empty), which is stored in prevInput (we must
-    // not reset the textarea when typing, because that breaks IME).
-    poll: function() {
-      var cm = this.cm, input = this.textarea, prevInput = this.prevInput;
-      // Since this is called a *lot*, try to bail out as cheaply as
-      // possible when it is clear that nothing happened. hasSelection
-      // will be the case when there is a lot of text in the textarea,
-      // in which case reading its value would be expensive.
-      if (this.contextMenuPending || !cm.state.focused ||
-          (hasSelection(input) && !prevInput && !this.composing) ||
-          cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)
-        return false;
-
-      var text = input.value;
-      // If nothing changed, bail.
-      if (text == prevInput && !cm.somethingSelected()) return false;
-      // Work around nonsensical selection resetting in IE9/10, and
-      // inexplicable appearance of private area unicode characters on
-      // some key combos in Mac (#2689).
-      if (ie && ie_version >= 9 && this.hasSelection === text ||
-          mac && /[\uf700-\uf7ff]/.test(text)) {
-        cm.display.input.reset();
-        return false;
-      }
-
-      if (cm.doc.sel == cm.display.selForContextMenu) {
-        var first = text.charCodeAt(0);
-        if (first == 0x200b && !prevInput) prevInput = "\u200b";
-        if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo"); }
-      }
-      // Find the part of the input that is actually new
-      var same = 0, l = Math.min(prevInput.length, text.length);
-      while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same;
-
-      var self = this;
-      runInOp(cm, function() {
-        applyTextInput(cm, text.slice(same), prevInput.length - same,
-                       null, self.composing ? "*compose" : null);
-
-        // Don't leave long text in the textarea, since it makes further polling slow
-        if (text.length > 1000 || text.indexOf("\n") > -1) input.value = self.prevInput = "";
-        else self.prevInput = text;
-
-        if (self.composing) {
-          self.composing.range.clear();
-          self.composing.range = cm.markText(self.composing.start, cm.getCursor("to"),
-                                             {className: "CodeMirror-composing"});
-        }
-      });
-      return true;
-    },
-
-    ensurePolled: function() {
-      if (this.pollingFast && this.poll()) this.pollingFast = false;
-    },
-
-    onKeyPress: function() {
-      if (ie && ie_version >= 9) this.hasSelection = null;
-      this.fastPoll();
-    },
-
-    onContextMenu: function(e) {
-      var input = this, cm = input.cm, display = cm.display, te = input.textarea;
-      var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;
-      if (!pos || presto) return; // Opera is difficult.
-
-      // Reset the current text selection only if the click is done outside of the selection
-      // and 'resetSelectionOnContextMenu' option is true.
-      var reset = cm.options.resetSelectionOnContextMenu;
-      if (reset && cm.doc.sel.contains(pos) == -1)
-        operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll);
-
-      var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;
-      input.wrapper.style.cssText = "position: absolute"
-      var wrapperBox = input.wrapper.getBoundingClientRect()
-      te.style.cssText = "position: absolute; width: 30px; height: 30px; top: " + (e.clientY - wrapperBox.top - 5) +
-        "px; left: " + (e.clientX - wrapperBox.left - 5) + "px; z-index: 1000; background: " +
-        (ie ? "rgba(255, 255, 255, .05)" : "transparent") +
-        "; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";
-      if (webkit) var oldScrollY = window.scrollY; // Work around Chrome issue (#2712)
-      display.input.focus();
-      if (webkit) window.scrollTo(null, oldScrollY);
-      display.input.reset();
-      // Adds "Select all" to context menu in FF
-      if (!cm.somethingSelected()) te.value = input.prevInput = " ";
-      input.contextMenuPending = true;
-      display.selForContextMenu = cm.doc.sel;
-      clearTimeout(display.detectingSelectAll);
-
-      // Select-all will be greyed out if there's nothing to select, so
-      // this adds a zero-width space so that we can later check whether
-      // it got selected.
-      function prepareSelectAllHack() {
-        if (te.selectionStart != null) {
-          var selected = cm.somethingSelected();
-          var extval = "\u200b" + (selected ? te.value : "");
-          te.value = "\u21da"; // Used to catch context-menu undo
-          te.value = extval;
-          input.prevInput = selected ? "" : "\u200b";
-          te.selectionStart = 1; te.selectionEnd = extval.length;
-          // Re-set this, in case some other handler touched the
-          // selection in the meantime.
-          display.selForContextMenu = cm.doc.sel;
-        }
-      }
-      function rehide() {
-        input.contextMenuPending = false;
-        input.wrapper.style.cssText = oldWrapperCSS
-        te.style.cssText = oldCSS;
-        if (ie && ie_version < 9) display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos);
-
-        // Try to detect the user choosing select-all
-        if (te.selectionStart != null) {
-          if (!ie || (ie && ie_version < 9)) prepareSelectAllHack();
-          var i = 0, poll = function() {
-            if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&
-                te.selectionEnd > 0 && input.prevInput == "\u200b")
-              operation(cm, commands.selectAll)(cm);
-            else if (i++ < 10) display.detectingSelectAll = setTimeout(poll, 500);
-            else display.input.reset();
-          };
-          display.detectingSelectAll = setTimeout(poll, 200);
-        }
-      }
-
-      if (ie && ie_version >= 9) prepareSelectAllHack();
-      if (captureRightClick) {
-        e_stop(e);
-        var mouseup = function() {
-          off(window, "mouseup", mouseup);
-          setTimeout(rehide, 20);
-        };
-        on(window, "mouseup", mouseup);
-      } else {
-        setTimeout(rehide, 50);
-      }
-    },
-
-    readOnlyChanged: function(val) {
-      if (!val) this.reset();
-    },
-
-    setUneditable: nothing,
-
-    needsContentAttribute: false
-  }, TextareaInput.prototype);
-
-  // CONTENTEDITABLE INPUT STYLE
-
-  function ContentEditableInput(cm) {
-    this.cm = cm;
-    this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;
-    this.polling = new Delayed();
-    this.gracePeriod = false;
-  }
-
-  ContentEditableInput.prototype = copyObj({
-    init: function(display) {
-      var input = this, cm = input.cm;
-      var div = input.div = display.lineDiv;
-      disableBrowserMagic(div);
-
-      on(div, "paste", function(e) {
-        if (!signalDOMEvent(cm, e)) handlePaste(e, cm);
-      })
-
-      on(div, "compositionstart", function(e) {
-        var data = e.data;
-        input.composing = {sel: cm.doc.sel, data: data, startData: data};
-        if (!data) return;
-        var prim = cm.doc.sel.primary();
-        var line = cm.getLine(prim.head.line);
-        var found = line.indexOf(data, Math.max(0, prim.head.ch - data.length));
-        if (found > -1 && found <= prim.head.ch)
-          input.composing.sel = simpleSelection(Pos(prim.head.line, found),
-                                                Pos(prim.head.line, found + data.length));
-      });
-      on(div, "compositionupdate", function(e) {
-        input.composing.data = e.data;
-      });
-      on(div, "compositionend", function(e) {
-        var ours = input.composing;
-        if (!ours) return;
-        if (e.data != ours.startData && !/\u200b/.test(e.data))
-          ours.data = e.data;
-        // Need a small delay to prevent other code (input event,
-        // selection polling) from doing damage when fired right after
-        // compositionend.
-        setTimeout(function() {
-          if (!ours.handled)
-            input.applyComposition(ours);
-          if (input.composing == ours)
-            input.composing = null;
-        }, 50);
-      });
-
-      on(div, "touchstart", function() {
-        input.forceCompositionEnd();
-      });
-
-      on(div, "input", function() {
-        if (input.composing) return;
-        if (cm.isReadOnly() || !input.pollContent())
-          runInOp(input.cm, function() {regChange(cm);});
-      });
-
-      function onCopyCut(e) {
-        if (signalDOMEvent(cm, e)) return
-        if (cm.somethingSelected()) {
-          lastCopied = {lineWise: false, text: cm.getSelections()};
-          if (e.type == "cut") cm.replaceSelection("", null, "cut");
-        } else if (!cm.options.lineWiseCopyCut) {
-          return;
-        } else {
-          var ranges = copyableRanges(cm);
-          lastCopied = {lineWise: true, text: ranges.text};
-          if (e.type == "cut") {
-            cm.operation(function() {
-              cm.setSelections(ranges.ranges, 0, sel_dontScroll);
-              cm.replaceSelection("", null, "cut");
-            });
-          }
-        }
-        // iOS exposes the clipboard API, but seems to discard content inserted into it
-        if (e.clipboardData && !ios) {
-          e.preventDefault();
-          e.clipboardData.clearData();
-          e.clipboardData.setData("text/plain", lastCopied.text.join("\n"));
-        } else {
-          // Old-fashioned briefly-focus-a-textarea hack
-          var kludge = hiddenTextarea(), te = kludge.firstChild;
-          cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);
-          te.value = lastCopied.text.join("\n");
-          var hadFocus = document.activeElement;
-          selectInput(te);
-          setTimeout(function() {
-            cm.display.lineSpace.removeChild(kludge);
-            hadFocus.focus();
-          }, 50);
-        }
-      }
-      on(div, "copy", onCopyCut);
-      on(div, "cut", onCopyCut);
-    },
-
-    prepareSelection: function() {
-      var result = prepareSelection(this.cm, false);
-      result.focus = this.cm.state.focused;
-      return result;
-    },
-
-    showSelection: function(info, takeFocus) {
-      if (!info || !this.cm.display.view.length) return;
-      if (info.focus || takeFocus) this.showPrimarySelection();
-      this.showMultipleSelections(info);
-    },
-
-    showPrimarySelection: function() {
-      var sel = window.getSelection(), prim = this.cm.doc.sel.primary();
-      var curAnchor = domToPos(this.cm, sel.anchorNode, sel.anchorOffset);
-      var curFocus = domToPos(this.cm, sel.focusNode, sel.focusOffset);
-      if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&
-          cmp(minPos(curAnchor, curFocus), prim.from()) == 0 &&
-          cmp(maxPos(curAnchor, curFocus), prim.to()) == 0)
-        return;
-
-      var start = posToDOM(this.cm, prim.from());
-      var end = posToDOM(this.cm, prim.to());
-      if (!start && !end) return;
-
-      var view = this.cm.display.view;
-      var old = sel.rangeCount && sel.getRangeAt(0);
-      if (!start) {
-        start = {node: view[0].measure.map[2], offset: 0};
-      } else if (!end) { // FIXME dangerously hacky
-        var measure = view[view.length - 1].measure;
-        var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;
-        end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};
-      }
-
-      try { var rng = range(start.node, start.offset, end.offset, end.node); }
-      catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible
-      if (rng) {
-        if (!gecko && this.cm.state.focused) {
-          sel.collapse(start.node, start.offset);
-          if (!rng.collapsed) sel.addRange(rng);
-        } else {
-          sel.removeAllRanges();
-          sel.addRange(rng);
-        }
-        if (old && sel.anchorNode == null) sel.addRange(old);
-        else if (gecko) this.startGracePeriod();
-      }
-      this.rememberSelection();
-    },
-
-    startGracePeriod: function() {
-      var input = this;
-      clearTimeout(this.gracePeriod);
-      this.gracePeriod = setTimeout(function() {
-        input.gracePeriod = false;
-        if (input.selectionChanged())
-          input.cm.operation(function() { input.cm.curOp.selectionChanged = true; });
-      }, 20);
-    },
-
-    showMultipleSelections: function(info) {
-      removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);
-      removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);
-    },
-
-    rememberSelection: function() {
-      var sel = window.getSelection();
-      this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;
-      this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;
-    },
-
-    selectionInEditor: function() {
-      var sel = window.getSelection();
-      if (!sel.rangeCount) return false;
-      var node = sel.getRangeAt(0).commonAncestorContainer;
-      return contains(this.div, node);
-    },
-
-    focus: function() {
-      if (this.cm.options.readOnly != "nocursor") this.div.focus();
-    },
-    blur: function() { this.div.blur(); },
-    getField: function() { return this.div; },
-
-    supportsTouch: function() { return true; },
-
-    receivedFocus: function() {
-      var input = this;
-      if (this.selectionInEditor())
-        this.pollSelection();
-      else
-        runInOp(this.cm, function() { input.cm.curOp.selectionChanged = true; });
-
-      function poll() {
-        if (input.cm.state.focused) {
-          input.pollSelection();
-          input.polling.set(input.cm.options.pollInterval, poll);
-        }
-      }
-      this.polling.set(this.cm.options.pollInterval, poll);
-    },
-
-    selectionChanged: function() {
-      var sel = window.getSelection();
-      return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||
-        sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset;
-    },
-
-    pollSelection: function() {
-      if (!this.composing && !this.gracePeriod && this.selectionChanged()) {
-        var sel = window.getSelection(), cm = this.cm;
-        this.rememberSelection();
-        var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);
-        var head = domToPos(cm, sel.focusNode, sel.focusOffset);
-        if (anchor && head) runInOp(cm, function() {
-          setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);
-          if (anchor.bad || head.bad) cm.curOp.selectionChanged = true;
-        });
-      }
-    },
-
-    pollContent: function() {
-      var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();
-      var from = sel.from(), to = sel.to();
-      if (from.line < display.viewFrom || to.line > display.viewTo - 1) return false;
-
-      var fromIndex;
-      if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {
-        var fromLine = lineNo(display.view[0].line);
-        var fromNode = display.view[0].node;
-      } else {
-        var fromLine = lineNo(display.view[fromIndex].line);
-        var fromNode = display.view[fromIndex - 1].node.nextSibling;
-      }
-      var toIndex = findViewIndex(cm, to.line);
-      if (toIndex == display.view.length - 1) {
-        var toLine = display.viewTo - 1;
-        var toNode = display.lineDiv.lastChild;
-      } else {
-        var toLine = lineNo(display.view[toIndex + 1].line) - 1;
-        var toNode = display.view[toIndex + 1].node.previousSibling;
-      }
-
-      var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));
-      var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));
-      while (newText.length > 1 && oldText.length > 1) {
-        if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }
-        else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }
-        else break;
-      }
-
-      var cutFront = 0, cutEnd = 0;
-      var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);
-      while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))
-        ++cutFront;
-      var newBot = lst(newText), oldBot = lst(oldText);
-      var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),
-                               oldBot.length - (oldText.length == 1 ? cutFront : 0));
-      while (cutEnd < maxCutEnd &&
-             newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))
-        ++cutEnd;
-
-      newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd);
-      newText[0] = newText[0].slice(cutFront);
-
-      var chFrom = Pos(fromLine, cutFront);
-      var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);
-      if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {
-        replaceRange(cm.doc, newText, chFrom, chTo, "+input");
-        return true;
-      }
-    },
-
-    ensurePolled: function() {
-      this.forceCompositionEnd();
-    },
-    reset: function() {
-      this.forceCompositionEnd();
-    },
-    forceCompositionEnd: function() {
-      if (!this.composing || this.composing.handled) return;
-      this.applyComposition(this.composing);
-      this.composing.handled = true;
-      this.div.blur();
-      this.div.focus();
-    },
-    applyComposition: function(composing) {
-      if (this.cm.isReadOnly())
-        operation(this.cm, regChange)(this.cm)
-      else if (composing.data && composing.data != composing.startData)
-        operation(this.cm, applyTextInput)(this.cm, composing.data, 0, composing.sel);
-    },
-
-    setUneditable: function(node) {
-      node.contentEditable = "false"
-    },
-
-    onKeyPress: function(e) {
-      e.preventDefault();
-      if (!this.cm.isReadOnly())
-        operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0);
-    },
-
-    readOnlyChanged: function(val) {
-      this.div.contentEditable = String(val != "nocursor")
-    },
-
-    onContextMenu: nothing,
-    resetPosition: nothing,
-
-    needsContentAttribute: true
-  }, ContentEditableInput.prototype);
-
-  function posToDOM(cm, pos) {
-    var view = findViewForLine(cm, pos.line);
-    if (!view || view.hidden) return null;
-    var line = getLine(cm.doc, pos.line);
-    var info = mapFromLineView(view, line, pos.line);
-
-    var order = getOrder(line), side = "left";
-    if (order) {
-      var partPos = getBidiPartAt(order, pos.ch);
-      side = partPos % 2 ? "right" : "left";
-    }
-    var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);
-    result.offset = result.collapse == "right" ? result.end : result.start;
-    return result;
-  }
-
-  function badPos(pos, bad) { if (bad) pos.bad = true; return pos; }
-
-  function domToPos(cm, node, offset) {
-    var lineNode;
-    if (node == cm.display.lineDiv) {
-      lineNode = cm.display.lineDiv.childNodes[offset];
-      if (!lineNode) return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true);
-      node = null; offset = 0;
-    } else {
-      for (lineNode = node;; lineNode = lineNode.parentNode) {
-        if (!lineNode || lineNode == cm.display.lineDiv) return null;
-        if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) break;
-      }
-    }
-    for (var i = 0; i < cm.display.view.length; i++) {
-      var lineView = cm.display.view[i];
-      if (lineView.node == lineNode)
-        return locateNodeInLineView(lineView, node, offset);
-    }
-  }
-
-  function locateNodeInLineView(lineView, node, offset) {
-    var wrapper = lineView.text.firstChild, bad = false;
-    if (!node || !contains(wrapper, node)) return badPos(Pos(lineNo(lineView.line), 0), true);
-    if (node == wrapper) {
-      bad = true;
-      node = wrapper.childNodes[offset];
-      offset = 0;
-      if (!node) {
-        var line = lineView.rest ? lst(lineView.rest) : lineView.line;
-        return badPos(Pos(lineNo(line), line.text.length), bad);
-      }
-    }
-
-    var textNode = node.nodeType == 3 ? node : null, topNode = node;
-    if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {
-      textNode = node.firstChild;
-      if (offset) offset = textNode.nodeValue.length;
-    }
-    while (topNode.parentNode != wrapper) topNode = topNode.parentNode;
-    var measure = lineView.measure, maps = measure.maps;
-
-    function find(textNode, topNode, offset) {
-      for (var i = -1; i < (maps ? maps.length : 0); i++) {
-        var map = i < 0 ? measure.map : maps[i];
-        for (var j = 0; j < map.length; j += 3) {
-          var curNode = map[j + 2];
-          if (curNode == textNode || curNode == topNode) {
-            var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);
-            var ch = map[j] + offset;
-            if (offset < 0 || curNode != textNode) ch = map[j + (offset ? 1 : 0)];
-            return Pos(line, ch);
-          }
-        }
-      }
-    }
-    var found = find(textNode, topNode, offset);
-    if (found) return badPos(found, bad);
-
-    // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems
-    for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {
-      found = find(after, after.firstChild, 0);
-      if (found)
-        return badPos(Pos(found.line, found.ch - dist), bad);
-      else
-        dist += after.textContent.length;
-    }
-    for (var before = topNode.previousSibling, dist = offset; before; before = before.previousSibling) {
-      found = find(before, before.firstChild, -1);
-      if (found)
-        return badPos(Pos(found.line, found.ch + dist), bad);
-      else
-        dist += after.textContent.length;
-    }
-  }
-
-  function domTextBetween(cm, from, to, fromLine, toLine) {
-    var text = "", closing = false, lineSep = cm.doc.lineSeparator();
-    function recognizeMarker(id) { return function(marker) { return marker.id == id; }; }
-    function walk(node) {
-      if (node.nodeType == 1) {
-        var cmText = node.getAttribute("cm-text");
-        if (cmText != null) {
-          if (cmText == "") cmText = node.textContent.replace(/\u200b/g, "");
-          text += cmText;
-          return;
-        }
-        var markerID = node.getAttribute("cm-marker"), range;
-        if (markerID) {
-          var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));
-          if (found.length && (range = found[0].find()))
-            text += getBetween(cm.doc, range.from, range.to).join(lineSep);
-          return;
-        }
-        if (node.getAttribute("contenteditable") == "false") return;
-        for (var i = 0; i < node.childNodes.length; i++)
-          walk(node.childNodes[i]);
-        if (/^(pre|div|p)$/i.test(node.nodeName))
-          closing = true;
-      } else if (node.nodeType == 3) {
-        var val = node.nodeValue;
-        if (!val) return;
-        if (closing) {
-          text += lineSep;
-          closing = false;
-        }
-        text += val;
-      }
-    }
-    for (;;) {
-      walk(from);
-      if (from == to) break;
-      from = from.nextSibling;
-    }
-    return text;
-  }
-
-  CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput};
-
-  // SELECTION / CURSOR
-
-  // Selection objects are immutable. A new one is created every time
-  // the selection changes. A selection is one or more non-overlapping
-  // (and non-touching) ranges, sorted, and an integer that indicates
-  // which one is the primary selection (the one that's scrolled into
-  // view, that getCursor returns, etc).
-  function Selection(ranges, primIndex) {
-    this.ranges = ranges;
-    this.primIndex = primIndex;
-  }
-
-  Selection.prototype = {
-    primary: function() { return this.ranges[this.primIndex]; },
-    equals: function(other) {
-      if (other == this) return true;
-      if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false;
-      for (var i = 0; i < this.ranges.length; i++) {
-        var here = this.ranges[i], there = other.ranges[i];
-        if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false;
-      }
-      return true;
-    },
-    deepCopy: function() {
-      for (var out = [], i = 0; i < this.ranges.length; i++)
-        out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head));
-      return new Selection(out, this.primIndex);
-    },
-    somethingSelected: function() {
-      for (var i = 0; i < this.ranges.length; i++)
-        if (!this.ranges[i].empty()) return true;
-      return false;
-    },
-    contains: function(pos, end) {
-      if (!end) end = pos;
-      for (var i = 0; i < this.ranges.length; i++) {
-        var range = this.ranges[i];
-        if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)
-          return i;
-      }
-      return -1;
-    }
-  };
-
-  function Range(anchor, head) {
-    this.anchor = anchor; this.head = head;
-  }
-
-  Range.prototype = {
-    from: function() { return minPos(this.anchor, this.head); },
-    to: function() { return maxPos(this.anchor, this.head); },
-    empty: function() {
-      return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch;
-    }
-  };
-
-  // Take an unsorted, potentially overlapping set of ranges, and
-  // build a selection out of it. 'Consumes' ranges array (modifying
-  // it).
-  function normalizeSelection(ranges, primIndex) {
-    var prim = ranges[primIndex];
-    ranges.sort(function(a, b) { return cmp(a.from(), b.from()); });
-    primIndex = indexOf(ranges, prim);
-    for (var i = 1; i < ranges.length; i++) {
-      var cur = ranges[i], prev = ranges[i - 1];
-      if (cmp(prev.to(), cur.from()) >= 0) {
-        var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());
-        var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;
-        if (i <= primIndex) --primIndex;
-        ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));
-      }
-    }
-    return new Selection(ranges, primIndex);
-  }
-
-  function simpleSelection(anchor, head) {
-    return new Selection([new Range(anchor, head || anchor)], 0);
-  }
-
-  // Most of the external API clips given positions to make sure they
-  // actually exist within the document.
-  function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));}
-  function clipPos(doc, pos) {
-    if (pos.line < doc.first) return Pos(doc.first, 0);
-    var last = doc.first + doc.size - 1;
-    if (pos.line > last) return Pos(last, getLine(doc, last).text.length);
-    return clipToLen(pos, getLine(doc, pos.line).text.length);
-  }
-  function clipToLen(pos, linelen) {
-    var ch = pos.ch;
-    if (ch == null || ch > linelen) return Pos(pos.line, linelen);
-    else if (ch < 0) return Pos(pos.line, 0);
-    else return pos;
-  }
-  function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;}
-  function clipPosArray(doc, array) {
-    for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]);
-    return out;
-  }
-
-  // SELECTION UPDATES
-
-  // The 'scroll' parameter given to many of these indicated whether
-  // the new cursor position should be scrolled into view after
-  // modifying the selection.
-
-  // If shift is held or the extend flag is set, extends a range to
-  // include a given position (and optionally a second position).
-  // Otherwise, simply returns the range between the given positions.
-  // Used for cursor motion and such.
-  function extendRange(doc, range, head, other) {
-    if (doc.cm && doc.cm.display.shift || doc.extend) {
-      var anchor = range.anchor;
-      if (other) {
-        var posBefore = cmp(head, anchor) < 0;
-        if (posBefore != (cmp(other, anchor) < 0)) {
-          anchor = head;
-          head = other;
-        } else if (posBefore != (cmp(head, other) < 0)) {
-          head = other;
-        }
-      }
-      return new Range(anchor, head);
-    } else {
-      return new Range(other || head, head);
-    }
-  }
-
-  // Extend the primary selection range, discard the rest.
-  function extendSelection(doc, head, other, options) {
-    setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options);
-  }
-
-  // Extend all selections (pos is an array of selections with length
-  // equal the number of selections)
-  function extendSelections(doc, heads, options) {
-    for (var out = [], i = 0; i < doc.sel.ranges.length; i++)
-      out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null);
-    var newSel = normalizeSelection(out, doc.sel.primIndex);
-    setSelection(doc, newSel, options);
-  }
-
-  // Updates a single range in the selection.
-  function replaceOneSelection(doc, i, range, options) {
-    var ranges = doc.sel.ranges.slice(0);
-    ranges[i] = range;
-    setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options);
-  }
-
-  // Reset the selection to a single range.
-  function setSimpleSelection(doc, anchor, head, options) {
-    setSelection(doc, simpleSelection(anchor, head), options);
-  }
-
-  // Give beforeSelectionChange handlers a change to influence a
-  // selection update.
-  function filterSelectionChange(doc, sel, options) {
-    var obj = {
-      ranges: sel.ranges,
-      update: function(ranges) {
-        this.ranges = [];
-        for (var i = 0; i < ranges.length; i++)
-          this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),
-                                     clipPos(doc, ranges[i].head));
-      },
-      origin: options && options.origin
-    };
-    signal(doc, "beforeSelectionChange", doc, obj);
-    if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj);
-    if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1);
-    else return sel;
-  }
-
-  function setSelectionReplaceHistory(doc, sel, options) {
-    var done = doc.history.done, last = lst(done);
-    if (last && last.ranges) {
-      done[done.length - 1] = sel;
-      setSelectionNoUndo(doc, sel, options);
-    } else {
-      setSelection(doc, sel, options);
-    }
-  }
-
-  // Set a new selection.
-  function setSelection(doc, sel, options) {
-    setSelectionNoUndo(doc, sel, options);
-    addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);
-  }
-
-  function setSelectionNoUndo(doc, sel, options) {
-    if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange"))
-      sel = filterSelectionChange(doc, sel, options);
-
-    var bias = options && options.bias ||
-      (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);
-    setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));
-
-    if (!(options && options.scroll === false) && doc.cm)
-      ensureCursorVisible(doc.cm);
-  }
-
-  function setSelectionInner(doc, sel) {
-    if (sel.equals(doc.sel)) return;
-
-    doc.sel = sel;
-
-    if (doc.cm) {
-      doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true;
-      signalCursorActivity(doc.cm);
-    }
-    signalLater(doc, "cursorActivity", doc);
-  }
-
-  // Verify that the selection does not partially select any atomic
-  // marked ranges.
-  function reCheckSelection(doc) {
-    setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll);
-  }
-
-  // Return a selection that does not partially select any atomic
-  // ranges.
-  function skipAtomicInSelection(doc, sel, bias, mayClear) {
-    var out;
-    for (var i = 0; i < sel.ranges.length; i++) {
-      var range = sel.ranges[i];
-      var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];
-      var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);
-      var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);
-      if (out || newAnchor != range.anchor || newHead != range.head) {
-        if (!out) out = sel.ranges.slice(0, i);
-        out[i] = new Range(newAnchor, newHead);
-      }
-    }
-    return out ? normalizeSelection(out, sel.primIndex) : sel;
-  }
-
-  function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {
-    var line = getLine(doc, pos.line);
-    if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) {
-      var sp = line.markedSpans[i], m = sp.marker;
-      if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&
-          (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) {
-        if (mayClear) {
-          signal(m, "beforeCursorEnter");
-          if (m.explicitlyCleared) {
-            if (!line.markedSpans) break;
-            else {--i; continue;}
-          }
-        }
-        if (!m.atomic) continue;
-
-        if (oldPos) {
-          var near = m.find(dir < 0 ? 1 : -1), diff;
-          if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft)
-            near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null);
-          if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))
-            return skipAtomicInner(doc, near, pos, dir, mayClear);
-        }
-
-        var far = m.find(dir < 0 ? -1 : 1);
-        if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight)
-          far = movePos(doc, far, dir, far.line == pos.line ? line : null);
-        return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null;
-      }
-    }
-    return pos;
-  }
-
-  // Ensure a given position is not inside an atomic range.
-  function skipAtomic(doc, pos, oldPos, bias, mayClear) {
-    var dir = bias || 1;
-    var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||
-        (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||
-        skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||
-        (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));
-    if (!found) {
-      doc.cantEdit = true;
-      return Pos(doc.first, 0);
-    }
-    return found;
-  }
-
-  function movePos(doc, pos, dir, line) {
-    if (dir < 0 && pos.ch == 0) {
-      if (pos.line > doc.first) return clipPos(doc, Pos(pos.line - 1));
-      else return null;
-    } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {
-      if (pos.line < doc.first + doc.size - 1) return Pos(pos.line + 1, 0);
-      else return null;
-    } else {
-      return new Pos(pos.line, pos.ch + dir);
-    }
-  }
-
-  // SELECTION DRAWING
-
-  function updateSelection(cm) {
-    cm.display.input.showSelection(cm.display.input.prepareSelection());
-  }
-
-  function prepareSelection(cm, primary) {
-    var doc = cm.doc, result = {};
-    var curFragment = result.cursors = document.createDocumentFragment();
-    var selFragment = result.selection = document.createDocumentFragment();
-
-    for (var i = 0; i < doc.sel.ranges.length; i++) {
-      if (primary === false && i == doc.sel.primIndex) continue;
-      var range = doc.sel.ranges[i];
-      if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) continue;
-      var collapsed = range.empty();
-      if (collapsed || cm.options.showCursorWhenSelecting)
-        drawSelectionCursor(cm, range.head, curFragment);
-      if (!collapsed)
-        drawSelectionRange(cm, range, selFragment);
-    }
-    return result;
-  }
-
-  // Draws a cursor for the given range
-  function drawSelectionCursor(cm, head, output) {
-    var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine);
-
-    var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor"));
-    cursor.style.left = pos.left + "px";
-    cursor.style.top = pos.top + "px";
-    cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px";
-
-    if (pos.other) {
-      // Secondary cursor, shown when on a 'jump' in bi-directional text
-      var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"));
-      otherCursor.style.display = "";
-      otherCursor.style.left = pos.other.left + "px";
-      otherCursor.style.top = pos.other.top + "px";
-      otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px";
-    }
-  }
-
-  // Draws the given range as a highlighted selection
-  function drawSelectionRange(cm, range, output) {
-    var display = cm.display, doc = cm.doc;
-    var fragment = document.createDocumentFragment();
-    var padding = paddingH(cm.display), leftSide = padding.left;
-    var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;
-
-    function add(left, top, width, bottom) {
-      if (top < 0) top = 0;
-      top = Math.round(top);
-      bottom = Math.round(bottom);
-      fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left +
-                               "px; top: " + top + "px; width: " + (width == null ? rightSide - left : width) +
-                               "px; height: " + (bottom - top) + "px"));
-    }
-
-    function drawForLine(line, fromArg, toArg) {
-      var lineObj = getLine(doc, line);
-      var lineLen = lineObj.text.length;
-      var start, end;
-      function coords(ch, bias) {
-        return charCoords(cm, Pos(line, ch), "div", lineObj, bias);
-      }
-
-      iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) {
-        var leftPos = coords(from, "left"), rightPos, left, right;
-        if (from == to) {
-          rightPos = leftPos;
-          left = right = leftPos.left;
-        } else {
-          rightPos = coords(to - 1, "right");
-          if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; }
-          left = leftPos.left;
-          right = rightPos.right;
-        }
-        if (fromArg == null && from == 0) left = leftSide;
-        if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part
-          add(left, leftPos.top, null, leftPos.bottom);
-          left = leftSide;
-          if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top);
-        }
-        if (toArg == null && to == lineLen) right = rightSide;
-        if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left)
-          start = leftPos;
-        if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right)
-          end = rightPos;
-        if (left < leftSide + 1) left = leftSide;
-        add(left, rightPos.top, right - left, rightPos.bottom);
-      });
-      return {start: start, end: end};
-    }
-
-    var sFrom = range.from(), sTo = range.to();
-    if (sFrom.line == sTo.line) {
-      drawForLine(sFrom.line, sFrom.ch, sTo.ch);
-    } else {
-      var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);
-      var singleVLine = visualLine(fromLine) == visualLine(toLine);
-      var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;
-      var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;
-      if (singleVLine) {
-        if (leftEnd.top < rightStart.top - 2) {
-          add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);
-          add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);
-        } else {
-          add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);
-        }
-      }
-      if (leftEnd.bottom < rightStart.top)
-        add(leftSide, leftEnd.bottom, null, rightStart.top);
-    }
-
-    output.appendChild(fragment);
-  }
-
-  // Cursor-blinking
-  function restartBlink(cm) {
-    if (!cm.state.focused) return;
-    var display = cm.display;
-    clearInterval(display.blinker);
-    var on = true;
-    display.cursorDiv.style.visibility = "";
-    if (cm.options.cursorBlinkRate > 0)
-      display.blinker = setInterval(function() {
-        display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden";
-      }, cm.options.cursorBlinkRate);
-    else if (cm.options.cursorBlinkRate < 0)
-      display.cursorDiv.style.visibility = "hidden";
-  }
-
-  // HIGHLIGHT WORKER
-
-  function startWorker(cm, time) {
-    if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo)
-      cm.state.highlight.set(time, bind(highlightWorker, cm));
-  }
-
-  function highlightWorker(cm) {
-    var doc = cm.doc;
-    if (doc.frontier < doc.first) doc.frontier = doc.first;
-    if (doc.frontier >= cm.display.viewTo) return;
-    var end = +new Date + cm.options.workTime;
-    var state = copyState(doc.mode, getStateBefore(cm, doc.frontier));
-    var changedLines = [];
-
-    doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) {
-      if (doc.frontier >= cm.display.viewFrom) { // Visible
-        var oldStyles = line.styles, tooLong = line.text.length > cm.options.maxHighlightLength;
-        var highlighted = highlightLine(cm, line, tooLong ? copyState(doc.mode, state) : state, true);
-        line.styles = highlighted.styles;
-        var oldCls = line.styleClasses, newCls = highlighted.classes;
-        if (newCls) line.styleClasses = newCls;
-        else if (oldCls) line.styleClasses = null;
-        var ischange = !oldStyles || oldStyles.length != line.styles.length ||
-          oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);
-        for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i];
-        if (ischange) changedLines.push(doc.frontier);
-        line.stateAfter = tooLong ? state : copyState(doc.mode, state);
-      } else {
-        if (line.text.length <= cm.options.maxHighlightLength)
-          processLine(cm, line.text, state);
-        line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null;
-      }
-      ++doc.frontier;
-      if (+new Date > end) {
-        startWorker(cm, cm.options.workDelay);
-        return true;
-      }
-    });
-    if (changedLines.length) runInOp(cm, function() {
-      for (var i = 0; i < changedLines.length; i++)
-        regLineChange(cm, changedLines[i], "text");
-    });
-  }
-
-  // Finds the line to start with when starting a parse. Tries to
-  // find a line with a stateAfter, so that it can start with a
-  // valid state. If that fails, it returns the line with the
-  // smallest indentation, which tends to need the least context to
-  // parse correctly.
-  function findStartLine(cm, n, precise) {
-    var minindent, minline, doc = cm.doc;
-    var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);
-    for (var search = n; search > lim; --search) {
-      if (search <= doc.first) return doc.first;
-      var line = getLine(doc, search - 1);
-      if (line.stateAfter && (!precise || search <= doc.frontier)) return search;
-      var indented = countColumn(line.text, null, cm.options.tabSize);
-      if (minline == null || minindent > indented) {
-        minline = search - 1;
-        minindent = indented;
-      }
-    }
-    return minline;
-  }
-
-  function getStateBefore(cm, n, precise) {
-    var doc = cm.doc, display = cm.display;
-    if (!doc.mode.startState) return true;
-    var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter;
-    if (!state) state = startState(doc.mode);
-    else state = copyState(doc.mode, state);
-    doc.iter(pos, n, function(line) {
-      processLine(cm, line.text, state);
-      var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo;
-      line.stateAfter = save ? copyState(doc.mode, state) : null;
-      ++pos;
-    });
-    if (precise) doc.frontier = pos;
-    return state;
-  }
-
-  // POSITION MEASUREMENT
-
-  function paddingTop(display) {return display.lineSpace.offsetTop;}
-  function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;}
-  function paddingH(display) {
-    if (display.cachedPaddingH) return display.cachedPaddingH;
-    var e = removeChildrenAndAdd(display.measure, elt("pre", "x"));
-    var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;
-    var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};
-    if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data;
-    return data;
-  }
-
-  function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth; }
-  function displayWidth(cm) {
-    return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth;
-  }
-  function displayHeight(cm) {
-    return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight;
-  }
-
-  // Ensure the lineView.wrapping.heights array is populated. This is
-  // an array of bottom offsets for the lines that make up a drawn
-  // line. When lineWrapping is on, there might be more than one
-  // height.
-  function ensureLineHeights(cm, lineView, rect) {
-    var wrapping = cm.options.lineWrapping;
-    var curWidth = wrapping && displayWidth(cm);
-    if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {
-      var heights = lineView.measure.heights = [];
-      if (wrapping) {
-        lineView.measure.width = curWidth;
-        var rects = lineView.text.firstChild.getClientRects();
-        for (var i = 0; i < rects.length - 1; i++) {
-          var cur = rects[i], next = rects[i + 1];
-          if (Math.abs(cur.bottom - next.bottom) > 2)
-            heights.push((cur.bottom + next.top) / 2 - rect.top);
-        }
-      }
-      heights.push(rect.bottom - rect.top);
-    }
-  }
-
-  // Find a line map (mapping character offsets to text nodes) and a
-  // measurement cache for the given line number. (A line view might
-  // contain multiple lines when collapsed ranges are present.)
-  function mapFromLineView(lineView, line, lineN) {
-    if (lineView.line == line)
-      return {map: lineView.measure.map, cache: lineView.measure.cache};
-    for (var i = 0; i < lineView.rest.length; i++)
-      if (lineView.rest[i] == line)
-        return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]};
-    for (var i = 0; i < lineView.rest.length; i++)
-      if (lineNo(lineView.rest[i]) > lineN)
-        return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true};
-  }
-
-  // Render a line into the hidden node display.externalMeasured. Used
-  // when measurement is needed for a line that's not in the viewport.
-  function updateExternalMeasurement(cm, line) {
-    line = visualLine(line);
-    var lineN = lineNo(line);
-    var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);
-    view.lineN = lineN;
-    var built = view.built = buildLineContent(cm, view);
-    view.text = built.pre;
-    removeChildrenAndAdd(cm.display.lineMeasure, built.pre);
-    return view;
-  }
-
-  // Get a {top, bottom, left, right} box (in line-local coordinates)
-  // for a given character.
-  function measureChar(cm, line, ch, bias) {
-    return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias);
-  }
-
-  // Find a line view that corresponds to the given line number.
-  function findViewForLine(cm, lineN) {
-    if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)
-      return cm.display.view[findViewIndex(cm, lineN)];
-    var ext = cm.display.externalMeasured;
-    if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)
-      return ext;
-  }
-
-  // Measurement can be split in two steps, the set-up work that
-  // applies to the whole line, and the measurement of the actual
-  // character. Functions like coordsChar, that need to do a lot of
-  // measurements in a row, can thus ensure that the set-up work is
-  // only done once.
-  function prepareMeasureForLine(cm, line) {
-    var lineN = lineNo(line);
-    var view = findViewForLine(cm, lineN);
-    if (view && !view.text) {
-      view = null;
-    } else if (view && view.changes) {
-      updateLineForChanges(cm, view, lineN, getDimensions(cm));
-      cm.curOp.forceUpdate = true;
-    }
-    if (!view)
-      view = updateExternalMeasurement(cm, line);
-
-    var info = mapFromLineView(view, line, lineN);
-    return {
-      line: line, view: view, rect: null,
-      map: info.map, cache: info.cache, before: info.before,
-      hasHeights: false
-    };
-  }
-
-  // Given a prepared measurement object, measures the position of an
-  // actual character (or fetches it from the cache).
-  function measureCharPrepared(cm, prepared, ch, bias, varHeight) {
-    if (prepared.before) ch = -1;
-    var key = ch + (bias || ""), found;
-    if (prepared.cache.hasOwnProperty(key)) {
-      found = prepared.cache[key];
-    } else {
-      if (!prepared.rect)
-        prepared.rect = prepared.view.text.getBoundingClientRect();
-      if (!prepared.hasHeights) {
-        ensureLineHeights(cm, prepared.view, prepared.rect);
-        prepared.hasHeights = true;
-      }
-      found = measureCharInner(cm, prepared, ch, bias);
-      if (!found.bogus) prepared.cache[key] = found;
-    }
-    return {left: found.left, right: found.right,
-            top: varHeight ? found.rtop : found.top,
-            bottom: varHeight ? found.rbottom : found.bottom};
-  }
-
-  var nullRect = {left: 0, right: 0, top: 0, bottom: 0};
-
-  function nodeAndOffsetInLineMap(map, ch, bias) {
-    var node, start, end, collapse;
-    // First, search the line map for the text node corresponding to,
-    // or closest to, the target character.
-    for (var i = 0; i < map.length; i += 3) {
-      var mStart = map[i], mEnd = map[i + 1];
-      if (ch < mStart) {
-        start = 0; end = 1;
-        collapse = "left";
-      } else if (ch < mEnd) {
-        start = ch - mStart;
-        end = start + 1;
-      } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {
-        end = mEnd - mStart;
-        start = end - 1;
-        if (ch >= mEnd) collapse = "right";
-      }
-      if (start != null) {
-        node = map[i + 2];
-        if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right"))
-          collapse = bias;
-        if (bias == "left" && start == 0)
-          while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {
-            node = map[(i -= 3) + 2];
-            collapse = "left";
-          }
-        if (bias == "right" && start == mEnd - mStart)
-          while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {
-            node = map[(i += 3) + 2];
-            collapse = "right";
-          }
-        break;
-      }
-    }
-    return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd};
-  }
-
-  function measureCharInner(cm, prepared, ch, bias) {
-    var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);
-    var node = place.node, start = place.start, end = place.end, collapse = place.collapse;
-
-    var rect;
-    if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.
-      for (var i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned
-        while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) --start;
-        while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) ++end;
-        if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) {
-          rect = node.parentNode.getBoundingClientRect();
-        } else if (ie && cm.options.lineWrapping) {
-          var rects = range(node, start, end).getClientRects();
-          if (rects.length)
-            rect = rects[bias == "right" ? rects.length - 1 : 0];
-          else
-            rect = nullRect;
-        } else {
-          rect = range(node, start, end).getBoundingClientRect() || nullRect;
-        }
-        if (rect.left || rect.right || start == 0) break;
-        end = start;
-        start = start - 1;
-        collapse = "right";
-      }
-      if (ie && ie_version < 11) rect = maybeUpdateRectForZooming(cm.display.measure, rect);
-    } else { // If it is a widget, simply get the box for the whole widget.
-      if (start > 0) collapse = bias = "right";
-      var rects;
-      if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)
-        rect = rects[bias == "right" ? rects.length - 1 : 0];
-      else
-        rect = node.getBoundingClientRect();
-    }
-    if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {
-      var rSpan = node.parentNode.getClientRects()[0];
-      if (rSpan)
-        rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom};
-      else
-        rect = nullRect;
-    }
-
-    var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;
-    var mid = (rtop + rbot) / 2;
-    var heights = prepared.view.measure.heights;
-    for (var i = 0; i < heights.length - 1; i++)
-      if (mid < heights[i]) break;
-    var top = i ? heights[i - 1] : 0, bot = heights[i];
-    var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left,
-                  right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left,
-                  top: top, bottom: bot};
-    if (!rect.left && !rect.right) result.bogus = true;
-    if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }
-
-    return result;
-  }
-
-  // Work around problem with bounding client rects on ranges being
-  // returned incorrectly when zoomed on IE10 and below.
-  function maybeUpdateRectForZooming(measure, rect) {
-    if (!window.screen || screen.logicalXDPI == null ||
-        screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))
-      return rect;
-    var scaleX = screen.logicalXDPI / screen.deviceXDPI;
-    var scaleY = screen.logicalYDPI / screen.deviceYDPI;
-    return {left: rect.left * scaleX, right: rect.right * scaleX,
-            top: rect.top * scaleY, bottom: rect.bottom * scaleY};
-  }
-
-  function clearLineMeasurementCacheFor(lineView) {
-    if (lineView.measure) {
-      lineView.measure.cache = {};
-      lineView.measure.heights = null;
-      if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++)
-        lineView.measure.caches[i] = {};
-    }
-  }
-
-  function clearLineMeasurementCache(cm) {
-    cm.display.externalMeasure = null;
-    removeChildren(cm.display.lineMeasure);
-    for (var i = 0; i < cm.display.view.length; i++)
-      clearLineMeasurementCacheFor(cm.display.view[i]);
-  }
-
-  function clearCaches(cm) {
-    clearLineMeasurementCache(cm);
-    cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;
-    if (!cm.options.lineWrapping) cm.display.maxLineChanged = true;
-    cm.display.lineNumChars = null;
-  }
-
-  function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; }
-  function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; }
-
-  // Converts a {top, bottom, left, right} box from line-local
-  // coordinates into another coordinate system. Context may be one of
-  // "line", "div" (display.lineDiv), "local"/null (editor), "window",
-  // or "page".
-  function intoCoordSystem(cm, lineObj, rect, context) {
-    if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) {
-      var size = widgetHeight(lineObj.widgets[i]);
-      rect.top += size; rect.bottom += size;
-    }
-    if (context == "line") return rect;
-    if (!context) context = "local";
-    var yOff = heightAtLine(lineObj);
-    if (context == "local") yOff += paddingTop(cm.display);
-    else yOff -= cm.display.viewOffset;
-    if (context == "page" || context == "window") {
-      var lOff = cm.display.lineSpace.getBoundingClientRect();
-      yOff += lOff.top + (context == "window" ? 0 : pageScrollY());
-      var xOff = lOff.left + (context == "window" ? 0 : pageScrollX());
-      rect.left += xOff; rect.right += xOff;
-    }
-    rect.top += yOff; rect.bottom += yOff;
-    return rect;
-  }
-
-  // Coverts a box from "div" coords to another coordinate system.
-  // Context may be "window", "page", "div", or "local"/null.
-  function fromCoordSystem(cm, coords, context) {
-    if (context == "div") return coords;
-    var left = coords.left, top = coords.top;
-    // First move into "page" coordinate system
-    if (context == "page") {
-      left -= pageScrollX();
-      top -= pageScrollY();
-    } else if (context == "local" || !context) {
-      var localBox = cm.display.sizer.getBoundingClientRect();
-      left += localBox.left;
-      top += localBox.top;
-    }
-
-    var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();
-    return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top};
-  }
-
-  function charCoords(cm, pos, context, lineObj, bias) {
-    if (!lineObj) lineObj = getLine(cm.doc, pos.line);
-    return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context);
-  }
-
-  // Returns a box for a given cursor position, which may have an
-  // 'other' property containing the position of the secondary cursor
-  // on a bidi boundary.
-  function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {
-    lineObj = lineObj || getLine(cm.doc, pos.line);
-    if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj);
-    function get(ch, right) {
-      var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight);
-      if (right) m.left = m.right; else m.right = m.left;
-      return intoCoordSystem(cm, lineObj, m, context);
-    }
-    function getBidi(ch, partPos) {
-      var part = order[partPos], right = part.level % 2;
-      if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) {
-        part = order[--partPos];
-        ch = bidiRight(part) - (part.level % 2 ? 0 : 1);
-        right = true;
-      } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) {
-        part = order[++partPos];
-        ch = bidiLeft(part) - part.level % 2;
-        right = false;
-      }
-      if (right && ch == part.to && ch > part.from) return get(ch - 1);
-      return get(ch, right);
-    }
-    var order = getOrder(lineObj), ch = pos.ch;
-    if (!order) return get(ch);
-    var partPos = getBidiPartAt(order, ch);
-    var val = getBidi(ch, partPos);
-    if (bidiOther != null) val.other = getBidi(ch, bidiOther);
-    return val;
-  }
-
-  // Used to cheaply estimate the coordinates for a position. Used for
-  // intermediate scroll updates.
-  function estimateCoords(cm, pos) {
-    var left = 0, pos = clipPos(cm.doc, pos);
-    if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch;
-    var lineObj = getLine(cm.doc, pos.line);
-    var top = heightAtLine(lineObj) + paddingTop(cm.display);
-    return {left: left, right: left, top: top, bottom: top + lineObj.height};
-  }
-
-  // Positions returned by coordsChar contain some extra information.
-  // xRel is the relative x position of the input coordinates compared
-  // to the found position (so xRel > 0 means the coordinates are to
-  // the right of the character position, for example). When outside
-  // is true, that means the coordinates lie outside the line's
-  // vertical range.
-  function PosWithInfo(line, ch, outside, xRel) {
-    var pos = Pos(line, ch);
-    pos.xRel = xRel;
-    if (outside) pos.outside = true;
-    return pos;
-  }
-
-  // Compute the character position closest to the given coordinates.
-  // Input must be lineSpace-local ("div" coordinate system).
-  function coordsChar(cm, x, y) {
-    var doc = cm.doc;
-    y += cm.display.viewOffset;
-    if (y < 0) return PosWithInfo(doc.first, 0, true, -1);
-    var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;
-    if (lineN > last)
-      return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1);
-    if (x < 0) x = 0;
-
-    var lineObj = getLine(doc, lineN);
-    for (;;) {
-      var found = coordsCharInner(cm, lineObj, lineN, x, y);
-      var merged = collapsedSpanAtEnd(lineObj);
-      var mergedPos = merged && merged.find(0, true);
-      if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))
-        lineN = lineNo(lineObj = mergedPos.to.line);
-      else
-        return found;
-    }
-  }
-
-  function coordsCharInner(cm, lineObj, lineNo, x, y) {
-    var innerOff = y - heightAtLine(lineObj);
-    var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth;
-    var preparedMeasure = prepareMeasureForLine(cm, lineObj);
-
-    function getX(ch) {
-      var sp = cursorCoords(cm, Pos(lineNo, ch), "line", lineObj, preparedMeasure);
-      wrongLine = true;
-      if (innerOff > sp.bottom) return sp.left - adjust;
-      else if (innerOff < sp.top) return sp.left + adjust;
-      else wrongLine = false;
-      return sp.left;
-    }
-
-    var bidi = getOrder(lineObj), dist = lineObj.text.length;
-    var from = lineLeft(lineObj), to = lineRight(lineObj);
-    var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine;
-
-    if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1);
-    // Do a binary search between these bounds.
-    for (;;) {
-      if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) {
-        var ch = x < fromX || x - fromX <= toX - x ? from : to;
-        var xDiff = x - (ch == from ? fromX : toX);
-        while (isExtendingChar(lineObj.text.charAt(ch))) ++ch;
-        var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside,
-                              xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0);
-        return pos;
-      }
-      var step = Math.ceil(dist / 2), middle = from + step;
-      if (bidi) {
-        middle = from;
-        for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1);
-      }
-      var middleX = getX(middle);
-      if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;}
-      else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;}
-    }
-  }
-
-  var measureText;
-  // Compute the default text height.
-  function textHeight(display) {
-    if (display.cachedTextHeight != null) return display.cachedTextHeight;
-    if (measureText == null) {
-      measureText = elt("pre");
-      // Measure a bunch of lines, for browsers that compute
-      // fractional heights.
-      for (var i = 0; i < 49; ++i) {
-        measureText.appendChild(document.createTextNode("x"));
-        measureText.appendChild(elt("br"));
-      }
-      measureText.appendChild(document.createTextNode("x"));
-    }
-    removeChildrenAndAdd(display.measure, measureText);
-    var height = measureText.offsetHeight / 50;
-    if (height > 3) display.cachedTextHeight = height;
-    removeChildren(display.measure);
-    return height || 1;
-  }
-
-  // Compute the default character width.
-  function charWidth(display) {
-    if (display.cachedCharWidth != null) return display.cachedCharWidth;
-    var anchor = elt("span", "xxxxxxxxxx");
-    var pre = elt("pre", [anchor]);
-    removeChildrenAndAdd(display.measure, pre);
-    var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;
-    if (width > 2) display.cachedCharWidth = width;
-    return width || 10;
-  }
-
-  // OPERATIONS
-
-  // Operations are used to wrap a series of changes to the editor
-  // state in such a way that each change won't have to update the
-  // cursor and display (which would be awkward, slow, and
-  // error-prone). Instead, display updates are batched and then all
-  // combined and executed at once.
-
-  var operationGroup = null;
-
-  var nextOpId = 0;
-  // Start a new operation.
-  function startOperation(cm) {
-    cm.curOp = {
-      cm: cm,
-      viewChanged: false,      // Flag that indicates that lines might need to be redrawn
-      startHeight: cm.doc.height, // Used to detect need to update scrollbar
-      forceUpdate: false,      // Used to force a redraw
-      updateInput: null,       // Whether to reset the input textarea
-      typing: false,           // Whether this reset should be careful to leave existing text (for compositing)
-      changeObjs: null,        // Accumulated changes, for firing change events
-      cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on
-      cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already
-      selectionChanged: false, // Whether the selection needs to be redrawn
-      updateMaxLine: false,    // Set when the widest line needs to be determined anew
-      scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet
-      scrollToPos: null,       // Used to scroll to a specific position
-      focus: false,
-      id: ++nextOpId           // Unique ID
-    };
-    if (operationGroup) {
-      operationGroup.ops.push(cm.curOp);
-    } else {
-      cm.curOp.ownsGroup = operationGroup = {
-        ops: [cm.curOp],
-        delayedCallbacks: []
-      };
-    }
-  }
-
-  function fireCallbacksForOps(group) {
-    // Calls delayed callbacks and cursorActivity handlers until no
-    // new ones appear
-    var callbacks = group.delayedCallbacks, i = 0;
-    do {
-      for (; i < callbacks.length; i++)
-        callbacks[i].call(null);
-      for (var j = 0; j < group.ops.length; j++) {
-        var op = group.ops[j];
-        if (op.cursorActivityHandlers)
-          while (op.cursorActivityCalled < op.cursorActivityHandlers.length)
-            op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm);
-      }
-    } while (i < callbacks.length);
-  }
-
-  // Finish an operation, updating the display and signalling delayed events
-  function endOperation(cm) {
-    var op = cm.curOp, group = op.ownsGroup;
-    if (!group) return;
-
-    try { fireCallbacksForOps(group); }
-    finally {
-      operationGroup = null;
-      for (var i = 0; i < group.ops.length; i++)
-        group.ops[i].cm.curOp = null;
-      endOperations(group);
-    }
-  }
-
-  // The DOM updates done when an operation finishes are batched so
-  // that the minimum number of relayouts are required.
-  function endOperations(group) {
-    var ops = group.ops;
-    for (var i = 0; i < ops.length; i++) // Read DOM
-      endOperation_R1(ops[i]);
-    for (var i = 0; i < ops.length; i++) // Write DOM (maybe)
-      endOperation_W1(ops[i]);
-    for (var i = 0; i < ops.length; i++) // Read DOM
-      endOperation_R2(ops[i]);
-    for (var i = 0; i < ops.length; i++) // Write DOM (maybe)
-      endOperation_W2(ops[i]);
-    for (var i = 0; i < ops.length; i++) // Read DOM
-      endOperation_finish(ops[i]);
-  }
-
-  function endOperation_R1(op) {
-    var cm = op.cm, display = cm.display;
-    maybeClipScrollbars(cm);
-    if (op.updateMaxLine) findMaxLine(cm);
-
-    op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||
-      op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||
-                         op.scrollToPos.to.line >= display.viewTo) ||
-      display.maxLineChanged && cm.options.lineWrapping;
-    op.update = op.mustUpdate &&
-      new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);
-  }
-
-  function endOperation_W1(op) {
-    op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);
-  }
-
-  function endOperation_R2(op) {
-    var cm = op.cm, display = cm.display;
-    if (op.updatedDisplay) updateHeightsInViewport(cm);
-
-    op.barMeasure = measureForScrollbars(cm);
-
-    // If the max line changed since it was last measured, measure it,
-    // and ensure the document's width matches it.
-    // updateDisplay_W2 will use these properties to do the actual resizing
-    if (display.maxLineChanged && !cm.options.lineWrapping) {
-      op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;
-      cm.display.sizerWidth = op.adjustWidthTo;
-      op.barMeasure.scrollWidth =
-        Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);
-      op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));
-    }
-
-    if (op.updatedDisplay || op.selectionChanged)
-      op.preparedSelection = display.input.prepareSelection(op.focus);
-  }
-
-  function endOperation_W2(op) {
-    var cm = op.cm;
-
-    if (op.adjustWidthTo != null) {
-      cm.display.sizer.style.minWidth = op.adjustWidthTo + "px";
-      if (op.maxScrollLeft < cm.doc.scrollLeft)
-        setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true);
-      cm.display.maxLineChanged = false;
-    }
-
-    var takeFocus = op.focus && op.focus == activeElt() && (!document.hasFocus || document.hasFocus())
-    if (op.preparedSelection)
-      cm.display.input.showSelection(op.preparedSelection, takeFocus);
-    if (op.updatedDisplay || op.startHeight != cm.doc.height)
-      updateScrollbars(cm, op.barMeasure);
-    if (op.updatedDisplay)
-      setDocumentHeight(cm, op.barMeasure);
-
-    if (op.selectionChanged) restartBlink(cm);
-
-    if (cm.state.focused && op.updateInput)
-      cm.display.input.reset(op.typing);
-    if (takeFocus) ensureFocus(op.cm);
-  }
-
-  function endOperation_finish(op) {
-    var cm = op.cm, display = cm.display, doc = cm.doc;
-
-    if (op.updatedDisplay) postUpdateDisplay(cm, op.update);
-
-    // Abort mouse wheel delta measurement, when scrolling explicitly
-    if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))
-      display.wheelStartX = display.wheelStartY = null;
-
-    // Propagate the scroll position to the actual DOM scroller
-    if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) {
-      doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop));
-      display.scrollbars.setScrollTop(doc.scrollTop);
-      display.scroller.scrollTop = doc.scrollTop;
-    }
-    if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) {
-      doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft));
-      display.scrollbars.setScrollLeft(doc.scrollLeft);
-      display.scroller.scrollLeft = doc.scrollLeft;
-      alignHorizontally(cm);
-    }
-    // If we need to scroll a specific position into view, do so.
-    if (op.scrollToPos) {
-      var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),
-                                     clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);
-      if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords);
-    }
-
-    // Fire events for markers that are hidden/unidden by editing or
-    // undoing
-    var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;
-    if (hidden) for (var i = 0; i < hidden.length; ++i)
-      if (!hidden[i].lines.length) signal(hidden[i], "hide");
-    if (unhidden) for (var i = 0; i < unhidden.length; ++i)
-      if (unhidden[i].lines.length) signal(unhidden[i], "unhide");
-
-    if (display.wrapper.offsetHeight)
-      doc.scrollTop = cm.display.scroller.scrollTop;
-
-    // Fire change events, and delayed event handlers
-    if (op.changeObjs)
-      signal(cm, "changes", cm, op.changeObjs);
-    if (op.update)
-      op.update.finish();
-  }
-
-  // Run the given function in an operation
-  function runInOp(cm, f) {
-    if (cm.curOp) return f();
-    startOperation(cm);
-    try { return f(); }
-    finally { endOperation(cm); }
-  }
-  // Wraps a function in an operation. Returns the wrapped function.
-  function operation(cm, f) {
-    return function() {
-      if (cm.curOp) return f.apply(cm, arguments);
-      startOperation(cm);
-      try { return f.apply(cm, arguments); }
-      finally { endOperation(cm); }
-    };
-  }
-  // Used to add methods to editor and doc instances, wrapping them in
-  // operations.
-  function methodOp(f) {
-    return function() {
-      if (this.curOp) return f.apply(this, arguments);
-      startOperation(this);
-      try { return f.apply(this, arguments); }
-      finally { endOperation(this); }
-    };
-  }
-  function docMethodOp(f) {
-    return function() {
-      var cm = this.cm;
-      if (!cm || cm.curOp) return f.apply(this, arguments);
-      startOperation(cm);
-      try { return f.apply(this, arguments); }
-      finally { endOperation(cm); }
-    };
-  }
-
-  // VIEW TRACKING
-
-  // These objects are used to represent the visible (currently drawn)
-  // part of the document. A LineView may correspond to multiple
-  // logical lines, if those are connected by collapsed ranges.
-  function LineView(doc, line, lineN) {
-    // The starting line
-    this.line = line;
-    // Continuing lines, if any
-    this.rest = visualLineContinued(line);
-    // Number of logical lines in this visual line
-    this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;
-    this.node = this.text = null;
-    this.hidden = lineIsHidden(doc, line);
-  }
-
-  // Create a range of LineView objects for the given lines.
-  function buildViewArray(cm, from, to) {
-    var array = [], nextPos;
-    for (var pos = from; pos < to; pos = nextPos) {
-      var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);
-      nextPos = pos + view.size;
-      array.push(view);
-    }
-    return array;
-  }
-
-  // Updates the display.view data structure for a given change to the
-  // document. From and to are in pre-change coordinates. Lendiff is
-  // the amount of lines added or subtracted by the change. This is
-  // used for changes that span multiple lines, or change the way
-  // lines are divided into visual lines. regLineChange (below)
-  // registers single-line changes.
-  function regChange(cm, from, to, lendiff) {
-    if (from == null) from = cm.doc.first;
-    if (to == null) to = cm.doc.first + cm.doc.size;
-    if (!lendiff) lendiff = 0;
-
-    var display = cm.display;
-    if (lendiff && to < display.viewTo &&
-        (display.updateLineNumbers == null || display.updateLineNumbers > from))
-      display.updateLineNumbers = from;
-
-    cm.curOp.viewChanged = true;
-
-    if (from >= display.viewTo) { // Change after
-      if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)
-        resetView(cm);
-    } else if (to <= display.viewFrom) { // Change before
-      if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {
-        resetView(cm);
-      } else {
-        display.viewFrom += lendiff;
-        display.viewTo += lendiff;
-      }
-    } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap
-      resetView(cm);
-    } else if (from <= display.viewFrom) { // Top overlap
-      var cut = viewCuttingPoint(cm, to, to + lendiff, 1);
-      if (cut) {
-        display.view = display.view.slice(cut.index);
-        display.viewFrom = cut.lineN;
-        display.viewTo += lendiff;
-      } else {
-        resetView(cm);
-      }
-    } else if (to >= display.viewTo) { // Bottom overlap
-      var cut = viewCuttingPoint(cm, from, from, -1);
-      if (cut) {
-        display.view = display.view.slice(0, cut.index);
-        display.viewTo = cut.lineN;
-      } else {
-        resetView(cm);
-      }
-    } else { // Gap in the middle
-      var cutTop = viewCuttingPoint(cm, from, from, -1);
-      var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);
-      if (cutTop && cutBot) {
-        display.view = display.view.slice(0, cutTop.index)
-          .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))
-          .concat(display.view.slice(cutBot.index));
-        display.viewTo += lendiff;
-      } else {
-        resetView(cm);
-      }
-    }
-
-    var ext = display.externalMeasured;
-    if (ext) {
-      if (to < ext.lineN)
-        ext.lineN += lendiff;
-      else if (from < ext.lineN + ext.size)
-        display.externalMeasured = null;
-    }
-  }
-
-  // Register a change to a single line. Type must be one of "text",
-  // "gutter", "class", "widget"
-  function regLineChange(cm, line, type) {
-    cm.curOp.viewChanged = true;
-    var display = cm.display, ext = cm.display.externalMeasured;
-    if (ext && line >= ext.lineN && line < ext.lineN + ext.size)
-      display.externalMeasured = null;
-
-    if (line < display.viewFrom || line >= display.viewTo) return;
-    var lineView = display.view[findViewIndex(cm, line)];
-    if (lineView.node == null) return;
-    var arr = lineView.changes || (lineView.changes = []);
-    if (indexOf(arr, type) == -1) arr.push(type);
-  }
-
-  // Clear the view.
-  function resetView(cm) {
-    cm.display.viewFrom = cm.display.viewTo = cm.doc.first;
-    cm.display.view = [];
-    cm.display.viewOffset = 0;
-  }
-
-  // Find the view element corresponding to a given line. Return null
-  // when the line isn't visible.
-  function findViewIndex(cm, n) {
-    if (n >= cm.display.viewTo) return null;
-    n -= cm.display.viewFrom;
-    if (n < 0) return null;
-    var view = cm.display.view;
-    for (var i = 0; i < view.length; i++) {
-      n -= view[i].size;
-      if (n < 0) return i;
-    }
-  }
-
-  function viewCuttingPoint(cm, oldN, newN, dir) {
-    var index = findViewIndex(cm, oldN), diff, view = cm.display.view;
-    if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)
-      return {index: index, lineN: newN};
-    for (var i = 0, n = cm.display.viewFrom; i < index; i++)
-      n += view[i].size;
-    if (n != oldN) {
-      if (dir > 0) {
-        if (index == view.length - 1) return null;
-        diff = (n + view[index].size) - oldN;
-        index++;
-      } else {
-        diff = n - oldN;
-      }
-      oldN += diff; newN += diff;
-    }
-    while (visualLineNo(cm.doc, newN) != newN) {
-      if (index == (dir < 0 ? 0 : view.length - 1)) return null;
-      newN += dir * view[index - (dir < 0 ? 1 : 0)].size;
-      index += dir;
-    }
-    return {index: index, lineN: newN};
-  }
-
-  // Force the view to cover a given range, adding empty view element
-  // or clipping off existing ones as needed.
-  function adjustView(cm, from, to) {
-    var display = cm.display, view = display.view;
-    if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {
-      display.view = buildViewArray(cm, from, to);
-      display.viewFrom = from;
-    } else {
-      if (display.viewFrom > from)
-        display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view);
-      else if (display.viewFrom < from)
-        display.view = display.view.slice(findViewIndex(cm, from));
-      display.viewFrom = from;
-      if (display.viewTo < to)
-        display.view = display.view.concat(buildViewArray(cm, display.viewTo, to));
-      else if (display.viewTo > to)
-        display.view = display.view.slice(0, findViewIndex(cm, to));
-    }
-    display.viewTo = to;
-  }
-
-  // Count the number of lines in the view whose DOM representation is
-  // out of date (or nonexistent).
-  function countDirtyView(cm) {
-    var view = cm.display.view, dirty = 0;
-    for (var i = 0; i < view.length; i++) {
-      var lineView = view[i];
-      if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty;
-    }
-    return dirty;
-  }
-
-  // EVENT HANDLERS
-
-  // Attach the necessary event handlers when initializing the editor
-  function registerEventHandlers(cm) {
-    var d = cm.display;
-    on(d.scroller, "mousedown", operation(cm, onMouseDown));
-    // Older IE's will not fire a second mousedown for a double click
-    if (ie && ie_version < 11)
-      on(d.scroller, "dblclick", operation(cm, function(e) {
-        if (signalDOMEvent(cm, e)) return;
-        var pos = posFromMouse(cm, e);
-        if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return;
-        e_preventDefault(e);
-        var word = cm.findWordAt(pos);
-        extendSelection(cm.doc, word.anchor, word.head);
-      }));
-    else
-      on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); });
-    // Some browsers fire contextmenu *after* opening the menu, at
-    // which point we can't mess with it anymore. Context menu is
-    // handled in onMouseDown for these browsers.
-    if (!captureRightClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);});
-
-    // Used to suppress mouse event handling when a touch happens
-    var touchFinished, prevTouch = {end: 0};
-    function finishTouch() {
-      if (d.activeTouch) {
-        touchFinished = setTimeout(function() {d.activeTouch = null;}, 1000);
-        prevTouch = d.activeTouch;
-        prevTouch.end = +new Date;
-      }
-    };
-    function isMouseLikeTouchEvent(e) {
-      if (e.touches.length != 1) return false;
-      var touch = e.touches[0];
-      return touch.radiusX <= 1 && touch.radiusY <= 1;
-    }
-    function farAway(touch, other) {
-      if (other.left == null) return true;
-      var dx = other.left - touch.left, dy = other.top - touch.top;
-      return dx * dx + dy * dy > 20 * 20;
-    }
-    on(d.scroller, "touchstart", function(e) {
-      if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e)) {
-        clearTimeout(touchFinished);
-        var now = +new Date;
-        d.activeTouch = {start: now, moved: false,
-                         prev: now - prevTouch.end <= 300 ? prevTouch : null};
-        if (e.touches.length == 1) {
-          d.activeTouch.left = e.touches[0].pageX;
-          d.activeTouch.top = e.touches[0].pageY;
-        }
-      }
-    });
-    on(d.scroller, "touchmove", function() {
-      if (d.activeTouch) d.activeTouch.moved = true;
-    });
-    on(d.scroller, "touchend", function(e) {
-      var touch = d.activeTouch;
-      if (touch && !eventInWidget(d, e) && touch.left != null &&
-          !touch.moved && new Date - touch.start < 300) {
-        var pos = cm.coordsChar(d.activeTouch, "page"), range;
-        if (!touch.prev || farAway(touch, touch.prev)) // Single tap
-          range = new Range(pos, pos);
-        else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap
-          range = cm.findWordAt(pos);
-        else // Triple tap
-          range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0)));
-        cm.setSelection(range.anchor, range.head);
-        cm.focus();
-        e_preventDefault(e);
-      }
-      finishTouch();
-    });
-    on(d.scroller, "touchcancel", finishTouch);
-
-    // Sync scrolling between fake scrollbars and real scrollable
-    // area, ensure viewport is updated when scrolling.
-    on(d.scroller, "scroll", function() {
-      if (d.scroller.clientHeight) {
-        setScrollTop(cm, d.scroller.scrollTop);
-        setScrollLeft(cm, d.scroller.scrollLeft, true);
-        signal(cm, "scroll", cm);
-      }
-    });
-
-    // Listen to wheel events in order to try and update the viewport on time.
-    on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);});
-    on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);});
-
-    // Prevent wrapper from ever scrolling
-    on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });
-
-    d.dragFunctions = {
-      enter: function(e) {if (!signalDOMEvent(cm, e)) e_stop(e);},
-      over: function(e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},
-      start: function(e){onDragStart(cm, e);},
-      drop: operation(cm, onDrop),
-      leave: function(e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}
-    };
-
-    var inp = d.input.getField();
-    on(inp, "keyup", function(e) { onKeyUp.call(cm, e); });
-    on(inp, "keydown", operation(cm, onKeyDown));
-    on(inp, "keypress", operation(cm, onKeyPress));
-    on(inp, "focus", bind(onFocus, cm));
-    on(inp, "blur", bind(onBlur, cm));
-  }
-
-  function dragDropChanged(cm, value, old) {
-    var wasOn = old && old != CodeMirror.Init;
-    if (!value != !wasOn) {
-      var funcs = cm.display.dragFunctions;
-      var toggle = value ? on : off;
-      toggle(cm.display.scroller, "dragstart", funcs.start);
-      toggle(cm.display.scroller, "dragenter", funcs.enter);
-      toggle(cm.display.scroller, "dragover", funcs.over);
-      toggle(cm.display.scroller, "dragleave", funcs.leave);
-      toggle(cm.display.scroller, "drop", funcs.drop);
-    }
-  }
-
-  // Called when the window resizes
-  function onResize(cm) {
-    var d = cm.display;
-    if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth)
-      return;
-    // Might be a text scaling operation, clear size caches.
-    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
-    d.scrollbarsClipped = false;
-    cm.setSize();
-  }
-
-  // MOUSE EVENTS
-
-  // Return true when the given mouse event happened in a widget
-  function eventInWidget(display, e) {
-    for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {
-      if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") ||
-          (n.parentNode == display.sizer && n != display.mover))
-        return true;
-    }
-  }
-
-  // Given a mouse event, find the corresponding position. If liberal
-  // is false, it checks whether a gutter or scrollbar was clicked,
-  // and returns null if it was. forRect is used by rectangular
-  // selections, and tries to estimate a character position even for
-  // coordinates beyond the right of the text.
-  function posFromMouse(cm, e, liberal, forRect) {
-    var display = cm.display;
-    if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") return null;
-
-    var x, y, space = display.lineSpace.getBoundingClientRect();
-    // Fails unpredictably on IE[67] when mouse is dragged around quickly.
-    try { x = e.clientX - space.left; y = e.clientY - space.top; }
-    catch (e) { return null; }
-    var coords = coordsChar(cm, x, y), line;
-    if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {
-      var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;
-      coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));
-    }
-    return coords;
-  }
-
-  // A mouse down can be a single click, double click, triple click,
-  // start of selection drag, start of text drag, new cursor
-  // (ctrl-click), rectangle drag (alt-drag), or xwin
-  // middle-click-paste. Or it might be a click on something we should
-  // not interfere with, such as a scrollbar or widget.
-  function onMouseDown(e) {
-    var cm = this, display = cm.display;
-    if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) return;
-    display.shift = e.shiftKey;
-
-    if (eventInWidget(display, e)) {
-      if (!webkit) {
-        // Briefly turn off draggability, to allow widgets to do
-        // normal dragging things.
-        display.scroller.draggable = false;
-        setTimeout(function(){display.scroller.draggable = true;}, 100);
-      }
-      return;
-    }
-    if (clickInGutter(cm, e)) return;
-    var start = posFromMouse(cm, e);
-    window.focus();
-
-    switch (e_button(e)) {
-    case 1:
-      // #3261: make sure, that we're not starting a second selection
-      if (cm.state.selectingText)
-        cm.state.selectingText(e);
-      else if (start)
-        leftButtonDown(cm, e, start);
-      else if (e_target(e) == display.scroller)
-        e_preventDefault(e);
-      break;
-    case 2:
-      if (webkit) cm.state.lastMiddleDown = +new Date;
-      if (start) extendSelection(cm.doc, start);
-      setTimeout(function() {display.input.focus();}, 20);
-      e_preventDefault(e);
-      break;
-    case 3:
-      if (captureRightClick) onContextMenu(cm, e);
-      else delayBlurEvent(cm);
-      break;
-    }
-  }
-
-  var lastClick, lastDoubleClick;
-  function leftButtonDown(cm, e, start) {
-    if (ie) setTimeout(bind(ensureFocus, cm), 0);
-    else cm.curOp.focus = activeElt();
-
-    var now = +new Date, type;
-    if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) {
-      type = "triple";
-    } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) {
-      type = "double";
-      lastDoubleClick = {time: now, pos: start};
-    } else {
-      type = "single";
-      lastClick = {time: now, pos: start};
-    }
-
-    var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained;
-    if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&
-        type == "single" && (contained = sel.contains(start)) > -1 &&
-        (cmp((contained = sel.ranges[contained]).from(), start) < 0 || start.xRel > 0) &&
-        (cmp(contained.to(), start) > 0 || start.xRel < 0))
-      leftButtonStartDrag(cm, e, start, modifier);
-    else
-      leftButtonSelect(cm, e, start, type, modifier);
-  }
-
-  // Start a text drag. When it ends, see if any dragging actually
-  // happen, and treat as a click if it didn't.
-  function leftButtonStartDrag(cm, e, start, modifier) {
-    var display = cm.display, startTime = +new Date;
-    var dragEnd = operation(cm, function(e2) {
-      if (webkit) display.scroller.draggable = false;
-      cm.state.draggingText = false;
-      off(document, "mouseup", dragEnd);
-      off(display.scroller, "drop", dragEnd);
-      if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) {
-        e_preventDefault(e2);
-        if (!modifier && +new Date - 200 < startTime)
-          extendSelection(cm.doc, start);
-        // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)
-        if (webkit || ie && ie_version == 9)
-          setTimeout(function() {document.body.focus(); display.input.focus();}, 20);
-        else
-          display.input.focus();
-      }
-    });
-    // Let the drag handler handle this.
-    if (webkit) display.scroller.draggable = true;
-    cm.state.draggingText = dragEnd;
-    // IE's approach to draggable
-    if (display.scroller.dragDrop) display.scroller.dragDrop();
-    on(document, "mouseup", dragEnd);
-    on(display.scroller, "drop", dragEnd);
-  }
-
-  // Normal selection, as opposed to text dragging.
-  function leftButtonSelect(cm, e, start, type, addNew) {
-    var display = cm.display, doc = cm.doc;
-    e_preventDefault(e);
-
-    var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;
-    if (addNew && !e.shiftKey) {
-      ourIndex = doc.sel.contains(start);
-      if (ourIndex > -1)
-        ourRange = ranges[ourIndex];
-      else
-        ourRange = new Range(start, start);
-    } else {
-      ourRange = doc.sel.primary();
-      ourIndex = doc.sel.primIndex;
-    }
-
-    if (chromeOS ? e.shiftKey && e.metaKey : e.altKey) {
-      type = "rect";
-      if (!addNew) ourRange = new Range(start, start);
-      start = posFromMouse(cm, e, true, true);
-      ourIndex = -1;
-    } else if (type == "double") {
-      var word = cm.findWordAt(start);
-      if (cm.display.shift || doc.extend)
-        ourRange = extendRange(doc, ourRange, word.anchor, word.head);
-      else
-        ourRange = word;
-    } else if (type == "triple") {
-      var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0)));
-      if (cm.display.shift || doc.extend)
-        ourRange = extendRange(doc, ourRange, line.anchor, line.head);
-      else
-        ourRange = line;
-    } else {
-      ourRange = extendRange(doc, ourRange, start);
-    }
-
-    if (!addNew) {
-      ourIndex = 0;
-      setSelection(doc, new Selection([ourRange], 0), sel_mouse);
-      startSel = doc.sel;
-    } else if (ourIndex == -1) {
-      ourIndex = ranges.length;
-      setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex),
-                   {scroll: false, origin: "*mouse"});
-    } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single" && !e.shiftKey) {
-      setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),
-                   {scroll: false, origin: "*mouse"});
-      startSel = doc.sel;
-    } else {
-      replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);
-    }
-
-    var lastPos = start;
-    function extendTo(pos) {
-      if (cmp(lastPos, pos) == 0) return;
-      lastPos = pos;
-
-      if (type == "rect") {
-        var ranges = [], tabSize = cm.options.tabSize;
-        var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);
-        var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);
-        var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);
-        for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));
-             line <= end; line++) {
-          var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);
-          if (left == right)
-            ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos)));
-          else if (text.length > leftPos)
-            ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize))));
-        }
-        if (!ranges.length) ranges.push(new Range(start, start));
-        setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),
-                     {origin: "*mouse", scroll: false});
-        cm.scrollIntoView(pos);
-      } else {
-        var oldRange = ourRange;
-        var anchor = oldRange.anchor, head = pos;
-        if (type != "single") {
-          if (type == "double")
-            var range = cm.findWordAt(pos);
-          else
-            var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0)));
-          if (cmp(range.anchor, anchor) > 0) {
-            head = range.head;
-            anchor = minPos(oldRange.from(), range.anchor);
-          } else {
-            head = range.anchor;
-            anchor = maxPos(oldRange.to(), range.head);
-          }
-        }
-        var ranges = startSel.ranges.slice(0);
-        ranges[ourIndex] = new Range(clipPos(doc, anchor), head);
-        setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse);
-      }
-    }
-
-    var editorSize = display.wrapper.getBoundingClientRect();
-    // Used to ensure timeout re-tries don't fire when another extend
-    // happened in the meantime (clearTimeout isn't reliable -- at
-    // least on Chrome, the timeouts still happen even when cleared,
-    // if the clear happens after their scheduled firing time).
-    var counter = 0;
-
-    function extend(e) {
-      var curCount = ++counter;
-      var cur = posFromMouse(cm, e, true, type == "rect");
-      if (!cur) return;
-      if (cmp(cur, lastPos) != 0) {
-        cm.curOp.focus = activeElt();
-        extendTo(cur);
-        var visible = visibleLines(display, doc);
-        if (cur.line >= visible.to || cur.line < visible.from)
-          setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150);
-      } else {
-        var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;
-        if (outside) setTimeout(operation(cm, function() {
-          if (counter != curCount) return;
-          display.scroller.scrollTop += outside;
-          extend(e);
-        }), 50);
-      }
-    }
-
-    function done(e) {
-      cm.state.selectingText = false;
-      counter = Infinity;
-      e_preventDefault(e);
-      display.input.focus();
-      off(document, "mousemove", move);
-      off(document, "mouseup", up);
-      doc.history.lastSelOrigin = null;
-    }
-
-    var move = operation(cm, function(e) {
-      if (!e_button(e)) done(e);
-      else extend(e);
-    });
-    var up = operation(cm, done);
-    cm.state.selectingText = up;
-    on(document, "mousemove", move);
-    on(document, "mouseup", up);
-  }
-
-  // Determines whether an event happened in the gutter, and fires the
-  // handlers for the corresponding event.
-  function gutterEvent(cm, e, type, prevent) {
-    try { var mX = e.clientX, mY = e.clientY; }
-    catch(e) { return false; }
-    if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false;
-    if (prevent) e_preventDefault(e);
-
-    var display = cm.display;
-    var lineBox = display.lineDiv.getBoundingClientRect();
-
-    if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e);
-    mY -= lineBox.top - display.viewOffset;
-
-    for (var i = 0; i < cm.options.gutters.length; ++i) {
-      var g = display.gutters.childNodes[i];
-      if (g && g.getBoundingClientRect().right >= mX) {
-        var line = lineAtHeight(cm.doc, mY);
-        var gutter = cm.options.gutters[i];
-        signal(cm, type, cm, line, gutter, e);
-        return e_defaultPrevented(e);
-      }
-    }
-  }
-
-  function clickInGutter(cm, e) {
-    return gutterEvent(cm, e, "gutterClick", true);
-  }
-
-  // Kludge to work around strange IE behavior where it'll sometimes
-  // re-fire a series of drag-related events right after the drop (#1551)
-  var lastDrop = 0;
-
-  function onDrop(e) {
-    var cm = this;
-    clearDragCursor(cm);
-    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))
-      return;
-    e_preventDefault(e);
-    if (ie) lastDrop = +new Date;
-    var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;
-    if (!pos || cm.isReadOnly()) return;
-    // Might be a file drop, in which case we simply extract the text
-    // and insert it.
-    if (files && files.length && window.FileReader && window.File) {
-      var n = files.length, text = Array(n), read = 0;
-      var loadFile = function(file, i) {
-        if (cm.options.allowDropFileTypes &&
-            indexOf(cm.options.allowDropFileTypes, file.type) == -1)
-          return;
-
-        var reader = new FileReader;
-        reader.onload = operation(cm, function() {
-          var content = reader.result;
-          if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) content = "";
-          text[i] = content;
-          if (++read == n) {
-            pos = clipPos(cm.doc, pos);
-            var change = {from: pos, to: pos,
-                          text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())),
-                          origin: "paste"};
-            makeChange(cm.doc, change);
-            setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)));
-          }
-        });
-        reader.readAsText(file);
-      };
-      for (var i = 0; i < n; ++i) loadFile(files[i], i);
-    } else { // Normal drop
-      // Don't do a replace if the drop happened inside of the selected text.
-      if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {
-        cm.state.draggingText(e);
-        // Ensure the editor is re-focused
-        setTimeout(function() {cm.display.input.focus();}, 20);
-        return;
-      }
-      try {
-        var text = e.dataTransfer.getData("Text");
-        if (text) {
-          if (cm.state.draggingText && !(mac ? e.altKey : e.ctrlKey))
-            var selected = cm.listSelections();
-          setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));
-          if (selected) for (var i = 0; i < selected.length; ++i)
-            replaceRange(cm.doc, "", selected[i].anchor, selected[i].head, "drag");
-          cm.replaceSelection(text, "around", "paste");
-          cm.display.input.focus();
-        }
-      }
-      catch(e){}
-    }
-  }
-
-  function onDragStart(cm, e) {
-    if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; }
-    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return;
-
-    e.dataTransfer.setData("Text", cm.getSelection());
-    e.dataTransfer.effectAllowed = "copyMove"
-
-    // Use dummy image instead of default browsers image.
-    // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.
-    if (e.dataTransfer.setDragImage && !safari) {
-      var img = elt("img", null, null, "position: fixed; left: 0; top: 0;");
-      img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
-      if (presto) {
-        img.width = img.height = 1;
-        cm.display.wrapper.appendChild(img);
-        // Force a relayout, or Opera won't use our image for some obscure reason
-        img._top = img.offsetTop;
-      }
-      e.dataTransfer.setDragImage(img, 0, 0);
-      if (presto) img.parentNode.removeChild(img);
-    }
-  }
-
-  function onDragOver(cm, e) {
-    var pos = posFromMouse(cm, e);
-    if (!pos) return;
-    var frag = document.createDocumentFragment();
-    drawSelectionCursor(cm, pos, frag);
-    if (!cm.display.dragCursor) {
-      cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors");
-      cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);
-    }
-    removeChildrenAndAdd(cm.display.dragCursor, frag);
-  }
-
-  function clearDragCursor(cm) {
-    if (cm.display.dragCursor) {
-      cm.display.lineSpace.removeChild(cm.display.dragCursor);
-      cm.display.dragCursor = null;
-    }
-  }
-
-  // SCROLL EVENTS
-
-  // Sync the scrollable area and scrollbars, ensure the viewport
-  // covers the visible area.
-  function setScrollTop(cm, val) {
-    if (Math.abs(cm.doc.scrollTop - val) < 2) return;
-    cm.doc.scrollTop = val;
-    if (!gecko) updateDisplaySimple(cm, {top: val});
-    if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val;
-    cm.display.scrollbars.setScrollTop(val);
-    if (gecko) updateDisplaySimple(cm);
-    startWorker(cm, 100);
-  }
-  // Sync scroller and scrollbar, ensure the gutter elements are
-  // aligned.
-  function setScrollLeft(cm, val, isScroller) {
-    if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return;
-    val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);
-    cm.doc.scrollLeft = val;
-    alignHorizontally(cm);
-    if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val;
-    cm.display.scrollbars.setScrollLeft(val);
-  }
-
-  // Since the delta values reported on mouse wheel events are
-  // unstandardized between browsers and even browser versions, and
-  // generally horribly unpredictable, this code starts by measuring
-  // the scroll effect that the first few mouse wheel events have,
-  // and, from that, detects the way it can convert deltas to pixel
-  // offsets afterwards.
-  //
-  // The reason we want to know the amount a wheel event will scroll
-  // is that it gives us a chance to update the display before the
-  // actual scrolling happens, reducing flickering.
-
-  var wheelSamples = 0, wheelPixelsPerUnit = null;
-  // Fill in a browser-detected starting value on browsers where we
-  // know one. These don't have to be accurate -- the result of them
-  // being wrong would just be a slight flicker on the first wheel
-  // scroll (if it is large enough).
-  if (ie) wheelPixelsPerUnit = -.53;
-  else if (gecko) wheelPixelsPerUnit = 15;
-  else if (chrome) wheelPixelsPerUnit = -.7;
-  else if (safari) wheelPixelsPerUnit = -1/3;
-
-  var wheelEventDelta = function(e) {
-    var dx = e.wheelDeltaX, dy = e.wheelDeltaY;
-    if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail;
-    if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail;
-    else if (dy == null) dy = e.wheelDelta;
-    return {x: dx, y: dy};
-  };
-  CodeMirror.wheelEventPixels = function(e) {
-    var delta = wheelEventDelta(e);
-    delta.x *= wheelPixelsPerUnit;
-    delta.y *= wheelPixelsPerUnit;
-    return delta;
-  };
-
-  function onScrollWheel(cm, e) {
-    var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;
-
-    var display = cm.display, scroll = display.scroller;
-    // Quit if there's nothing to scroll here
-    var canScrollX = scroll.scrollWidth > scroll.clientWidth;
-    var canScrollY = scroll.scrollHeight > scroll.clientHeight;
-    if (!(dx && canScrollX || dy && canScrollY)) return;
-
-    // Webkit browsers on OS X abort momentum scrolls when the target
-    // of the scroll event is removed from the scrollable element.
-    // This hack (see related code in patchDisplay) makes sure the
-    // element is kept around.
-    if (dy && mac && webkit) {
-      outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {
-        for (var i = 0; i < view.length; i++) {
-          if (view[i].node == cur) {
-            cm.display.currentWheelTarget = cur;
-            break outer;
-          }
-        }
-      }
-    }
-
-    // On some browsers, horizontal scrolling will cause redraws to
-    // happen before the gutter has been realigned, causing it to
-    // wriggle around in a most unseemly way. When we have an
-    // estimated pixels/delta value, we just handle horizontal
-    // scrolling entirely here. It'll be slightly off from native, but
-    // better than glitching out.
-    if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {
-      if (dy && canScrollY)
-        setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight)));
-      setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth)));
-      // Only prevent default scrolling if vertical scrolling is
-      // actually possible. Otherwise, it causes vertical scroll
-      // jitter on OSX trackpads when deltaX is small and deltaY
-      // is large (issue #3579)
-      if (!dy || (dy && canScrollY))
-        e_preventDefault(e);
-      display.wheelStartX = null; // Abort measurement, if in progress
-      return;
-    }
-
-    // 'Project' the visible viewport to cover the area that is being
-    // scrolled into view (if we know enough to estimate it).
-    if (dy && wheelPixelsPerUnit != null) {
-      var pixels = dy * wheelPixelsPerUnit;
-      var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;
-      if (pixels < 0) top = Math.max(0, top + pixels - 50);
-      else bot = Math.min(cm.doc.height, bot + pixels + 50);
-      updateDisplaySimple(cm, {top: top, bottom: bot});
-    }
-
-    if (wheelSamples < 20) {
-      if (display.wheelStartX == null) {
-        display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;
-        display.wheelDX = dx; display.wheelDY = dy;
-        setTimeout(function() {
-          if (display.wheelStartX == null) return;
-          var movedX = scroll.scrollLeft - display.wheelStartX;
-          var movedY = scroll.scrollTop - display.wheelStartY;
-          var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||
-            (movedX && display.wheelDX && movedX / display.wheelDX);
-          display.wheelStartX = display.wheelStartY = null;
-          if (!sample) return;
-          wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);
-          ++wheelSamples;
-        }, 200);
-      } else {
-        display.wheelDX += dx; display.wheelDY += dy;
-      }
-    }
-  }
-
-  // KEY EVENTS
-
-  // Run a handler that was bound to a key.
-  function doHandleBinding(cm, bound, dropShift) {
-    if (typeof bound == "string") {
-      bound = commands[bound];
-      if (!bound) return false;
-    }
-    // Ensure previous input has been read, so that the handler sees a
-    // consistent view of the document
-    cm.display.input.ensurePolled();
-    var prevShift = cm.display.shift, done = false;
-    try {
-      if (cm.isReadOnly()) cm.state.suppressEdits = true;
-      if (dropShift) cm.display.shift = false;
-      done = bound(cm) != Pass;
-    } finally {
-      cm.display.shift = prevShift;
-      cm.state.suppressEdits = false;
-    }
-    return done;
-  }
-
-  function lookupKeyForEditor(cm, name, handle) {
-    for (var i = 0; i < cm.state.keyMaps.length; i++) {
-      var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);
-      if (result) return result;
-    }
-    return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))
-      || lookupKey(name, cm.options.keyMap, handle, cm);
-  }
-
-  var stopSeq = new Delayed;
-  function dispatchKey(cm, name, e, handle) {
-    var seq = cm.state.keySeq;
-    if (seq) {
-      if (isModifierKey(name)) return "handled";
-      stopSeq.set(50, function() {
-        if (cm.state.keySeq == seq) {
-          cm.state.keySeq = null;
-          cm.display.input.reset();
-        }
-      });
-      name = seq + " " + name;
-    }
-    var result = lookupKeyForEditor(cm, name, handle);
-
-    if (result == "multi")
-      cm.state.keySeq = name;
-    if (result == "handled")
-      signalLater(cm, "keyHandled", cm, name, e);
-
-    if (result == "handled" || result == "multi") {
-      e_preventDefault(e);
-      restartBlink(cm);
-    }
-
-    if (seq && !result && /\'$/.test(name)) {
-      e_preventDefault(e);
-      return true;
-    }
-    return !!result;
-  }
-
-  // Handle a key from the keydown event.
-  function handleKeyBinding(cm, e) {
-    var name = keyName(e, true);
-    if (!name) return false;
-
-    if (e.shiftKey && !cm.state.keySeq) {
-      // First try to resolve full name (including 'Shift-'). Failing
-      // that, see if there is a cursor-motion command (starting with
-      // 'go') bound to the keyname without 'Shift-'.
-      return dispatchKey(cm, "Shift-" + name, e, function(b) {return doHandleBinding(cm, b, true);})
-          || dispatchKey(cm, name, e, function(b) {
-               if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion)
-                 return doHandleBinding(cm, b);
-             });
-    } else {
-      return dispatchKey(cm, name, e, function(b) { return doHandleBinding(cm, b); });
-    }
-  }
-
-  // Handle a key from the keypress event
-  function handleCharBinding(cm, e, ch) {
-    return dispatchKey(cm, "'" + ch + "'", e,
-                       function(b) { return doHandleBinding(cm, b, true); });
-  }
-
-  var lastStoppedKey = null;
-  function onKeyDown(e) {
-    var cm = this;
-    cm.curOp.focus = activeElt();
-    if (signalDOMEvent(cm, e)) return;
-    // IE does strange things with escape.
-    if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false;
-    var code = e.keyCode;
-    cm.display.shift = code == 16 || e.shiftKey;
-    var handled = handleKeyBinding(cm, e);
-    if (presto) {
-      lastStoppedKey = handled ? code : null;
-      // Opera has no cut event... we try to at least catch the key combo
-      if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))
-        cm.replaceSelection("", null, "cut");
-    }
-
-    // Turn mouse into crosshair when Alt is held on Mac.
-    if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className))
-      showCrossHair(cm);
-  }
-
-  function showCrossHair(cm) {
-    var lineDiv = cm.display.lineDiv;
-    addClass(lineDiv, "CodeMirror-crosshair");
-
-    function up(e) {
-      if (e.keyCode == 18 || !e.altKey) {
-        rmClass(lineDiv, "CodeMirror-crosshair");
-        off(document, "keyup", up);
-        off(document, "mouseover", up);
-      }
-    }
-    on(document, "keyup", up);
-    on(document, "mouseover", up);
-  }
-
-  function onKeyUp(e) {
-    if (e.keyCode == 16) this.doc.sel.shift = false;
-    signalDOMEvent(this, e);
-  }
-
-  function onKeyPress(e) {
-    var cm = this;
-    if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) return;
-    var keyCode = e.keyCode, charCode = e.charCode;
-    if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;}
-    if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) return;
-    var ch = String.fromCharCode(charCode == null ? keyCode : charCode);
-    if (handleCharBinding(cm, e, ch)) return;
-    cm.display.input.onKeyPress(e);
-  }
-
-  // FOCUS/BLUR EVENTS
-
-  function delayBlurEvent(cm) {
-    cm.state.delayingBlurEvent = true;
-    setTimeout(function() {
-      if (cm.state.delayingBlurEvent) {
-        cm.state.delayingBlurEvent = false;
-        onBlur(cm);
-      }
-    }, 100);
-  }
-
-  function onFocus(cm) {
-    if (cm.state.delayingBlurEvent) cm.state.delayingBlurEvent = false;
-
-    if (cm.options.readOnly == "nocursor") return;
-    if (!cm.state.focused) {
-      signal(cm, "focus", cm);
-      cm.state.focused = true;
-      addClass(cm.display.wrapper, "CodeMirror-focused");
-      // This test prevents this from firing when a context
-      // menu is closed (since the input reset would kill the
-      // select-all detection hack)
-      if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {
-        cm.display.input.reset();
-        if (webkit) setTimeout(function() { cm.display.input.reset(true); }, 20); // Issue #1730
-      }
-      cm.display.input.receivedFocus();
-    }
-    restartBlink(cm);
-  }
-  function onBlur(cm) {
-    if (cm.state.delayingBlurEvent) return;
-
-    if (cm.state.focused) {
-      signal(cm, "blur", cm);
-      cm.state.focused = false;
-      rmClass(cm.display.wrapper, "CodeMirror-focused");
-    }
-    clearInterval(cm.display.blinker);
-    setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150);
-  }
-
-  // CONTEXT MENU HANDLING
-
-  // To make the context menu work, we need to briefly unhide the
-  // textarea (making it as unobtrusive as possible) to let the
-  // right-click take effect on it.
-  function onContextMenu(cm, e) {
-    if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) return;
-    if (signalDOMEvent(cm, e, "contextmenu")) return;
-    cm.display.input.onContextMenu(e);
-  }
-
-  function contextMenuInGutter(cm, e) {
-    if (!hasHandler(cm, "gutterContextMenu")) return false;
-    return gutterEvent(cm, e, "gutterContextMenu", false);
-  }
-
-  // UPDATING
-
-  // Compute the position of the end of a change (its 'to' property
-  // refers to the pre-change end).
-  var changeEnd = CodeMirror.changeEnd = function(change) {
-    if (!change.text) return change.to;
-    return Pos(change.from.line + change.text.length - 1,
-               lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0));
-  };
-
-  // Adjust a position to refer to the post-change position of the
-  // same text, or the end of the change if the change covers it.
-  function adjustForChange(pos, change) {
-    if (cmp(pos, change.from) < 0) return pos;
-    if (cmp(pos, change.to) <= 0) return changeEnd(change);
-
-    var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;
-    if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch;
-    return Pos(line, ch);
-  }
-
-  function computeSelAfterChange(doc, change) {
-    var out = [];
-    for (var i = 0; i < doc.sel.ranges.length; i++) {
-      var range = doc.sel.ranges[i];
-      out.push(new Range(adjustForChange(range.anchor, change),
-                         adjustForChange(range.head, change)));
-    }
-    return normalizeSelection(out, doc.sel.primIndex);
-  }
-
-  function offsetPos(pos, old, nw) {
-    if (pos.line == old.line)
-      return Pos(nw.line, pos.ch - old.ch + nw.ch);
-    else
-      return Pos(nw.line + (pos.line - old.line), pos.ch);
-  }
-
-  // Used by replaceSelections to allow moving the selection to the
-  // start or around the replaced test. Hint may be "start" or "around".
-  function computeReplacedSel(doc, changes, hint) {
-    var out = [];
-    var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;
-    for (var i = 0; i < changes.length; i++) {
-      var change = changes[i];
-      var from = offsetPos(change.from, oldPrev, newPrev);
-      var to = offsetPos(changeEnd(change), oldPrev, newPrev);
-      oldPrev = change.to;
-      newPrev = to;
-      if (hint == "around") {
-        var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;
-        out[i] = new Range(inv ? to : from, inv ? from : to);
-      } else {
-        out[i] = new Range(from, from);
-      }
-    }
-    return new Selection(out, doc.sel.primIndex);
-  }
-
-  // Allow "beforeChange" event handlers to influence a change
-  function filterChange(doc, change, update) {
-    var obj = {
-      canceled: false,
-      from: change.from,
-      to: change.to,
-      text: change.text,
-      origin: change.origin,
-      cancel: function() { this.canceled = true; }
-    };
-    if (update) obj.update = function(from, to, text, origin) {
-      if (from) this.from = clipPos(doc, from);
-      if (to) this.to = clipPos(doc, to);
-      if (text) this.text = text;
-      if (origin !== undefined) this.origin = origin;
-    };
-    signal(doc, "beforeChange", doc, obj);
-    if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj);
-
-    if (obj.canceled) return null;
-    return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin};
-  }
-
-  // Apply a change to a document, and add it to the document's
-  // history, and propagating it to all linked documents.
-  function makeChange(doc, change, ignoreReadOnly) {
-    if (doc.cm) {
-      if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly);
-      if (doc.cm.state.suppressEdits) return;
-    }
-
-    if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) {
-      change = filterChange(doc, change, true);
-      if (!change) return;
-    }
-
-    // Possibly split or suppress the update based on the presence
-    // of read-only spans in its range.
-    var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);
-    if (split) {
-      for (var i = split.length - 1; i >= 0; --i)
-        makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text});
-    } else {
-      makeChangeInner(doc, change);
-    }
-  }
-
-  function makeChangeInner(doc, change) {
-    if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) return;
-    var selAfter = computeSelAfterChange(doc, change);
-    addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);
-
-    makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));
-    var rebased = [];
-
-    linkedDocs(doc, function(doc, sharedHist) {
-      if (!sharedHist && indexOf(rebased, doc.history) == -1) {
-        rebaseHist(doc.history, change);
-        rebased.push(doc.history);
-      }
-      makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));
-    });
-  }
-
-  // Revert a change stored in a document's history.
-  function makeChangeFromHistory(doc, type, allowSelectionOnly) {
-    if (doc.cm && doc.cm.state.suppressEdits) return;
-
-    var hist = doc.history, event, selAfter = doc.sel;
-    var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done;
-
-    // Verify that there is a useable event (so that ctrl-z won't
-    // needlessly clear selection events)
-    for (var i = 0; i < source.length; i++) {
-      event = source[i];
-      if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)
-        break;
-    }
-    if (i == source.length) return;
-    hist.lastOrigin = hist.lastSelOrigin = null;
-
-    for (;;) {
-      event = source.pop();
-      if (event.ranges) {
-        pushSelectionToHistory(event, dest);
-        if (allowSelectionOnly && !event.equals(doc.sel)) {
-          setSelection(doc, event, {clearRedo: false});
-          return;
-        }
-        selAfter = event;
-      }
-      else break;
-    }
-
-    // Build up a reverse change object to add to the opposite history
-    // stack (redo when undoing, and vice versa).
-    var antiChanges = [];
-    pushSelectionToHistory(selAfter, dest);
-    dest.push({changes: antiChanges, generation: hist.generation});
-    hist.generation = event.generation || ++hist.maxGeneration;
-
-    var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange");
-
-    for (var i = event.changes.length - 1; i >= 0; --i) {
-      var change = event.changes[i];
-      change.origin = type;
-      if (filter && !filterChange(doc, change, false)) {
-        source.length = 0;
-        return;
-      }
-
-      antiChanges.push(historyChangeFromChange(doc, change));
-
-      var after = i ? computeSelAfterChange(doc, change) : lst(source);
-      makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));
-      if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)});
-      var rebased = [];
-
-      // Propagate to the linked documents
-      linkedDocs(doc, function(doc, sharedHist) {
-        if (!sharedHist && indexOf(rebased, doc.history) == -1) {
-          rebaseHist(doc.history, change);
-          rebased.push(doc.history);
-        }
-        makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));
-      });
-    }
-  }
-
-  // Sub-views need their line numbers shifted when text is added
-  // above or below them in the parent document.
-  function shiftDoc(doc, distance) {
-    if (distance == 0) return;
-    doc.first += distance;
-    doc.sel = new Selection(map(doc.sel.ranges, function(range) {
-      return new Range(Pos(range.anchor.line + distance, range.anchor.ch),
-                       Pos(range.head.line + distance, range.head.ch));
-    }), doc.sel.primIndex);
-    if (doc.cm) {
-      regChange(doc.cm, doc.first, doc.first - distance, distance);
-      for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)
-        regLineChange(doc.cm, l, "gutter");
-    }
-  }
-
-  // More lower-level change function, handling only a single document
-  // (not linked ones).
-  function makeChangeSingleDoc(doc, change, selAfter, spans) {
-    if (doc.cm && !doc.cm.curOp)
-      return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans);
-
-    if (change.to.line < doc.first) {
-      shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));
-      return;
-    }
-    if (change.from.line > doc.lastLine()) return;
-
-    // Clip the change to the size of this doc
-    if (change.from.line < doc.first) {
-      var shift = change.text.length - 1 - (doc.first - change.from.line);
-      shiftDoc(doc, shift);
-      change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),
-                text: [lst(change.text)], origin: change.origin};
-    }
-    var last = doc.lastLine();
-    if (change.to.line > last) {
-      change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),
-                text: [change.text[0]], origin: change.origin};
-    }
-
-    change.removed = getBetween(doc, change.from, change.to);
-
-    if (!selAfter) selAfter = computeSelAfterChange(doc, change);
-    if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans);
-    else updateDoc(doc, change, spans);
-    setSelectionNoUndo(doc, selAfter, sel_dontScroll);
-  }
-
-  // Handle the interaction of a change to a document with the editor
-  // that this document is part of.
-  function makeChangeSingleDocInEditor(cm, change, spans) {
-    var doc = cm.doc, display = cm.display, from = change.from, to = change.to;
-
-    var recomputeMaxLength = false, checkWidthStart = from.line;
-    if (!cm.options.lineWrapping) {
-      checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));
-      doc.iter(checkWidthStart, to.line + 1, function(line) {
-        if (line == display.maxLine) {
-          recomputeMaxLength = true;
-          return true;
-        }
-      });
-    }
-
-    if (doc.sel.contains(change.from, change.to) > -1)
-      signalCursorActivity(cm);
-
-    updateDoc(doc, change, spans, estimateHeight(cm));
-
-    if (!cm.options.lineWrapping) {
-      doc.iter(checkWidthStart, from.line + change.text.length, function(line) {
-        var len = lineLength(line);
-        if (len > display.maxLineLength) {
-          display.maxLine = line;
-          display.maxLineLength = len;
-          display.maxLineChanged = true;
-          recomputeMaxLength = false;
-        }
-      });
-      if (recomputeMaxLength) cm.curOp.updateMaxLine = true;
-    }
-
-    // Adjust frontier, schedule worker
-    doc.frontier = Math.min(doc.frontier, from.line);
-    startWorker(cm, 400);
-
-    var lendiff = change.text.length - (to.line - from.line) - 1;
-    // Remember that these lines changed, for updating the display
-    if (change.full)
-      regChange(cm);
-    else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))
-      regLineChange(cm, from.line, "text");
-    else
-      regChange(cm, from.line, to.line + 1, lendiff);
-
-    var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change");
-    if (changeHandler || changesHandler) {
-      var obj = {
-        from: from, to: to,
-        text: change.text,
-        removed: change.removed,
-        origin: change.origin
-      };
-      if (changeHandler) signalLater(cm, "change", cm, obj);
-      if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj);
-    }
-    cm.display.selForContextMenu = null;
-  }
-
-  function replaceRange(doc, code, from, to, origin) {
-    if (!to) to = from;
-    if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp; }
-    if (typeof code == "string") code = doc.splitLines(code);
-    makeChange(doc, {from: from, to: to, text: code, origin: origin});
-  }
-
-  // SCROLLING THINGS INTO VIEW
-
-  // If an editor sits on the top or bottom of the window, partially
-  // scrolled out of view, this ensures that the cursor is visible.
-  function maybeScrollWindow(cm, coords) {
-    if (signalDOMEvent(cm, "scrollCursorIntoView")) return;
-
-    var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;
-    if (coords.top + box.top < 0) doScroll = true;
-    else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false;
-    if (doScroll != null && !phantom) {
-      var scrollNode = elt("div", "\u200b", null, "position: absolute; top: " +
-                           (coords.top - display.viewOffset - paddingTop(cm.display)) + "px; height: " +
-                           (coords.bottom - coords.top + scrollGap(cm) + display.barHeight) + "px; left: " +
-                           coords.left + "px; width: 2px;");
-      cm.display.lineSpace.appendChild(scrollNode);
-      scrollNode.scrollIntoView(doScroll);
-      cm.display.lineSpace.removeChild(scrollNode);
-    }
-  }
-
-  // Scroll a given position into view (immediately), verifying that
-  // it actually became visible (as line heights are accurately
-  // measured, the position of something may 'drift' during drawing).
-  function scrollPosIntoView(cm, pos, end, margin) {
-    if (margin == null) margin = 0;
-    for (var limit = 0; limit < 5; limit++) {
-      var changed = false, coords = cursorCoords(cm, pos);
-      var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);
-      var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left),
-                                         Math.min(coords.top, endCoords.top) - margin,
-                                         Math.max(coords.left, endCoords.left),
-                                         Math.max(coords.bottom, endCoords.bottom) + margin);
-      var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;
-      if (scrollPos.scrollTop != null) {
-        setScrollTop(cm, scrollPos.scrollTop);
-        if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true;
-      }
-      if (scrollPos.scrollLeft != null) {
-        setScrollLeft(cm, scrollPos.scrollLeft);
-        if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true;
-      }
-      if (!changed) break;
-    }
-    return coords;
-  }
-
-  // Scroll a given set of coordinates into view (immediately).
-  function scrollIntoView(cm, x1, y1, x2, y2) {
-    var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2);
-    if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop);
-    if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft);
-  }
-
-  // Calculate a new scroll position needed to scroll the given
-  // rectangle into view. Returns an object with scrollTop and
-  // scrollLeft properties. When these are undefined, the
-  // vertical/horizontal position does not need to be adjusted.
-  function calculateScrollPos(cm, x1, y1, x2, y2) {
-    var display = cm.display, snapMargin = textHeight(cm.display);
-    if (y1 < 0) y1 = 0;
-    var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;
-    var screen = displayHeight(cm), result = {};
-    if (y2 - y1 > screen) y2 = y1 + screen;
-    var docBottom = cm.doc.height + paddingVert(display);
-    var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin;
-    if (y1 < screentop) {
-      result.scrollTop = atTop ? 0 : y1;
-    } else if (y2 > screentop + screen) {
-      var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen);
-      if (newTop != screentop) result.scrollTop = newTop;
-    }
-
-    var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;
-    var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0);
-    var tooWide = x2 - x1 > screenw;
-    if (tooWide) x2 = x1 + screenw;
-    if (x1 < 10)
-      result.scrollLeft = 0;
-    else if (x1 < screenleft)
-      result.scrollLeft = Math.max(0, x1 - (tooWide ? 0 : 10));
-    else if (x2 > screenw + screenleft - 3)
-      result.scrollLeft = x2 + (tooWide ? 0 : 10) - screenw;
-    return result;
-  }
-
-  // Store a relative adjustment to the scroll position in the current
-  // operation (to be applied when the operation finishes).
-  function addToScrollPos(cm, left, top) {
-    if (left != null || top != null) resolveScrollToPos(cm);
-    if (left != null)
-      cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left;
-    if (top != null)
-      cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;
-  }
-
-  // Make sure that at the end of the operation the current cursor is
-  // shown.
-  function ensureCursorVisible(cm) {
-    resolveScrollToPos(cm);
-    var cur = cm.getCursor(), from = cur, to = cur;
-    if (!cm.options.lineWrapping) {
-      from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur;
-      to = Pos(cur.line, cur.ch + 1);
-    }
-    cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true};
-  }
-
-  // When an operation has its scrollToPos property set, and another
-  // scroll action is applied before the end of the operation, this
-  // 'simulates' scrolling that position into view in a cheap way, so
-  // that the effect of intermediate scroll commands is not ignored.
-  function resolveScrollToPos(cm) {
-    var range = cm.curOp.scrollToPos;
-    if (range) {
-      cm.curOp.scrollToPos = null;
-      var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);
-      var sPos = calculateScrollPos(cm, Math.min(from.left, to.left),
-                                    Math.min(from.top, to.top) - range.margin,
-                                    Math.max(from.right, to.right),
-                                    Math.max(from.bottom, to.bottom) + range.margin);
-      cm.scrollTo(sPos.scrollLeft, sPos.scrollTop);
-    }
-  }
-
-  // API UTILITIES
-
-  // Indent the given line. The how parameter can be "smart",
-  // "add"/null, "subtract", or "prev". When aggressive is false
-  // (typically set to true for forced single-line indents), empty
-  // lines are not indented, and places where the mode returns Pass
-  // are left alone.
-  function indentLine(cm, n, how, aggressive) {
-    var doc = cm.doc, state;
-    if (how == null) how = "add";
-    if (how == "smart") {
-      // Fall back to "prev" when the mode doesn't have an indentation
-      // method.
-      if (!doc.mode.indent) how = "prev";
-      else state = getStateBefore(cm, n);
-    }
-
-    var tabSize = cm.options.tabSize;
-    var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);
-    if (line.stateAfter) line.stateAfter = null;
-    var curSpaceString = line.text.match(/^\s*/)[0], indentation;
-    if (!aggressive && !/\S/.test(line.text)) {
-      indentation = 0;
-      how = "not";
-    } else if (how == "smart") {
-      indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);
-      if (indentation == Pass || indentation > 150) {
-        if (!aggressive) return;
-        how = "prev";
-      }
-    }
-    if (how == "prev") {
-      if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize);
-      else indentation = 0;
-    } else if (how == "add") {
-      indentation = curSpace + cm.options.indentUnit;
-    } else if (how == "subtract") {
-      indentation = curSpace - cm.options.indentUnit;
-    } else if (typeof how == "number") {
-      indentation = curSpace + how;
-    }
-    indentation = Math.max(0, indentation);
-
-    var indentString = "", pos = 0;
-    if (cm.options.indentWithTabs)
-      for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";}
-    if (pos < indentation) indentString += spaceStr(indentation - pos);
-
-    if (indentString != curSpaceString) {
-      replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input");
-      line.stateAfter = null;
-      return true;
-    } else {
-      // Ensure that, if the cursor was in the whitespace at the start
-      // of the line, it is moved to the end of that space.
-      for (var i = 0; i < doc.sel.ranges.length; i++) {
-        var range = doc.sel.ranges[i];
-        if (range.head.line == n && range.head.ch < curSpaceString.length) {
-          var pos = Pos(n, curSpaceString.length);
-          replaceOneSelection(doc, i, new Range(pos, pos));
-          break;
-        }
-      }
-    }
-  }
-
-  // Utility for applying a change to a line by handle or number,
-  // returning the number and optionally registering the line as
-  // changed.
-  function changeLine(doc, handle, changeType, op) {
-    var no = handle, line = handle;
-    if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle));
-    else no = lineNo(handle);
-    if (no == null) return null;
-    if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType);
-    return line;
-  }
-
-  // Helper for deleting text near the selection(s), used to implement
-  // backspace, delete, and similar functionality.
-  function deleteNearSelection(cm, compute) {
-    var ranges = cm.doc.sel.ranges, kill = [];
-    // Build up a set of ranges to kill first, merging overlapping
-    // ranges.
-    for (var i = 0; i < ranges.length; i++) {
-      var toKill = compute(ranges[i]);
-      while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {
-        var replaced = kill.pop();
-        if (cmp(replaced.from, toKill.from) < 0) {
-          toKill.from = replaced.from;
-          break;
-        }
-      }
-      kill.push(toKill);
-    }
-    // Next, remove those actual ranges.
-    runInOp(cm, function() {
-      for (var i = kill.length - 1; i >= 0; i--)
-        replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete");
-      ensureCursorVisible(cm);
-    });
-  }
-
-  // Used for horizontal relative motion. Dir is -1 or 1 (left or
-  // right), unit can be "char", "column" (like char, but doesn't
-  // cross line boundaries), "word" (across next word), or "group" (to
-  // the start of next group of word or non-word-non-whitespace
-  // chars). The visually param controls whether, in right-to-left
-  // text, direction 1 means to move towards the next index in the
-  // string, or towards the character to the right of the current
-  // position. The resulting position will have a hitSide=true
-  // property if it reached the end of the document.
-  function findPosH(doc, pos, dir, unit, visually) {
-    var line = pos.line, ch = pos.ch, origDir = dir;
-    var lineObj = getLine(doc, line);
-    function findNextLine() {
-      var l = line + dir;
-      if (l < doc.first || l >= doc.first + doc.size) return false
-      line = l;
-      return lineObj = getLine(doc, l);
-    }
-    function moveOnce(boundToLine) {
-      var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true);
-      if (next == null) {
-        if (!boundToLine && findNextLine()) {
-          if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj);
-          else ch = dir < 0 ? lineObj.text.length : 0;
-        } else return false
-      } else ch = next;
-      return true;
-    }
-
-    if (unit == "char") {
-      moveOnce()
-    } else if (unit == "column") {
-      moveOnce(true)
-    } else if (unit == "word" || unit == "group") {
-      var sawType = null, group = unit == "group";
-      var helper = doc.cm && doc.cm.getHelper(pos, "wordChars");
-      for (var first = true;; first = false) {
-        if (dir < 0 && !moveOnce(!first)) break;
-        var cur = lineObj.text.charAt(ch) || "\n";
-        var type = isWordChar(cur, helper) ? "w"
-          : group && cur == "\n" ? "n"
-          : !group || /\s/.test(cur) ? null
-          : "p";
-        if (group && !first && !type) type = "s";
-        if (sawType && sawType != type) {
-          if (dir < 0) {dir = 1; moveOnce();}
-          break;
-        }
-
-        if (type) sawType = type;
-        if (dir > 0 && !moveOnce(!first)) break;
-      }
-    }
-    var result = skipAtomic(doc, Pos(line, ch), pos, origDir, true);
-    if (!cmp(pos, result)) result.hitSide = true;
-    return result;
-  }
-
-  // For relative vertical movement. Dir may be -1 or 1. Unit can be
-  // "page" or "line". The resulting position will have a hitSide=true
-  // property if it reached the end of the document.
-  function findPosV(cm, pos, dir, unit) {
-    var doc = cm.doc, x = pos.left, y;
-    if (unit == "page") {
-      var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);
-      y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display));
-    } else if (unit == "line") {
-      y = dir > 0 ? pos.bottom + 3 : pos.top - 3;
-    }
-    for (;;) {
-      var target = coordsChar(cm, x, y);
-      if (!target.outside) break;
-      if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; }
-      y += dir * 5;
-    }
-    return target;
-  }
-
-  // EDITOR METHODS
-
-  // The publicly visible API. Note that methodOp(f) means
-  // 'wrap f in an operation, performed on its `this` parameter'.
-
-  // This is not the complete set of editor methods. Most of the
-  // methods defined on the Doc type are also injected into
-  // CodeMirror.prototype, for backwards compatibility and
-  // convenience.
-
-  CodeMirror.prototype = {
-    constructor: CodeMirror,
-    focus: function(){window.focus(); this.display.input.focus();},
-
-    setOption: function(option, value) {
-      var options = this.options, old = options[option];
-      if (options[option] == value && option != "mode") return;
-      options[option] = value;
-      if (optionHandlers.hasOwnProperty(option))
-        operation(this, optionHandlers[option])(this, value, old);
-    },
-
-    getOption: function(option) {return this.options[option];},
-    getDoc: function() {return this.doc;},
-
-    addKeyMap: function(map, bottom) {
-      this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map));
-    },
-    removeKeyMap: function(map) {
-      var maps = this.state.keyMaps;
-      for (var i = 0; i < maps.length; ++i)
-        if (maps[i] == map || maps[i].name == map) {
-          maps.splice(i, 1);
-          return true;
-        }
-    },
-
-    addOverlay: methodOp(function(spec, options) {
-      var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);
-      if (mode.startState) throw new Error("Overlays may not be stateful.");
-      this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque});
-      this.state.modeGen++;
-      regChange(this);
-    }),
-    removeOverlay: methodOp(function(spec) {
-      var overlays = this.state.overlays;
-      for (var i = 0; i < overlays.length; ++i) {
-        var cur = overlays[i].modeSpec;
-        if (cur == spec || typeof spec == "string" && cur.name == spec) {
-          overlays.splice(i, 1);
-          this.state.modeGen++;
-          regChange(this);
-          return;
-        }
-      }
-    }),
-
-    indentLine: methodOp(function(n, dir, aggressive) {
-      if (typeof dir != "string" && typeof dir != "number") {
-        if (dir == null) dir = this.options.smartIndent ? "smart" : "prev";
-        else dir = dir ? "add" : "subtract";
-      }
-      if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive);
-    }),
-    indentSelection: methodOp(function(how) {
-      var ranges = this.doc.sel.ranges, end = -1;
-      for (var i = 0; i < ranges.length; i++) {
-        var range = ranges[i];
-        if (!range.empty()) {
-          var from = range.from(), to = range.to();
-          var start = Math.max(end, from.line);
-          end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;
-          for (var j = start; j < end; ++j)
-            indentLine(this, j, how);
-          var newRanges = this.doc.sel.ranges;
-          if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)
-            replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll);
-        } else if (range.head.line > end) {
-          indentLine(this, range.head.line, how, true);
-          end = range.head.line;
-          if (i == this.doc.sel.primIndex) ensureCursorVisible(this);
-        }
-      }
-    }),
-
-    // Fetch the parser token for a given character. Useful for hacks
-    // that want to inspect the mode state (say, for completion).
-    getTokenAt: function(pos, precise) {
-      return takeToken(this, pos, precise);
-    },
-
-    getLineTokens: function(line, precise) {
-      return takeToken(this, Pos(line), precise, true);
-    },
-
-    getTokenTypeAt: function(pos) {
-      pos = clipPos(this.doc, pos);
-      var styles = getLineStyles(this, getLine(this.doc, pos.line));
-      var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;
-      var type;
-      if (ch == 0) type = styles[2];
-      else for (;;) {
-        var mid = (before + after) >> 1;
-        if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid;
-        else if (styles[mid * 2 + 1] < ch) before = mid + 1;
-        else { type = styles[mid * 2 + 2]; break; }
-      }
-      var cut = type ? type.indexOf("cm-overlay ") : -1;
-      return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1);
-    },
-
-    getModeAt: function(pos) {
-      var mode = this.doc.mode;
-      if (!mode.innerMode) return mode;
-      return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode;
-    },
-
-    getHelper: function(pos, type) {
-      return this.getHelpers(pos, type)[0];
-    },
-
-    getHelpers: function(pos, type) {
-      var found = [];
-      if (!helpers.hasOwnProperty(type)) return found;
-      var help = helpers[type], mode = this.getModeAt(pos);
-      if (typeof mode[type] == "string") {
-        if (help[mode[type]]) found.push(help[mode[type]]);
-      } else if (mode[type]) {
-        for (var i = 0; i < mode[type].length; i++) {
-          var val = help[mode[type][i]];
-          if (val) found.push(val);
-        }
-      } else if (mode.helperType && help[mode.helperType]) {
-        found.push(help[mode.helperType]);
-      } else if (help[mode.name]) {
-        found.push(help[mode.name]);
-      }
-      for (var i = 0; i < help._global.length; i++) {
-        var cur = help._global[i];
-        if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)
-          found.push(cur.val);
-      }
-      return found;
-    },
-
-    getStateAfter: function(line, precise) {
-      var doc = this.doc;
-      line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);
-      return getStateBefore(this, line + 1, precise);
-    },
-
-    cursorCoords: function(start, mode) {
-      var pos, range = this.doc.sel.primary();
-      if (start == null) pos = range.head;
-      else if (typeof start == "object") pos = clipPos(this.doc, start);
-      else pos = start ? range.from() : range.to();
-      return cursorCoords(this, pos, mode || "page");
-    },
-
-    charCoords: function(pos, mode) {
-      return charCoords(this, clipPos(this.doc, pos), mode || "page");
-    },
-
-    coordsChar: function(coords, mode) {
-      coords = fromCoordSystem(this, coords, mode || "page");
-      return coordsChar(this, coords.left, coords.top);
-    },
-
-    lineAtHeight: function(height, mode) {
-      height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top;
-      return lineAtHeight(this.doc, height + this.display.viewOffset);
-    },
-    heightAtLine: function(line, mode) {
-      var end = false, lineObj;
-      if (typeof line == "number") {
-        var last = this.doc.first + this.doc.size - 1;
-        if (line < this.doc.first) line = this.doc.first;
-        else if (line > last) { line = last; end = true; }
-        lineObj = getLine(this.doc, line);
-      } else {
-        lineObj = line;
-      }
-      return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page").top +
-        (end ? this.doc.height - heightAtLine(lineObj) : 0);
-    },
-
-    defaultTextHeight: function() { return textHeight(this.display); },
-    defaultCharWidth: function() { return charWidth(this.display); },
-
-    setGutterMarker: methodOp(function(line, gutterID, value) {
-      return changeLine(this.doc, line, "gutter", function(line) {
-        var markers = line.gutterMarkers || (line.gutterMarkers = {});
-        markers[gutterID] = value;
-        if (!value && isEmpty(markers)) line.gutterMarkers = null;
-        return true;
-      });
-    }),
-
-    clearGutter: methodOp(function(gutterID) {
-      var cm = this, doc = cm.doc, i = doc.first;
-      doc.iter(function(line) {
-        if (line.gutterMarkers && line.gutterMarkers[gutterID]) {
-          line.gutterMarkers[gutterID] = null;
-          regLineChange(cm, i, "gutter");
-          if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null;
-        }
-        ++i;
-      });
-    }),
-
-    lineInfo: function(line) {
-      if (typeof line == "number") {
-        if (!isLine(this.doc, line)) return null;
-        var n = line;
-        line = getLine(this.doc, line);
-        if (!line) return null;
-      } else {
-        var n = lineNo(line);
-        if (n == null) return null;
-      }
-      return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,
-              textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,
-              widgets: line.widgets};
-    },
-
-    getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo};},
-
-    addWidget: function(pos, node, scroll, vert, horiz) {
-      var display = this.display;
-      pos = cursorCoords(this, clipPos(this.doc, pos));
-      var top = pos.bottom, left = pos.left;
-      node.style.position = "absolute";
-      node.setAttribute("cm-ignore-events", "true");
-      this.display.input.setUneditable(node);
-      display.sizer.appendChild(node);
-      if (vert == "over") {
-        top = pos.top;
-      } else if (vert == "above" || vert == "near") {
-        var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),
-        hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);
-        // Default to positioning above (if specified and possible); otherwise default to positioning below
-        if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)
-          top = pos.top - node.offsetHeight;
-        else if (pos.bottom + node.offsetHeight <= vspace)
-          top = pos.bottom;
-        if (left + node.offsetWidth > hspace)
-          left = hspace - node.offsetWidth;
-      }
-      node.style.top = top + "px";
-      node.style.left = node.style.right = "";
-      if (horiz == "right") {
-        left = display.sizer.clientWidth - node.offsetWidth;
-        node.style.right = "0px";
-      } else {
-        if (horiz == "left") left = 0;
-        else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2;
-        node.style.left = left + "px";
-      }
-      if (scroll)
-        scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight);
-    },
-
-    triggerOnKeyDown: methodOp(onKeyDown),
-    triggerOnKeyPress: methodOp(onKeyPress),
-    triggerOnKeyUp: onKeyUp,
-
-    execCommand: function(cmd) {
-      if (commands.hasOwnProperty(cmd))
-        return commands[cmd].call(null, this);
-    },
-
-    triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),
-
-    findPosH: function(from, amount, unit, visually) {
-      var dir = 1;
-      if (amount < 0) { dir = -1; amount = -amount; }
-      for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) {
-        cur = findPosH(this.doc, cur, dir, unit, visually);
-        if (cur.hitSide) break;
-      }
-      return cur;
-    },
-
-    moveH: methodOp(function(dir, unit) {
-      var cm = this;
-      cm.extendSelectionsBy(function(range) {
-        if (cm.display.shift || cm.doc.extend || range.empty())
-          return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually);
-        else
-          return dir < 0 ? range.from() : range.to();
-      }, sel_move);
-    }),
-
-    deleteH: methodOp(function(dir, unit) {
-      var sel = this.doc.sel, doc = this.doc;
-      if (sel.somethingSelected())
-        doc.replaceSelection("", null, "+delete");
-      else
-        deleteNearSelection(this, function(range) {
-          var other = findPosH(doc, range.head, dir, unit, false);
-          return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other};
-        });
-    }),
-
-    findPosV: function(from, amount, unit, goalColumn) {
-      var dir = 1, x = goalColumn;
-      if (amount < 0) { dir = -1; amount = -amount; }
-      for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) {
-        var coords = cursorCoords(this, cur, "div");
-        if (x == null) x = coords.left;
-        else coords.left = x;
-        cur = findPosV(this, coords, dir, unit);
-        if (cur.hitSide) break;
-      }
-      return cur;
-    },
-
-    moveV: methodOp(function(dir, unit) {
-      var cm = this, doc = this.doc, goals = [];
-      var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected();
-      doc.extendSelectionsBy(function(range) {
-        if (collapse)
-          return dir < 0 ? range.from() : range.to();
-        var headPos = cursorCoords(cm, range.head, "div");
-        if (range.goalColumn != null) headPos.left = range.goalColumn;
-        goals.push(headPos.left);
-        var pos = findPosV(cm, headPos, dir, unit);
-        if (unit == "page" && range == doc.sel.primary())
-          addToScrollPos(cm, null, charCoords(cm, pos, "div").top - headPos.top);
-        return pos;
-      }, sel_move);
-      if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++)
-        doc.sel.ranges[i].goalColumn = goals[i];
-    }),
-
-    // Find the word at the given position (as returned by coordsChar).
-    findWordAt: function(pos) {
-      var doc = this.doc, line = getLine(doc, pos.line).text;
-      var start = pos.ch, end = pos.ch;
-      if (line) {
-        var helper = this.getHelper(pos, "wordChars");
-        if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end;
-        var startChar = line.charAt(start);
-        var check = isWordChar(startChar, helper)
-          ? function(ch) { return isWordChar(ch, helper); }
-          : /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);}
-          : function(ch) {return !/\s/.test(ch) && !isWordChar(ch);};
-        while (start > 0 && check(line.charAt(start - 1))) --start;
-        while (end < line.length && check(line.charAt(end))) ++end;
-      }
-      return new Range(Pos(pos.line, start), Pos(pos.line, end));
-    },
-
-    toggleOverwrite: function(value) {
-      if (value != null && value == this.state.overwrite) return;
-      if (this.state.overwrite = !this.state.overwrite)
-        addClass(this.display.cursorDiv, "CodeMirror-overwrite");
-      else
-        rmClass(this.display.cursorDiv, "CodeMirror-overwrite");
-
-      signal(this, "overwriteToggle", this, this.state.overwrite);
-    },
-    hasFocus: function() { return this.display.input.getField() == activeElt(); },
-    isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit); },
-
-    scrollTo: methodOp(function(x, y) {
-      if (x != null || y != null) resolveScrollToPos(this);
-      if (x != null) this.curOp.scrollLeft = x;
-      if (y != null) this.curOp.scrollTop = y;
-    }),
-    getScrollInfo: function() {
-      var scroller = this.display.scroller;
-      return {left: scroller.scrollLeft, top: scroller.scrollTop,
-              height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,
-              width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,
-              clientHeight: displayHeight(this), clientWidth: displayWidth(this)};
-    },
-
-    scrollIntoView: methodOp(function(range, margin) {
-      if (range == null) {
-        range = {from: this.doc.sel.primary().head, to: null};
-        if (margin == null) margin = this.options.cursorScrollMargin;
-      } else if (typeof range == "number") {
-        range = {from: Pos(range, 0), to: null};
-      } else if (range.from == null) {
-        range = {from: range, to: null};
-      }
-      if (!range.to) range.to = range.from;
-      range.margin = margin || 0;
-
-      if (range.from.line != null) {
-        resolveScrollToPos(this);
-        this.curOp.scrollToPos = range;
-      } else {
-        var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left),
-                                      Math.min(range.from.top, range.to.top) - range.margin,
-                                      Math.max(range.from.right, range.to.right),
-                                      Math.max(range.from.bottom, range.to.bottom) + range.margin);
-        this.scrollTo(sPos.scrollLeft, sPos.scrollTop);
-      }
-    }),
-
-    setSize: methodOp(function(width, height) {
-      var cm = this;
-      function interpret(val) {
-        return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val;
-      }
-      if (width != null) cm.display.wrapper.style.width = interpret(width);
-      if (height != null) cm.display.wrapper.style.height = interpret(height);
-      if (cm.options.lineWrapping) clearLineMeasurementCache(this);
-      var lineNo = cm.display.viewFrom;
-      cm.doc.iter(lineNo, cm.display.viewTo, function(line) {
-        if (line.widgets) for (var i = 0; i < line.widgets.length; i++)
-          if (line.widgets[i].noHScroll) { regLineChange(cm, lineNo, "widget"); break; }
-        ++lineNo;
-      });
-      cm.curOp.forceUpdate = true;
-      signal(cm, "refresh", this);
-    }),
-
-    operation: function(f){return runInOp(this, f);},
-
-    refresh: methodOp(function() {
-      var oldHeight = this.display.cachedTextHeight;
-      regChange(this);
-      this.curOp.forceUpdate = true;
-      clearCaches(this);
-      this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop);
-      updateGutterSpace(this);
-      if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)
-        estimateLineHeights(this);
-      signal(this, "refresh", this);
-    }),
-
-    swapDoc: methodOp(function(doc) {
-      var old = this.doc;
-      old.cm = null;
-      attachDoc(this, doc);
-      clearCaches(this);
-      this.display.input.reset();
-      this.scrollTo(doc.scrollLeft, doc.scrollTop);
-      this.curOp.forceScroll = true;
-      signalLater(this, "swapDoc", this, old);
-      return old;
-    }),
-
-    getInputField: function(){return this.display.input.getField();},
-    getWrapperElement: function(){return this.display.wrapper;},
-    getScrollerElement: function(){return this.display.scroller;},
-    getGutterElement: function(){return this.display.gutters;}
-  };
-  eventMixin(CodeMirror);
-
-  // OPTION DEFAULTS
-
-  // The default configuration options.
-  var defaults = CodeMirror.defaults = {};
-  // Functions to run when options are changed.
-  var optionHandlers = CodeMirror.optionHandlers = {};
-
-  function option(name, deflt, handle, notOnInit) {
-    CodeMirror.defaults[name] = deflt;
-    if (handle) optionHandlers[name] =
-      notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle;
-  }
-
-  // Passed to option handlers when there is no old value.
-  var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}};
-
-  // These two are, on init, called from the constructor because they
-  // have to be initialized before the editor can start at all.
-  option("value", "", function(cm, val) {
-    cm.setValue(val);
-  }, true);
-  option("mode", null, function(cm, val) {
-    cm.doc.modeOption = val;
-    loadMode(cm);
-  }, true);
-
-  option("indentUnit", 2, loadMode, true);
-  option("indentWithTabs", false);
-  option("smartIndent", true);
-  option("tabSize", 4, function(cm) {
-    resetModeState(cm);
-    clearCaches(cm);
-    regChange(cm);
-  }, true);
-  option("lineSeparator", null, function(cm, val) {
-    cm.doc.lineSep = val;
-    if (!val) return;
-    var newBreaks = [], lineNo = cm.doc.first;
-    cm.doc.iter(function(line) {
-      for (var pos = 0;;) {
-        var found = line.text.indexOf(val, pos);
-        if (found == -1) break;
-        pos = found + val.length;
-        newBreaks.push(Pos(lineNo, found));
-      }
-      lineNo++;
-    });
-    for (var i = newBreaks.length - 1; i >= 0; i--)
-      replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length))
-  });
-  option("specialChars", /[\u0000-\u001f\u007f\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g, function(cm, val, old) {
-    cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g");
-    if (old != CodeMirror.Init) cm.refresh();
-  });
-  option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true);
-  option("electricChars", true);
-  option("inputStyle", mobile ? "contenteditable" : "textarea", function() {
-    throw new Error("inputStyle can not (yet) be changed in a running editor"); // FIXME
-  }, true);
-  option("rtlMoveVisually", !windows);
-  option("wholeLineUpdateBefore", true);
-
-  option("theme", "default", function(cm) {
-    themeChanged(cm);
-    guttersChanged(cm);
-  }, true);
-  option("keyMap", "default", function(cm, val, old) {
-    var next = getKeyMap(val);
-    var prev = old != CodeMirror.Init && getKeyMap(old);
-    if (prev && prev.detach) prev.detach(cm, next);
-    if (next.attach) next.attach(cm, prev || null);
-  });
-  option("extraKeys", null);
-
-  option("lineWrapping", false, wrappingChanged, true);
-  option("gutters", [], function(cm) {
-    setGuttersForLineNumbers(cm.options);
-    guttersChanged(cm);
-  }, true);
-  option("fixedGutter", true, function(cm, val) {
-    cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0";
-    cm.refresh();
-  }, true);
-  option("coverGutterNextToScrollbar", false, function(cm) {updateScrollbars(cm);}, true);
-  option("scrollbarStyle", "native", function(cm) {
-    initScrollbars(cm);
-    updateScrollbars(cm);
-    cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);
-    cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);
-  }, true);
-  option("lineNumbers", false, function(cm) {
-    setGuttersForLineNumbers(cm.options);
-    guttersChanged(cm);
-  }, true);
-  option("firstLineNumber", 1, guttersChanged, true);
-  option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true);
-  option("showCursorWhenSelecting", false, updateSelection, true);
-
-  option("resetSelectionOnContextMenu", true);
-  option("lineWiseCopyCut", true);
-
-  option("readOnly", false, function(cm, val) {
-    if (val == "nocursor") {
-      onBlur(cm);
-      cm.display.input.blur();
-      cm.display.disabled = true;
-    } else {
-      cm.display.disabled = false;
-    }
-    cm.display.input.readOnlyChanged(val)
-  });
-  option("disableInput", false, function(cm, val) {if (!val) cm.display.input.reset();}, true);
-  option("dragDrop", true, dragDropChanged);
-  option("allowDropFileTypes", null);
-
-  option("cursorBlinkRate", 530);
-  option("cursorScrollMargin", 0);
-  option("cursorHeight", 1, updateSelection, true);
-  option("singleCursorHeightPerLine", true, updateSelection, true);
-  option("workTime", 100);
-  option("workDelay", 100);
-  option("flattenSpans", true, resetModeState, true);
-  option("addModeClass", false, resetModeState, true);
-  option("pollInterval", 100);
-  option("undoDepth", 200, function(cm, val){cm.doc.history.undoDepth = val;});
-  option("historyEventDelay", 1250);
-  option("viewportMargin", 10, function(cm){cm.refresh();}, true);
-  option("maxHighlightLength", 10000, resetModeState, true);
-  option("moveInputWithCursor", true, function(cm, val) {
-    if (!val) cm.display.input.resetPosition();
-  });
-
-  option("tabindex", null, function(cm, val) {
-    cm.display.input.getField().tabIndex = val || "";
-  });
-  option("autofocus", null);
-
-  // MODE DEFINITION AND QUERYING
-
-  // Known modes, by name and by MIME
-  var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {};
-
-  // Extra arguments are stored as the mode's dependencies, which is
-  // used by (legacy) mechanisms like loadmode.js to automatically
-  // load a mode. (Preferred mechanism is the require/define calls.)
-  CodeMirror.defineMode = function(name, mode) {
-    if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name;
-    if (arguments.length > 2)
-      mode.dependencies = Array.prototype.slice.call(arguments, 2);
-    modes[name] = mode;
-  };
-
-  CodeMirror.defineMIME = function(mime, spec) {
-    mimeModes[mime] = spec;
-  };
-
-  // Given a MIME type, a {name, ...options} config object, or a name
-  // string, return a mode config object.
-  CodeMirror.resolveMode = function(spec) {
-    if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
-      spec = mimeModes[spec];
-    } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
-      var found = mimeModes[spec.name];
-      if (typeof found == "string") found = {name: found};
-      spec = createObj(found, spec);
-      spec.name = found.name;
-    } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) {
-      return CodeMirror.resolveMode("application/xml");
-    }
-    if (typeof spec == "string") return {name: spec};
-    else return spec || {name: "null"};
-  };
-
-  // Given a mode spec (anything that resolveMode accepts), find and
-  // initialize an actual mode object.
-  CodeMirror.getMode = function(options, spec) {
-    var spec = CodeMirror.resolveMode(spec);
-    var mfactory = modes[spec.name];
-    if (!mfactory) return CodeMirror.getMode(options, "text/plain");
-    var modeObj = mfactory(options, spec);
-    if (modeExtensions.hasOwnProperty(spec.name)) {
-      var exts = modeExtensions[spec.name];
-      for (var prop in exts) {
-        if (!exts.hasOwnProperty(prop)) continue;
-        if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop];
-        modeObj[prop] = exts[prop];
-      }
-    }
-    modeObj.name = spec.name;
-    if (spec.helperType) modeObj.helperType = spec.helperType;
-    if (spec.modeProps) for (var prop in spec.modeProps)
-      modeObj[prop] = spec.modeProps[prop];
-
-    return modeObj;
-  };
-
-  // Minimal default mode.
-  CodeMirror.defineMode("null", function() {
-    return {token: function(stream) {stream.skipToEnd();}};
-  });
-  CodeMirror.defineMIME("text/plain", "null");
-
-  // This can be used to attach properties to mode objects from
-  // outside the actual mode definition.
-  var modeExtensions = CodeMirror.modeExtensions = {};
-  CodeMirror.extendMode = function(mode, properties) {
-    var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});
-    copyObj(properties, exts);
-  };
-
-  // EXTENSIONS
-
-  CodeMirror.defineExtension = function(name, func) {
-    CodeMirror.prototype[name] = func;
-  };
-  CodeMirror.defineDocExtension = function(name, func) {
-    Doc.prototype[name] = func;
-  };
-  CodeMirror.defineOption = option;
-
-  var initHooks = [];
-  CodeMirror.defineInitHook = function(f) {initHooks.push(f);};
-
-  var helpers = CodeMirror.helpers = {};
-  CodeMirror.registerHelper = function(type, name, value) {
-    if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []};
-    helpers[type][name] = value;
-  };
-  CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {
-    CodeMirror.registerHelper(type, name, value);
-    helpers[type]._global.push({pred: predicate, val: value});
-  };
-
-  // MODE STATE HANDLING
-
-  // Utility functions for working with state. Exported because nested
-  // modes need to do this for their inner modes.
-
-  var copyState = CodeMirror.copyState = function(mode, state) {
-    if (state === true) return state;
-    if (mode.copyState) return mode.copyState(state);
-    var nstate = {};
-    for (var n in state) {
-      var val = state[n];
-      if (val instanceof Array) val = val.concat([]);
-      nstate[n] = val;
-    }
-    return nstate;
-  };
-
-  var startState = CodeMirror.startState = function(mode, a1, a2) {
-    return mode.startState ? mode.startState(a1, a2) : true;
-  };
-
-  // Given a mode and a state (for that mode), find the inner mode and
-  // state at the position that the state refers to.
-  CodeMirror.innerMode = function(mode, state) {
-    while (mode.innerMode) {
-      var info = mode.innerMode(state);
-      if (!info || info.mode == mode) break;
-      state = info.state;
-      mode = info.mode;
-    }
-    return info || {mode: mode, state: state};
-  };
-
-  // STANDARD COMMANDS
-
-  // Commands are parameter-less actions that can be performed on an
-  // editor, mostly used for keybindings.
-  var commands = CodeMirror.commands = {
-    selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);},
-    singleSelection: function(cm) {
-      cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll);
-    },
-    killLine: function(cm) {
-      deleteNearSelection(cm, function(range) {
-        if (range.empty()) {
-          var len = getLine(cm.doc, range.head.line).text.length;
-          if (range.head.ch == len && range.head.line < cm.lastLine())
-            return {from: range.head, to: Pos(range.head.line + 1, 0)};
-          else
-            return {from: range.head, to: Pos(range.head.line, len)};
-        } else {
-          return {from: range.from(), to: range.to()};
-        }
-      });
-    },
-    deleteLine: function(cm) {
-      deleteNearSelection(cm, function(range) {
-        return {from: Pos(range.from().line, 0),
-                to: clipPos(cm.doc, Pos(range.to().line + 1, 0))};
-      });
-    },
-    delLineLeft: function(cm) {
-      deleteNearSelection(cm, function(range) {
-        return {from: Pos(range.from().line, 0), to: range.from()};
-      });
-    },
-    delWrappedLineLeft: function(cm) {
-      deleteNearSelection(cm, function(range) {
-        var top = cm.charCoords(range.head, "div").top + 5;
-        var leftPos = cm.coordsChar({left: 0, top: top}, "div");
-        return {from: leftPos, to: range.from()};
-      });
-    },
-    delWrappedLineRight: function(cm) {
-      deleteNearSelection(cm, function(range) {
-        var top = cm.charCoords(range.head, "div").top + 5;
-        var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div");
-        return {from: range.from(), to: rightPos };
-      });
-    },
-    undo: function(cm) {cm.undo();},
-    redo: function(cm) {cm.redo();},
-    undoSelection: function(cm) {cm.undoSelection();},
-    redoSelection: function(cm) {cm.redoSelection();},
-    goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));},
-    goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));},
-    goLineStart: function(cm) {
-      cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); },
-                            {origin: "+move", bias: 1});
-    },
-    goLineStartSmart: function(cm) {
-      cm.extendSelectionsBy(function(range) {
-        return lineStartSmart(cm, range.head);
-      }, {origin: "+move", bias: 1});
-    },
-    goLineEnd: function(cm) {
-      cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); },
-                            {origin: "+move", bias: -1});
-    },
-    goLineRight: function(cm) {
-      cm.extendSelectionsBy(function(range) {
-        var top = cm.charCoords(range.head, "div").top + 5;
-        return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div");
-      }, sel_move);
-    },
-    goLineLeft: function(cm) {
-      cm.extendSelectionsBy(function(range) {
-        var top = cm.charCoords(range.head, "div").top + 5;
-        return cm.coordsChar({left: 0, top: top}, "div");
-      }, sel_move);
-    },
-    goLineLeftSmart: function(cm) {
-      cm.extendSelectionsBy(function(range) {
-        var top = cm.charCoords(range.head, "div").top + 5;
-        var pos = cm.coordsChar({left: 0, top: top}, "div");
-        if (pos.ch < cm.getLine(pos.line).search(/\S/)) return lineStartSmart(cm, range.head);
-        return pos;
-      }, sel_move);
-    },
-    goLineUp: function(cm) {cm.moveV(-1, "line");},
-    goLineDown: function(cm) {cm.moveV(1, "line");},
-    goPageUp: function(cm) {cm.moveV(-1, "page");},
-    goPageDown: function(cm) {cm.moveV(1, "page");},
-    goCharLeft: function(cm) {cm.moveH(-1, "char");},
-    goCharRight: function(cm) {cm.moveH(1, "char");},
-    goColumnLeft: function(cm) {cm.moveH(-1, "column");},
-    goColumnRight: function(cm) {cm.moveH(1, "column");},
-    goWordLeft: function(cm) {cm.moveH(-1, "word");},
-    goGroupRight: function(cm) {cm.moveH(1, "group");},
-    goGroupLeft: function(cm) {cm.moveH(-1, "group");},
-    goWordRight: function(cm) {cm.moveH(1, "word");},
-    delCharBefore: function(cm) {cm.deleteH(-1, "char");},
-    delCharAfter: function(cm) {cm.deleteH(1, "char");},
-    delWordBefore: function(cm) {cm.deleteH(-1, "word");},
-    delWordAfter: function(cm) {cm.deleteH(1, "word");},
-    delGroupBefore: function(cm) {cm.deleteH(-1, "group");},
-    delGroupAfter: function(cm) {cm.deleteH(1, "group");},
-    indentAuto: function(cm) {cm.indentSelection("smart");},
-    indentMore: function(cm) {cm.indentSelection("add");},
-    indentLess: function(cm) {cm.indentSelection("subtract");},
-    insertTab: function(cm) {cm.replaceSelection("\t");},
-    insertSoftTab: function(cm) {
-      var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;
-      for (var i = 0; i < ranges.length; i++) {
-        var pos = ranges[i].from();
-        var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);
-        spaces.push(spaceStr(tabSize - col % tabSize));
-      }
-      cm.replaceSelections(spaces);
-    },
-    defaultTab: function(cm) {
-      if (cm.somethingSelected()) cm.indentSelection("add");
-      else cm.execCommand("insertTab");
-    },
-    transposeChars: function(cm) {
-      runInOp(cm, function() {
-        var ranges = cm.listSelections(), newSel = [];
-        for (var i = 0; i < ranges.length; i++) {
-          var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;
-          if (line) {
-            if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1);
-            if (cur.ch > 0) {
-              cur = new Pos(cur.line, cur.ch + 1);
-              cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),
-                              Pos(cur.line, cur.ch - 2), cur, "+transpose");
-            } else if (cur.line > cm.doc.first) {
-              var prev = getLine(cm.doc, cur.line - 1).text;
-              if (prev)
-                cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +
-                                prev.charAt(prev.length - 1),
-                                Pos(cur.line - 1, prev.length - 1), Pos(cur.line, 1), "+transpose");
-            }
-          }
-          newSel.push(new Range(cur, cur));
-        }
-        cm.setSelections(newSel);
-      });
-    },
-    newlineAndIndent: function(cm) {
-      runInOp(cm, function() {
-        var len = cm.listSelections().length;
-        for (var i = 0; i < len; i++) {
-          var range = cm.listSelections()[i];
-          cm.replaceRange(cm.doc.lineSeparator(), range.anchor, range.head, "+input");
-          cm.indentLine(range.from().line + 1, null, true);
-        }
-        ensureCursorVisible(cm);
-      });
-    },
-    openLine: function(cm) {cm.replaceSelection("\n", "start")},
-    toggleOverwrite: function(cm) {cm.toggleOverwrite();}
-  };
-
-
-  // STANDARD KEYMAPS
-
-  var keyMap = CodeMirror.keyMap = {};
-
-  keyMap.basic = {
-    "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown",
-    "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown",
-    "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore",
-    "Tab": "defaultTab", "Shift-Tab": "indentAuto",
-    "Enter": "newlineAndIndent", "Insert": "toggleOverwrite",
-    "Esc": "singleSelection"
-  };
-  // Note that the save and find-related commands aren't defined by
-  // default. User code or addons can define them. Unknown commands
-  // are simply ignored.
-  keyMap.pcDefault = {
-    "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo",
-    "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown",
-    "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd",
-    "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find",
-    "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll",
-    "Ctrl-[": "indentLess", "Ctrl-]": "indentMore",
-    "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection",
-    fallthrough: "basic"
-  };
-  // Very basic readline/emacs-style bindings, which are standard on Mac.
-  keyMap.emacsy = {
-    "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
-    "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd",
-    "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore",
-    "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars",
-    "Ctrl-O": "openLine"
-  };
-  keyMap.macDefault = {
-    "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo",
-    "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft",
-    "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore",
-    "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find",
-    "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll",
-    "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight",
-    "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd",
-    fallthrough: ["basic", "emacsy"]
-  };
-  keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault;
-
-  // KEYMAP DISPATCH
-
-  function normalizeKeyName(name) {
-    var parts = name.split(/-(?!$)/), name = parts[parts.length - 1];
-    var alt, ctrl, shift, cmd;
-    for (var i = 0; i < parts.length - 1; i++) {
-      var mod = parts[i];
-      if (/^(cmd|meta|m)$/i.test(mod)) cmd = true;
-      else if (/^a(lt)?$/i.test(mod)) alt = true;
-      else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true;
-      else if (/^s(hift)$/i.test(mod)) shift = true;
-      else throw new Error("Unrecognized modifier name: " + mod);
-    }
-    if (alt) name = "Alt-" + name;
-    if (ctrl) name = "Ctrl-" + name;
-    if (cmd) name = "Cmd-" + name;
-    if (shift) name = "Shift-" + name;
-    return name;
-  }
-
-  // This is a kludge to keep keymaps mostly working as raw objects
-  // (backwards compatibility) while at the same time support features
-  // like normalization and multi-stroke key bindings. It compiles a
-  // new normalized keymap, and then updates the old object to reflect
-  // this.
-  CodeMirror.normalizeKeyMap = function(keymap) {
-    var copy = {};
-    for (var keyname in keymap) if (keymap.hasOwnProperty(keyname)) {
-      var value = keymap[keyname];
-      if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) continue;
-      if (value == "...") { delete keymap[keyname]; continue; }
-
-      var keys = map(keyname.split(" "), normalizeKeyName);
-      for (var i = 0; i < keys.length; i++) {
-        var val, name;
-        if (i == keys.length - 1) {
-          name = keys.join(" ");
-          val = value;
-        } else {
-          name = keys.slice(0, i + 1).join(" ");
-          val = "...";
-        }
-        var prev = copy[name];
-        if (!prev) copy[name] = val;
-        else if (prev != val) throw new Error("Inconsistent bindings for " + name);
-      }
-      delete keymap[keyname];
-    }
-    for (var prop in copy) keymap[prop] = copy[prop];
-    return keymap;
-  };
-
-  var lookupKey = CodeMirror.lookupKey = function(key, map, handle, context) {
-    map = getKeyMap(map);
-    var found = map.call ? map.call(key, context) : map[key];
-    if (found === false) return "nothing";
-    if (found === "...") return "multi";
-    if (found != null && handle(found)) return "handled";
-
-    if (map.fallthrough) {
-      if (Object.prototype.toString.call(map.fallthrough) != "[object Array]")
-        return lookupKey(key, map.fallthrough, handle, context);
-      for (var i = 0; i < map.fallthrough.length; i++) {
-        var result = lookupKey(key, map.fallthrough[i], handle, context);
-        if (result) return result;
-      }
-    }
-  };
-
-  // Modifier key presses don't count as 'real' key presses for the
-  // purpose of keymap fallthrough.
-  var isModifierKey = CodeMirror.isModifierKey = function(value) {
-    var name = typeof value == "string" ? value : keyNames[value.keyCode];
-    return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod";
-  };
-
-  // Look up the name of a key as indicated by an event object.
-  var keyName = CodeMirror.keyName = function(event, noShift) {
-    if (presto && event.keyCode == 34 && event["char"]) return false;
-    var base = keyNames[event.keyCode], name = base;
-    if (name == null || event.altGraphKey) return false;
-    if (event.altKey && base != "Alt") name = "Alt-" + name;
-    if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") name = "Ctrl-" + name;
-    if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") name = "Cmd-" + name;
-    if (!noShift && event.shiftKey && base != "Shift") name = "Shift-" + name;
-    return name;
-  };
-
-  function getKeyMap(val) {
-    return typeof val == "string" ? keyMap[val] : val;
-  }
-
-  // FROMTEXTAREA
-
-  CodeMirror.fromTextArea = function(textarea, options) {
-    options = options ? copyObj(options) : {};
-    options.value = textarea.value;
-    if (!options.tabindex && textarea.tabIndex)
-      options.tabindex = textarea.tabIndex;
-    if (!options.placeholder && textarea.placeholder)
-      options.placeholder = textarea.placeholder;
-    // Set autofocus to true if this textarea is focused, or if it has
-    // autofocus and no other element is focused.
-    if (options.autofocus == null) {
-      var hasFocus = activeElt();
-      options.autofocus = hasFocus == textarea ||
-        textarea.getAttribute("autofocus") != null && hasFocus == document.body;
-    }
-
-    function save() {textarea.value = cm.getValue();}
-    if (textarea.form) {
-      on(textarea.form, "submit", save);
-      // Deplorable hack to make the submit method do the right thing.
-      if (!options.leaveSubmitMethodAlone) {
-        var form = textarea.form, realSubmit = form.submit;
-        try {
-          var wrappedSubmit = form.submit = function() {
-            save();
-            form.submit = realSubmit;
-            form.submit();
-            form.submit = wrappedSubmit;
-          };
-        } catch(e) {}
-      }
-    }
-
-    options.finishInit = function(cm) {
-      cm.save = save;
-      cm.getTextArea = function() { return textarea; };
-      cm.toTextArea = function() {
-        cm.toTextArea = isNaN; // Prevent this from being ran twice
-        save();
-        textarea.parentNode.removeChild(cm.getWrapperElement());
-        textarea.style.display = "";
-        if (textarea.form) {
-          off(textarea.form, "submit", save);
-          if (typeof textarea.form.submit == "function")
-            textarea.form.submit = realSubmit;
-        }
-      };
-    };
-
-    textarea.style.display = "none";
-    var cm = CodeMirror(function(node) {
-      textarea.parentNode.insertBefore(node, textarea.nextSibling);
-    }, options);
-    return cm;
-  };
-
-  // STRING STREAM
-
-  // Fed to the mode parsers, provides helper functions to make
-  // parsers more succinct.
-
-  var StringStream = CodeMirror.StringStream = function(string, tabSize) {
-    this.pos = this.start = 0;
-    this.string = string;
-    this.tabSize = tabSize || 8;
-    this.lastColumnPos = this.lastColumnValue = 0;
-    this.lineStart = 0;
-  };
-
-  StringStream.prototype = {
-    eol: function() {return this.pos >= this.string.length;},
-    sol: function() {return this.pos == this.lineStart;},
-    peek: function() {return this.string.charAt(this.pos) || undefined;},
-    next: function() {
-      if (this.pos < this.string.length)
-        return this.string.charAt(this.pos++);
-    },
-    eat: function(match) {
-      var ch = this.string.charAt(this.pos);
-      if (typeof match == "string") var ok = ch == match;
-      else var ok = ch && (match.test ? match.test(ch) : match(ch));
-      if (ok) {++this.pos; return ch;}
-    },
-    eatWhile: function(match) {
-      var start = this.pos;
-      while (this.eat(match)){}
-      return this.pos > start;
-    },
-    eatSpace: function() {
-      var start = this.pos;
-      while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;
-      return this.pos > start;
-    },
-    skipToEnd: function() {this.pos = this.string.length;},
-    skipTo: function(ch) {
-      var found = this.string.indexOf(ch, this.pos);
-      if (found > -1) {this.pos = found; return true;}
-    },
-    backUp: function(n) {this.pos -= n;},
-    column: function() {
-      if (this.lastColumnPos < this.start) {
-        this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);
-        this.lastColumnPos = this.start;
-      }
-      return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);
-    },
-    indentation: function() {
-      return countColumn(this.string, null, this.tabSize) -
-        (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);
-    },
-    match: function(pattern, consume, caseInsensitive) {
-      if (typeof pattern == "string") {
-        var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};
-        var substr = this.string.substr(this.pos, pattern.length);
-        if (cased(substr) == cased(pattern)) {
-          if (consume !== false) this.pos += pattern.length;
-          return true;
-        }
-      } else {
-        var match = this.string.slice(this.pos).match(pattern);
-        if (match && match.index > 0) return null;
-        if (match && consume !== false) this.pos += match[0].length;
-        return match;
-      }
-    },
-    current: function(){return this.string.slice(this.start, this.pos);},
-    hideFirstChars: function(n, inner) {
-      this.lineStart += n;
-      try { return inner(); }
-      finally { this.lineStart -= n; }
-    }
-  };
-
-  // TEXTMARKERS
-
-  // Created with markText and setBookmark methods. A TextMarker is a
-  // handle that can be used to clear or find a marked position in the
-  // document. Line objects hold arrays (markedSpans) containing
-  // {from, to, marker} object pointing to such marker objects, and
-  // indicating that such a marker is present on that line. Multiple
-  // lines may point to the same marker when it spans across lines.
-  // The spans will have null for their from/to properties when the
-  // marker continues beyond the start/end of the line. Markers have
-  // links back to the lines they currently touch.
-
-  var nextMarkerId = 0;
-
-  var TextMarker = CodeMirror.TextMarker = function(doc, type) {
-    this.lines = [];
-    this.type = type;
-    this.doc = doc;
-    this.id = ++nextMarkerId;
-  };
-  eventMixin(TextMarker);
-
-  // Clear the marker.
-  TextMarker.prototype.clear = function() {
-    if (this.explicitlyCleared) return;
-    var cm = this.doc.cm, withOp = cm && !cm.curOp;
-    if (withOp) startOperation(cm);
-    if (hasHandler(this, "clear")) {
-      var found = this.find();
-      if (found) signalLater(this, "clear", found.from, found.to);
-    }
-    var min = null, max = null;
-    for (var i = 0; i < this.lines.length; ++i) {
-      var line = this.lines[i];
-      var span = getMarkedSpanFor(line.markedSpans, this);
-      if (cm && !this.collapsed) regLineChange(cm, lineNo(line), "text");
-      else if (cm) {
-        if (span.to != null) max = lineNo(line);
-        if (span.from != null) min = lineNo(line);
-      }
-      line.markedSpans = removeMarkedSpan(line.markedSpans, span);
-      if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)
-        updateLineHeight(line, textHeight(cm.display));
-    }
-    if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) {
-      var visual = visualLine(this.lines[i]), len = lineLength(visual);
-      if (len > cm.display.maxLineLength) {
-        cm.display.maxLine = visual;
-        cm.display.maxLineLength = len;
-        cm.display.maxLineChanged = true;
-      }
-    }
-
-    if (min != null && cm && this.collapsed) regChange(cm, min, max + 1);
-    this.lines.length = 0;
-    this.explicitlyCleared = true;
-    if (this.atomic && this.doc.cantEdit) {
-      this.doc.cantEdit = false;
-      if (cm) reCheckSelection(cm.doc);
-    }
-    if (cm) signalLater(cm, "markerCleared", cm, this);
-    if (withOp) endOperation(cm);
-    if (this.parent) this.parent.clear();
-  };
-
-  // Find the position of the marker in the document. Returns a {from,
-  // to} object by default. Side can be passed to get a specific side
-  // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the
-  // Pos objects returned contain a line object, rather than a line
-  // number (used to prevent looking up the same line twice).
-  TextMarker.prototype.find = function(side, lineObj) {
-    if (side == null && this.type == "bookmark") side = 1;
-    var from, to;
-    for (var i = 0; i < this.lines.length; ++i) {
-      var line = this.lines[i];
-      var span = getMarkedSpanFor(line.markedSpans, this);
-      if (span.from != null) {
-        from = Pos(lineObj ? line : lineNo(line), span.from);
-        if (side == -1) return from;
-      }
-      if (span.to != null) {
-        to = Pos(lineObj ? line : lineNo(line), span.to);
-        if (side == 1) return to;
-      }
-    }
-    return from && {from: from, to: to};
-  };
-
-  // Signals that the marker's widget changed, and surrounding layout
-  // should be recomputed.
-  TextMarker.prototype.changed = function() {
-    var pos = this.find(-1, true), widget = this, cm = this.doc.cm;
-    if (!pos || !cm) return;
-    runInOp(cm, function() {
-      var line = pos.line, lineN = lineNo(pos.line);
-      var view = findViewForLine(cm, lineN);
-      if (view) {
-        clearLineMeasurementCacheFor(view);
-        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;
-      }
-      cm.curOp.updateMaxLine = true;
-      if (!lineIsHidden(widget.doc, line) && widget.height != null) {
-        var oldHeight = widget.height;
-        widget.height = null;
-        var dHeight = widgetHeight(widget) - oldHeight;
-        if (dHeight)
-          updateLineHeight(line, line.height + dHeight);
-      }
-    });
-  };
-
-  TextMarker.prototype.attachLine = function(line) {
-    if (!this.lines.length && this.doc.cm) {
-      var op = this.doc.cm.curOp;
-      if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)
-        (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this);
-    }
-    this.lines.push(line);
-  };
-  TextMarker.prototype.detachLine = function(line) {
-    this.lines.splice(indexOf(this.lines, line), 1);
-    if (!this.lines.length && this.doc.cm) {
-      var op = this.doc.cm.curOp;
-      (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);
-    }
-  };
-
-  // Collapsed markers have unique ids, in order to be able to order
-  // them, which is needed for uniquely determining an outer marker
-  // when they overlap (they may nest, but not partially overlap).
-  var nextMarkerId = 0;
-
-  // Create a marker, wire it up to the right lines, and
-  function markText(doc, from, to, options, type) {
-    // Shared markers (across linked documents) are handled separately
-    // (markTextShared will call out to this again, once per
-    // document).
-    if (options && options.shared) return markTextShared(doc, from, to, options, type);
-    // Ensure we are in an operation.
-    if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type);
-
-    var marker = new TextMarker(doc, type), diff = cmp(from, to);
-    if (options) copyObj(options, marker, false);
-    // Don't connect empty markers unless clearWhenEmpty is false
-    if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)
-      return marker;
-    if (marker.replacedWith) {
-      // Showing up as a widget implies collapsed (widget replaces text)
-      marker.collapsed = true;
-      marker.widgetNode = elt("span", [marker.replacedWith], "CodeMirror-widget");
-      if (!options.handleMouseEvents) marker.widgetNode.setAttribute("cm-ignore-events", "true");
-      if (options.insertLeft) marker.widgetNode.insertLeft = true;
-    }
-    if (marker.collapsed) {
-      if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||
-          from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))
-        throw new Error("Inserting collapsed marker partially overlapping an existing one");
-      sawCollapsedSpans = true;
-    }
-
-    if (marker.addToHistory)
-      addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN);
-
-    var curLine = from.line, cm = doc.cm, updateMaxLine;
-    doc.iter(curLine, to.line + 1, function(line) {
-      if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)
-        updateMaxLine = true;
-      if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0);
-      addMarkedSpan(line, new MarkedSpan(marker,
-                                         curLine == from.line ? from.ch : null,
-                                         curLine == to.line ? to.ch : null));
-      ++curLine;
-    });
-    // lineIsHidden depends on the presence of the spans, so needs a second pass
-    if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) {
-      if (lineIsHidden(doc, line)) updateLineHeight(line, 0);
-    });
-
-    if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); });
-
-    if (marker.readOnly) {
-      sawReadOnlySpans = true;
-      if (doc.history.done.length || doc.history.undone.length)
-        doc.clearHistory();
-    }
-    if (marker.collapsed) {
-      marker.id = ++nextMarkerId;
-      marker.atomic = true;
-    }
-    if (cm) {
-      // Sync editor state
-      if (updateMaxLine) cm.curOp.updateMaxLine = true;
-      if (marker.collapsed)
-        regChange(cm, from.line, to.line + 1);
-      else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css)
-        for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, "text");
-      if (marker.atomic) reCheckSelection(cm.doc);
-      signalLater(cm, "markerAdded", cm, marker);
-    }
-    return marker;
-  }
-
-  // SHARED TEXTMARKERS
-
-  // A shared marker spans multiple linked documents. It is
-  // implemented as a meta-marker-object controlling multiple normal
-  // markers.
-  var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) {
-    this.markers = markers;
-    this.primary = primary;
-    for (var i = 0; i < markers.length; ++i)
-      markers[i].parent = this;
-  };
-  eventMixin(SharedTextMarker);
-
-  SharedTextMarker.prototype.clear = function() {
-    if (this.explicitlyCleared) return;
-    this.explicitlyCleared = true;
-    for (var i = 0; i < this.markers.length; ++i)
-      this.markers[i].clear();
-    signalLater(this, "clear");
-  };
-  SharedTextMarker.prototype.find = function(side, lineObj) {
-    return this.primary.find(side, lineObj);
-  };
-
-  function markTextShared(doc, from, to, options, type) {
-    options = copyObj(options);
-    options.shared = false;
-    var markers = [markText(doc, from, to, options, type)], primary = markers[0];
-    var widget = options.widgetNode;
-    linkedDocs(doc, function(doc) {
-      if (widget) options.widgetNode = widget.cloneNode(true);
-      markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));
-      for (var i = 0; i < doc.linked.length; ++i)
-        if (doc.linked[i].isParent) return;
-      primary = lst(markers);
-    });
-    return new SharedTextMarker(markers, primary);
-  }
-
-  function findSharedMarkers(doc) {
-    return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())),
-                         function(m) { return m.parent; });
-  }
-
-  function copySharedMarkers(doc, markers) {
-    for (var i = 0; i < markers.length; i++) {
-      var marker = markers[i], pos = marker.find();
-      var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);
-      if (cmp(mFrom, mTo)) {
-        var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);
-        marker.markers.push(subMark);
-        subMark.parent = marker;
-      }
-    }
-  }
-
-  function detachSharedMarkers(markers) {
-    for (var i = 0; i < markers.length; i++) {
-      var marker = markers[i], linked = [marker.primary.doc];;
-      linkedDocs(marker.primary.doc, function(d) { linked.push(d); });
-      for (var j = 0; j < marker.markers.length; j++) {
-        var subMarker = marker.markers[j];
-        if (indexOf(linked, subMarker.doc) == -1) {
-          subMarker.parent = null;
-          marker.markers.splice(j--, 1);
-        }
-      }
-    }
-  }
-
-  // TEXTMARKER SPANS
-
-  function MarkedSpan(marker, from, to) {
-    this.marker = marker;
-    this.from = from; this.to = to;
-  }
-
-  // Search an array of spans for a span matching the given marker.
-  function getMarkedSpanFor(spans, marker) {
-    if (spans) for (var i = 0; i < spans.length; ++i) {
-      var span = spans[i];
-      if (span.marker == marker) return span;
-    }
-  }
-  // Remove a span from an array, returning undefined if no spans are
-  // left (we don't store arrays for lines without spans).
-  function removeMarkedSpan(spans, span) {
-    for (var r, i = 0; i < spans.length; ++i)
-      if (spans[i] != span) (r || (r = [])).push(spans[i]);
-    return r;
-  }
-  // Add a span to a line.
-  function addMarkedSpan(line, span) {
-    line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];
-    span.marker.attachLine(line);
-  }
-
-  // Used for the algorithm that adjusts markers for a change in the
-  // document. These functions cut an array of spans at a given
-  // character position, returning an array of remaining chunks (or
-  // undefined if nothing remains).
-  function markedSpansBefore(old, startCh, isInsert) {
-    if (old) for (var i = 0, nw; i < old.length; ++i) {
-      var span = old[i], marker = span.marker;
-      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);
-      if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) {
-        var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);
-        (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));
-      }
-    }
-    return nw;
-  }
-  function markedSpansAfter(old, endCh, isInsert) {
-    if (old) for (var i = 0, nw; i < old.length; ++i) {
-      var span = old[i], marker = span.marker;
-      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);
-      if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) {
-        var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);
-        (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,
-                                              span.to == null ? null : span.to - endCh));
-      }
-    }
-    return nw;
-  }
-
-  // Given a change object, compute the new set of marker spans that
-  // cover the line in which the change took place. Removes spans
-  // entirely within the change, reconnects spans belonging to the
-  // same marker that appear on both sides of the change, and cuts off
-  // spans partially within the change. Returns an array of span
-  // arrays with one element for each line in (after) the change.
-  function stretchSpansOverChange(doc, change) {
-    if (change.full) return null;
-    var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;
-    var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;
-    if (!oldFirst && !oldLast) return null;
-
-    var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;
-    // Get the spans that 'stick out' on both sides
-    var first = markedSpansBefore(oldFirst, startCh, isInsert);
-    var last = markedSpansAfter(oldLast, endCh, isInsert);
-
-    // Next, merge those two ends
-    var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);
-    if (first) {
-      // Fix up .to properties of first
-      for (var i = 0; i < first.length; ++i) {
-        var span = first[i];
-        if (span.to == null) {
-          var found = getMarkedSpanFor(last, span.marker);
-          if (!found) span.to = startCh;
-          else if (sameLine) span.to = found.to == null ? null : found.to + offset;
-        }
-      }
-    }
-    if (last) {
-      // Fix up .from in last (or move them into first in case of sameLine)
-      for (var i = 0; i < last.length; ++i) {
-        var span = last[i];
-        if (span.to != null) span.to += offset;
-        if (span.from == null) {
-          var found = getMarkedSpanFor(first, span.marker);
-          if (!found) {
-            span.from = offset;
-            if (sameLine) (first || (first = [])).push(span);
-          }
-        } else {
-          span.from += offset;
-          if (sameLine) (first || (first = [])).push(span);
-        }
-      }
-    }
-    // Make sure we didn't create any zero-length spans
-    if (first) first = clearEmptySpans(first);
-    if (last && last != first) last = clearEmptySpans(last);
-
-    var newMarkers = [first];
-    if (!sameLine) {
-      // Fill gap with whole-line-spans
-      var gap = change.text.length - 2, gapMarkers;
-      if (gap > 0 && first)
-        for (var i = 0; i < first.length; ++i)
-          if (first[i].to == null)
-            (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null));
-      for (var i = 0; i < gap; ++i)
-        newMarkers.push(gapMarkers);
-      newMarkers.push(last);
-    }
-    return newMarkers;
-  }
-
-  // Remove spans that are empty and don't have a clearWhenEmpty
-  // option of false.
-  function clearEmptySpans(spans) {
-    for (var i = 0; i < spans.length; ++i) {
-      var span = spans[i];
-      if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)
-        spans.splice(i--, 1);
-    }
-    if (!spans.length) return null;
-    return spans;
-  }
-
-  // Used for un/re-doing changes from the history. Combines the
-  // result of computing the existing spans with the set of spans that
-  // existed in the history (so that deleting around a span and then
-  // undoing brings back the span).
-  function mergeOldSpans(doc, change) {
-    var old = getOldSpans(doc, change);
-    var stretched = stretchSpansOverChange(doc, change);
-    if (!old) return stretched;
-    if (!stretched) return old;
-
-    for (var i = 0; i < old.length; ++i) {
-      var oldCur = old[i], stretchCur = stretched[i];
-      if (oldCur && stretchCur) {
-        spans: for (var j = 0; j < stretchCur.length; ++j) {
-          var span = stretchCur[j];
-          for (var k = 0; k < oldCur.length; ++k)
-            if (oldCur[k].marker == span.marker) continue spans;
-          oldCur.push(span);
-        }
-      } else if (stretchCur) {
-        old[i] = stretchCur;
-      }
-    }
-    return old;
-  }
-
-  // Used to 'clip' out readOnly ranges when making a change.
-  function removeReadOnlyRanges(doc, from, to) {
-    var markers = null;
-    doc.iter(from.line, to.line + 1, function(line) {
-      if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) {
-        var mark = line.markedSpans[i].marker;
-        if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))
-          (markers || (markers = [])).push(mark);
-      }
-    });
-    if (!markers) return null;
-    var parts = [{from: from, to: to}];
-    for (var i = 0; i < markers.length; ++i) {
-      var mk = markers[i], m = mk.find(0);
-      for (var j = 0; j < parts.length; ++j) {
-        var p = parts[j];
-        if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue;
-        var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);
-        if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)
-          newParts.push({from: p.from, to: m.from});
-        if (dto > 0 || !mk.inclusiveRight && !dto)
-          newParts.push({from: m.to, to: p.to});
-        parts.splice.apply(parts, newParts);
-        j += newParts.length - 1;
-      }
-    }
-    return parts;
-  }
-
-  // Connect or disconnect spans from a line.
-  function detachMarkedSpans(line) {
-    var spans = line.markedSpans;
-    if (!spans) return;
-    for (var i = 0; i < spans.length; ++i)
-      spans[i].marker.detachLine(line);
-    line.markedSpans = null;
-  }
-  function attachMarkedSpans(line, spans) {
-    if (!spans) return;
-    for (var i = 0; i < spans.length; ++i)
-      spans[i].marker.attachLine(line);
-    line.markedSpans = spans;
-  }
-
-  // Helpers used when computing which overlapping collapsed span
-  // counts as the larger one.
-  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; }
-  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; }
-
-  // Returns a number indicating which of two overlapping collapsed
-  // spans is larger (and thus includes the other). Falls back to
-  // comparing ids when the spans cover exactly the same range.
-  function compareCollapsedMarkers(a, b) {
-    var lenDiff = a.lines.length - b.lines.length;
-    if (lenDiff != 0) return lenDiff;
-    var aPos = a.find(), bPos = b.find();
-    var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);
-    if (fromCmp) return -fromCmp;
-    var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);
-    if (toCmp) return toCmp;
-    return b.id - a.id;
-  }
-
-  // Find out whether a line ends or starts in a collapsed span. If
-  // so, return the marker for that span.
-  function collapsedSpanAtSide(line, start) {
-    var sps = sawCollapsedSpans && line.markedSpans, found;
-    if (sps) for (var sp, i = 0; i < sps.length; ++i) {
-      sp = sps[i];
-      if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&
-          (!found || compareCollapsedMarkers(found, sp.marker) < 0))
-        found = sp.marker;
-    }
-    return found;
-  }
-  function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); }
-  function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); }
-
-  // Test whether there exists a collapsed span that partially
-  // overlaps (covers the start or end, but not both) of a new span.
-  // Such overlap is not allowed.
-  function conflictingCollapsedRange(doc, lineNo, from, to, marker) {
-    var line = getLine(doc, lineNo);
-    var sps = sawCollapsedSpans && line.markedSpans;
-    if (sps) for (var i = 0; i < sps.length; ++i) {
-      var sp = sps[i];
-      if (!sp.marker.collapsed) continue;
-      var found = sp.marker.find(0);
-      var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);
-      var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);
-      if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue;
-      if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||
-          fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))
-        return true;
-    }
-  }
-
-  // A visual line is a line as drawn on the screen. Folding, for
-  // example, can cause multiple logical lines to appear on the same
-  // visual line. This finds the start of the visual line that the
-  // given line is part of (usually that is the line itself).
-  function visualLine(line) {
-    var merged;
-    while (merged = collapsedSpanAtStart(line))
-      line = merged.find(-1, true).line;
-    return line;
-  }
-
-  // Returns an array of logical lines that continue the visual line
-  // started by the argument, or undefined if there are no such lines.
-  function visualLineContinued(line) {
-    var merged, lines;
-    while (merged = collapsedSpanAtEnd(line)) {
-      line = merged.find(1, true).line;
-      (lines || (lines = [])).push(line);
-    }
-    return lines;
-  }
-
-  // Get the line number of the start of the visual line that the
-  // given line number is part of.
-  function visualLineNo(doc, lineN) {
-    var line = getLine(doc, lineN), vis = visualLine(line);
-    if (line == vis) return lineN;
-    return lineNo(vis);
-  }
-  // Get the line number of the start of the next visual line after
-  // the given line.
-  function visualLineEndNo(doc, lineN) {
-    if (lineN > doc.lastLine()) return lineN;
-    var line = getLine(doc, lineN), merged;
-    if (!lineIsHidden(doc, line)) return lineN;
-    while (merged = collapsedSpanAtEnd(line))
-      line = merged.find(1, true).line;
-    return lineNo(line) + 1;
-  }
-
-  // Compute whether a line is hidden. Lines count as hidden when they
-  // are part of a visual line that starts with another line, or when
-  // they are entirely covered by collapsed, non-widget span.
-  function lineIsHidden(doc, line) {
-    var sps = sawCollapsedSpans && line.markedSpans;
-    if (sps) for (var sp, i = 0; i < sps.length; ++i) {
-      sp = sps[i];
-      if (!sp.marker.collapsed) continue;
-      if (sp.from == null) return true;
-      if (sp.marker.widgetNode) continue;
-      if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))
-        return true;
-    }
-  }
-  function lineIsHiddenInner(doc, line, span) {
-    if (span.to == null) {
-      var end = span.marker.find(1, true);
-      return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker));
-    }
-    if (span.marker.inclusiveRight && span.to == line.text.length)
-      return true;
-    for (var sp, i = 0; i < line.markedSpans.length; ++i) {
-      sp = line.markedSpans[i];
-      if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&
-          (sp.to == null || sp.to != span.from) &&
-          (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&
-          lineIsHiddenInner(doc, line, sp)) return true;
-    }
-  }
-
-  // LINE WIDGETS
-
-  // Line widgets are block elements displayed above or below a line.
-
-  var LineWidget = CodeMirror.LineWidget = function(doc, node, options) {
-    if (options) for (var opt in options) if (options.hasOwnProperty(opt))
-      this[opt] = options[opt];
-    this.doc = doc;
-    this.node = node;
-  };
-  eventMixin(LineWidget);
-
-  function adjustScrollWhenAboveVisible(cm, line, diff) {
-    if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))
-      addToScrollPos(cm, null, diff);
-  }
-
-  LineWidget.prototype.clear = function() {
-    var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);
-    if (no == null || !ws) return;
-    for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1);
-    if (!ws.length) line.widgets = null;
-    var height = widgetHeight(this);
-    updateLineHeight(line, Math.max(0, line.height - height));
-    if (cm) runInOp(cm, function() {
-      adjustScrollWhenAboveVisible(cm, line, -height);
-      regLineChange(cm, no, "widget");
-    });
-  };
-  LineWidget.prototype.changed = function() {
-    var oldH = this.height, cm = this.doc.cm, line = this.line;
-    this.height = null;
-    var diff = widgetHeight(this) - oldH;
-    if (!diff) return;
-    updateLineHeight(line, line.height + diff);
-    if (cm) runInOp(cm, function() {
-      cm.curOp.forceUpdate = true;
-      adjustScrollWhenAboveVisible(cm, line, diff);
-    });
-  };
-
-  function widgetHeight(widget) {
-    if (widget.height != null) return widget.height;
-    var cm = widget.doc.cm;
-    if (!cm) return 0;
-    if (!contains(document.body, widget.node)) {
-      var parentStyle = "position: relative;";
-      if (widget.coverGutter)
-        parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;";
-      if (widget.noHScroll)
-        parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;";
-      removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle));
-    }
-    return widget.height = widget.node.parentNode.offsetHeight;
-  }
-
-  function addLineWidget(doc, handle, node, options) {
-    var widget = new LineWidget(doc, node, options);
-    var cm = doc.cm;
-    if (cm && widget.noHScroll) cm.display.alignWidgets = true;
-    changeLine(doc, handle, "widget", function(line) {
-      var widgets = line.widgets || (line.widgets = []);
-      if (widget.insertAt == null) widgets.push(widget);
-      else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget);
-      widget.line = line;
-      if (cm && !lineIsHidden(doc, line)) {
-        var aboveVisible = heightAtLine(line) < doc.scrollTop;
-        updateLineHeight(line, line.height + widgetHeight(widget));
-        if (aboveVisible) addToScrollPos(cm, null, widget.height);
-        cm.curOp.forceUpdate = true;
-      }
-      return true;
-    });
-    return widget;
-  }
-
-  // LINE DATA STRUCTURE
-
-  // Line objects. These hold state related to a line, including
-  // highlighting info (the styles array).
-  var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) {
-    this.text = text;
-    attachMarkedSpans(this, markedSpans);
-    this.height = estimateHeight ? estimateHeight(this) : 1;
-  };
-  eventMixin(Line);
-  Line.prototype.lineNo = function() { return lineNo(this); };
-
-  // Change the content (text, markers) of a line. Automatically
-  // invalidates cached information and tries to re-estimate the
-  // line's height.
-  function updateLine(line, text, markedSpans, estimateHeight) {
-    line.text = text;
-    if (line.stateAfter) line.stateAfter = null;
-    if (line.styles) line.styles = null;
-    if (line.order != null) line.order = null;
-    detachMarkedSpans(line);
-    attachMarkedSpans(line, markedSpans);
-    var estHeight = estimateHeight ? estimateHeight(line) : 1;
-    if (estHeight != line.height) updateLineHeight(line, estHeight);
-  }
-
-  // Detach a line from the document tree and its markers.
-  function cleanUpLine(line) {
-    line.parent = null;
-    detachMarkedSpans(line);
-  }
-
-  function extractLineClasses(type, output) {
-    if (type) for (;;) {
-      var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/);
-      if (!lineClass) break;
-      type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);
-      var prop = lineClass[1] ? "bgClass" : "textClass";
-      if (output[prop] == null)
-        output[prop] = lineClass[2];
-      else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop]))
-        output[prop] += " " + lineClass[2];
-    }
-    return type;
-  }
-
-  function callBlankLine(mode, state) {
-    if (mode.blankLine) return mode.blankLine(state);
-    if (!mode.innerMode) return;
-    var inner = CodeMirror.innerMode(mode, state);
-    if (inner.mode.blankLine) return inner.mode.blankLine(inner.state);
-  }
-
-  function readToken(mode, stream, state, inner) {
-    for (var i = 0; i < 10; i++) {
-      if (inner) inner[0] = CodeMirror.innerMode(mode, state).mode;
-      var style = mode.token(stream, state);
-      if (stream.pos > stream.start) return style;
-    }
-    throw new Error("Mode " + mode.name + " failed to advance stream.");
-  }
-
-  // Utility for getTokenAt and getLineTokens
-  function takeToken(cm, pos, precise, asArray) {
-    function getObj(copy) {
-      return {start: stream.start, end: stream.pos,
-              string: stream.current(),
-              type: style || null,
-              state: copy ? copyState(doc.mode, state) : state};
-    }
-
-    var doc = cm.doc, mode = doc.mode, style;
-    pos = clipPos(doc, pos);
-    var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise);
-    var stream = new StringStream(line.text, cm.options.tabSize), tokens;
-    if (asArray) tokens = [];
-    while ((asArray || stream.pos < pos.ch) && !stream.eol()) {
-      stream.start = stream.pos;
-      style = readToken(mode, stream, state);
-      if (asArray) tokens.push(getObj(true));
-    }
-    return asArray ? tokens : getObj();
-  }
-
-  // Run the given mode's parser over a line, calling f for each token.
-  function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) {
-    var flattenSpans = mode.flattenSpans;
-    if (flattenSpans == null) flattenSpans = cm.options.flattenSpans;
-    var curStart = 0, curStyle = null;
-    var stream = new StringStream(text, cm.options.tabSize), style;
-    var inner = cm.options.addModeClass && [null];
-    if (text == "") extractLineClasses(callBlankLine(mode, state), lineClasses);
-    while (!stream.eol()) {
-      if (stream.pos > cm.options.maxHighlightLength) {
-        flattenSpans = false;
-        if (forceToEnd) processLine(cm, text, state, stream.pos);
-        stream.pos = text.length;
-        style = null;
-      } else {
-        style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses);
-      }
-      if (inner) {
-        var mName = inner[0].name;
-        if (mName) style = "m-" + (style ? mName + " " + style : mName);
-      }
-      if (!flattenSpans || curStyle != style) {
-        while (curStart < stream.start) {
-          curStart = Math.min(stream.start, curStart + 50000);
-          f(curStart, curStyle);
-        }
-        curStyle = style;
-      }
-      stream.start = stream.pos;
-    }
-    while (curStart < stream.pos) {
-      // Webkit seems to refuse to render text nodes longer than 57444 characters
-      var pos = Math.min(stream.pos, curStart + 50000);
-      f(pos, curStyle);
-      curStart = pos;
-    }
-  }
-
-  // Compute a style array (an array starting with a mode generation
-  // -- for invalidation -- followed by pairs of end positions and
-  // style strings), which is used to highlight the tokens on the
-  // line.
-  function highlightLine(cm, line, state, forceToEnd) {
-    // A styles array always starts with a number identifying the
-    // mode/overlays that it is based on (for easy invalidation).
-    var st = [cm.state.modeGen], lineClasses = {};
-    // Compute the base array of styles
-    runMode(cm, line.text, cm.doc.mode, state, function(end, style) {
-      st.push(end, style);
-    }, lineClasses, forceToEnd);
-
-    // Run overlays, adjust style array.
-    for (var o = 0; o < cm.state.overlays.length; ++o) {
-      var overlay = cm.state.overlays[o], i = 1, at = 0;
-      runMode(cm, line.text, overlay.mode, true, function(end, style) {
-        var start = i;
-        // Ensure there's a token end at the current position, and that i points at it
-        while (at < end) {
-          var i_end = st[i];
-          if (i_end > end)
-            st.splice(i, 1, end, st[i+1], i_end);
-          i += 2;
-          at = Math.min(end, i_end);
-        }
-        if (!style) return;
-        if (overlay.opaque) {
-          st.splice(start, i - start, end, "cm-overlay " + style);
-          i = start + 2;
-        } else {
-          for (; start < i; start += 2) {
-            var cur = st[start+1];
-            st[start+1] = (cur ? cur + " " : "") + "cm-overlay " + style;
-          }
-        }
-      }, lineClasses);
-    }
-
-    return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null};
-  }
-
-  function getLineStyles(cm, line, updateFrontier) {
-    if (!line.styles || line.styles[0] != cm.state.modeGen) {
-      var state = getStateBefore(cm, lineNo(line));
-      var result = highlightLine(cm, line, line.text.length > cm.options.maxHighlightLength ? copyState(cm.doc.mode, state) : state);
-      line.stateAfter = state;
-      line.styles = result.styles;
-      if (result.classes) line.styleClasses = result.classes;
-      else if (line.styleClasses) line.styleClasses = null;
-      if (updateFrontier === cm.doc.frontier) cm.doc.frontier++;
-    }
-    return line.styles;
-  }
-
-  // Lightweight form of highlight -- proceed over this line and
-  // update state, but don't save a style array. Used for lines that
-  // aren't currently visible.
-  function processLine(cm, text, state, startAt) {
-    var mode = cm.doc.mode;
-    var stream = new StringStream(text, cm.options.tabSize);
-    stream.start = stream.pos = startAt || 0;
-    if (text == "") callBlankLine(mode, state);
-    while (!stream.eol()) {
-      readToken(mode, stream, state);
-      stream.start = stream.pos;
-    }
-  }
-
-  // Convert a style as returned by a mode (either null, or a string
-  // containing one or more styles) to a CSS style. This is cached,
-  // and also looks for line-wide styles.
-  var styleToClassCache = {}, styleToClassCacheWithMode = {};
-  function interpretTokenStyle(style, options) {
-    if (!style || /^\s*$/.test(style)) return null;
-    var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;
-    return cache[style] ||
-      (cache[style] = style.replace(/\S+/g, "cm-$&"));
-  }
-
-  // Render the DOM representation of the text of a line. Also builds
-  // up a 'line map', which points at the DOM nodes that represent
-  // specific stretches of text, and is used by the measuring code.
-  // The returned object contains the DOM node, this map, and
-  // information about line-wide styles that were set by the mode.
-  function buildLineContent(cm, lineView) {
-    // The padding-right forces the element to have a 'border', which
-    // is needed on Webkit to be able to get line-level bounding
-    // rectangles for it (in measureChar).
-    var content = elt("span", null, null, webkit ? "padding-right: .1px" : null);
-    var builder = {pre: elt("pre", [content], "CodeMirror-line"), content: content,
-                   col: 0, pos: 0, cm: cm,
-                   splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")};
-    lineView.measure = {};
-
-    // Iterate over the logical lines that make up this visual line.
-    for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {
-      var line = i ? lineView.rest[i - 1] : lineView.line, order;
-      builder.pos = 0;
-      builder.addToken = buildToken;
-      // Optionally wire in some hacks into the token-rendering
-      // algorithm, to deal with browser quirks.
-      if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line)))
-        builder.addToken = buildTokenBadBidi(builder.addToken, order);
-      builder.map = [];
-      var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);
-      insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));
-      if (line.styleClasses) {
-        if (line.styleClasses.bgClass)
-          builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || "");
-        if (line.styleClasses.textClass)
-          builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || "");
-      }
-
-      // Ensure at least a single node is present, for measuring.
-      if (builder.map.length == 0)
-        builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure)));
-
-      // Store the map and a cache object for the current logical line
-      if (i == 0) {
-        lineView.measure.map = builder.map;
-        lineView.measure.cache = {};
-      } else {
-        (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map);
-        (lineView.measure.caches || (lineView.measure.caches = [])).push({});
-      }
-    }
-
-    // See issue #2901
-    if (webkit) {
-      var last = builder.content.lastChild
-      if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab")))
-        builder.content.className = "cm-tab-wrap-hack";
-    }
-
-    signal(cm, "renderLine", cm, lineView.line, builder.pre);
-    if (builder.pre.className)
-      builder.textClass = joinClasses(builder.pre.className, builder.textClass || "");
-
-    return builder;
-  }
-
-  function defaultSpecialCharPlaceholder(ch) {
-    var token = elt("span", "\u2022", "cm-invalidchar");
-    token.title = "\\u" + ch.charCodeAt(0).toString(16);
-    token.setAttribute("aria-label", token.title);
-    return token;
-  }
-
-  // Build up the DOM representation for a single token, and add it to
-  // the line map. Takes care to render special characters separately.
-  function buildToken(builder, text, style, startStyle, endStyle, title, css) {
-    if (!text) return;
-    var displayText = builder.splitSpaces ? text.replace(/ {3,}/g, splitSpaces) : text;
-    var special = builder.cm.state.specialChars, mustWrap = false;
-    if (!special.test(text)) {
-      builder.col += text.length;
-      var content = document.createTextNode(displayText);
-      builder.map.push(builder.pos, builder.pos + text.length, content);
-      if (ie && ie_version < 9) mustWrap = true;
-      builder.pos += text.length;
-    } else {
-      var content = document.createDocumentFragment(), pos = 0;
-      while (true) {
-        special.lastIndex = pos;
-        var m = special.exec(text);
-        var skipped = m ? m.index - pos : text.length - pos;
-        if (skipped) {
-          var txt = document.createTextNode(displayText.slice(pos, pos + skipped));
-          if (ie && ie_version < 9) content.appendChild(elt("span", [txt]));
-          else content.appendChild(txt);
-          builder.map.push(builder.pos, builder.pos + skipped, txt);
-          builder.col += skipped;
-          builder.pos += skipped;
-        }
-        if (!m) break;
-        pos += skipped + 1;
-        if (m[0] == "\t") {
-          var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;
-          var txt = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab"));
-          txt.setAttribute("role", "presentation");
-          txt.setAttribute("cm-text", "\t");
-          builder.col += tabWidth;
-        } else if (m[0] == "\r" || m[0] == "\n") {
-          var txt = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar"));
-          txt.setAttribute("cm-text", m[0]);
-          builder.col += 1;
-        } else {
-          var txt = builder.cm.options.specialCharPlaceholder(m[0]);
-          txt.setAttribute("cm-text", m[0]);
-          if (ie && ie_version < 9) content.appendChild(elt("span", [txt]));
-          else content.appendChild(txt);
-          builder.col += 1;
-        }
-        builder.map.push(builder.pos, builder.pos + 1, txt);
-        builder.pos++;
-      }
-    }
-    if (style || startStyle || endStyle || mustWrap || css) {
-      var fullStyle = style || "";
-      if (startStyle) fullStyle += startStyle;
-      if (endStyle) fullStyle += endStyle;
-      var token = elt("span", [content], fullStyle, css);
-      if (title) token.title = title;
-      return builder.content.appendChild(token);
-    }
-    builder.content.appendChild(content);
-  }
-
-  function splitSpaces(old) {
-    var out = " ";
-    for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0";
-    out += " ";
-    return out;
-  }
-
-  // Work around nonsense dimensions being reported for stretches of
-  // right-to-left text.
-  function buildTokenBadBidi(inner, order) {
-    return function(builder, text, style, startStyle, endStyle, title, css) {
-      style = style ? style + " cm-force-border" : "cm-force-border";
-      var start = builder.pos, end = start + text.length;
-      for (;;) {
-        // Find the part that overlaps with the start of this text
-        for (var i = 0; i < order.length; i++) {
-          var part = order[i];
-          if (part.to > start && part.from <= start) break;
-        }
-        if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title, css);
-        inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css);
-        startStyle = null;
-        text = text.slice(part.to - start);
-        start = part.to;
-      }
-    };
-  }
-
-  function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
-    var widget = !ignoreWidget && marker.widgetNode;
-    if (widget) builder.map.push(builder.pos, builder.pos + size, widget);
-    if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {
-      if (!widget)
-        widget = builder.content.appendChild(document.createElement("span"));
-      widget.setAttribute("cm-marker", marker.id);
-    }
-    if (widget) {
-      builder.cm.display.input.setUneditable(widget);
-      builder.content.appendChild(widget);
-    }
-    builder.pos += size;
-  }
-
-  // Outputs a number of spans to make up a line, taking highlighting
-  // and marked text into account.
-  function insertLineContent(line, builder, styles) {
-    var spans = line.markedSpans, allText = line.text, at = 0;
-    if (!spans) {
-      for (var i = 1; i < styles.length; i+=2)
-        builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options));
-      return;
-    }
-
-    var len = allText.length, pos = 0, i = 1, text = "", style, css;
-    var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed;
-    for (;;) {
-      if (nextChange == pos) { // Update current marker set
-        spanStyle = spanEndStyle = spanStartStyle = title = css = "";
-        collapsed = null; nextChange = Infinity;
-        var foundBookmarks = [], endStyles
-        for (var j = 0; j < spans.length; ++j) {
-          var sp = spans[j], m = sp.marker;
-          if (m.type == "bookmark" && sp.from == pos && m.widgetNode) {
-            foundBookmarks.push(m);
-          } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {
-            if (sp.to != null && sp.to != pos && nextChange > sp.to) {
-              nextChange = sp.to;
-              spanEndStyle = "";
-            }
-            if (m.className) spanStyle += " " + m.className;
-            if (m.css) css = (css ? css + ";" : "") + m.css;
-            if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle;
-            if (m.endStyle && sp.to == nextChange) (endStyles || (endStyles = [])).push(m.endStyle, sp.to)
-            if (m.title && !title) title = m.title;
-            if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))
-              collapsed = sp;
-          } else if (sp.from > pos && nextChange > sp.from) {
-            nextChange = sp.from;
-          }
-        }
-        if (endStyles) for (var j = 0; j < endStyles.length; j += 2)
-          if (endStyles[j + 1] == nextChange) spanEndStyle += " " + endStyles[j]
-
-        if (!collapsed || collapsed.from == pos) for (var j = 0; j < foundBookmarks.length; ++j)
-          buildCollapsedSpan(builder, 0, foundBookmarks[j]);
-        if (collapsed && (collapsed.from || 0) == pos) {
-          buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,
-                             collapsed.marker, collapsed.from == null);
-          if (collapsed.to == null) return;
-          if (collapsed.to == pos) collapsed = false;
-        }
-      }
-      if (pos >= len) break;
-
-      var upto = Math.min(len, nextChange);
-      while (true) {
-        if (text) {
-          var end = pos + text.length;
-          if (!collapsed) {
-            var tokenText = end > upto ? text.slice(0, upto - pos) : text;
-            builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,
-                             spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css);
-          }
-          if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;}
-          pos = end;
-          spanStartStyle = "";
-        }
-        text = allText.slice(at, at = styles[i++]);
-        style = interpretTokenStyle(styles[i++], builder.cm.options);
-      }
-    }
-  }
-
-  // DOCUMENT DATA STRUCTURE
-
-  // By default, updates that start and end at the beginning of a line
-  // are treated specially, in order to make the association of line
-  // widgets and marker elements with the text behave more intuitive.
-  function isWholeLineUpdate(doc, change) {
-    return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" &&
-      (!doc.cm || doc.cm.options.wholeLineUpdateBefore);
-  }
-
-  // Perform a change on the document data structure.
-  function updateDoc(doc, change, markedSpans, estimateHeight) {
-    function spansFor(n) {return markedSpans ? markedSpans[n] : null;}
-    function update(line, text, spans) {
-      updateLine(line, text, spans, estimateHeight);
-      signalLater(line, "change", line, change);
-    }
-    function linesFor(start, end) {
-      for (var i = start, result = []; i < end; ++i)
-        result.push(new Line(text[i], spansFor(i), estimateHeight));
-      return result;
-    }
-
-    var from = change.from, to = change.to, text = change.text;
-    var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);
-    var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;
-
-    // Adjust the line structure
-    if (change.full) {
-      doc.insert(0, linesFor(0, text.length));
-      doc.remove(text.length, doc.size - text.length);
-    } else if (isWholeLineUpdate(doc, change)) {
-      // This is a whole-line replace. Treated specially to make
-      // sure line objects move the way they are supposed to.
-      var added = linesFor(0, text.length - 1);
-      update(lastLine, lastLine.text, lastSpans);
-      if (nlines) doc.remove(from.line, nlines);
-      if (added.length) doc.insert(from.line, added);
-    } else if (firstLine == lastLine) {
-      if (text.length == 1) {
-        update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);
-      } else {
-        var added = linesFor(1, text.length - 1);
-        added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));
-        update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
-        doc.insert(from.line + 1, added);
-      }
-    } else if (text.length == 1) {
-      update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));
-      doc.remove(from.line + 1, nlines);
-    } else {
-      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
-      update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);
-      var added = linesFor(1, text.length - 1);
-      if (nlines > 1) doc.remove(from.line + 1, nlines - 1);
-      doc.insert(from.line + 1, added);
-    }
-
-    signalLater(doc, "change", doc, change);
-  }
-
-  // The document is represented as a BTree consisting of leaves, with
-  // chunk of lines in them, and branches, with up to ten leaves or
-  // other branch nodes below them. The top node is always a branch
-  // node, and is the document object itself (meaning it has
-  // additional methods and properties).
-  //
-  // All nodes have parent links. The tree is used both to go from
-  // line numbers to line objects, and to go from objects to numbers.
-  // It also indexes by height, and is used to convert between height
-  // and line object, and to find the total height of the document.
-  //
-  // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html
-
-  function LeafChunk(lines) {
-    this.lines = lines;
-    this.parent = null;
-    for (var i = 0, height = 0; i < lines.length; ++i) {
-      lines[i].parent = this;
-      height += lines[i].height;
-    }
-    this.height = height;
-  }
-
-  LeafChunk.prototype = {
-    chunkSize: function() { return this.lines.length; },
-    // Remove the n lines at offset 'at'.
-    removeInner: function(at, n) {
-      for (var i = at, e = at + n; i < e; ++i) {
-        var line = this.lines[i];
-        this.height -= line.height;
-        cleanUpLine(line);
-        signalLater(line, "delete");
-      }
-      this.lines.splice(at, n);
-    },
-    // Helper used to collapse a small branch into a single leaf.
-    collapse: function(lines) {
-      lines.push.apply(lines, this.lines);
-    },
-    // Insert the given array of lines at offset 'at', count them as
-    // having the given height.
-    insertInner: function(at, lines, height) {
-      this.height += height;
-      this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));
-      for (var i = 0; i < lines.length; ++i) lines[i].parent = this;
-    },
-    // Used to iterate over a part of the tree.
-    iterN: function(at, n, op) {
-      for (var e = at + n; at < e; ++at)
-        if (op(this.lines[at])) return true;
-    }
-  };
-
-  function BranchChunk(children) {
-    this.children = children;
-    var size = 0, height = 0;
-    for (var i = 0; i < children.length; ++i) {
-      var ch = children[i];
-      size += ch.chunkSize(); height += ch.height;
-      ch.parent = this;
-    }
-    this.size = size;
-    this.height = height;
-    this.parent = null;
-  }
-
-  BranchChunk.prototype = {
-    chunkSize: function() { return this.size; },
-    removeInner: function(at, n) {
-      this.size -= n;
-      for (var i = 0; i < this.children.length; ++i) {
-        var child = this.children[i], sz = child.chunkSize();
-        if (at < sz) {
-          var rm = Math.min(n, sz - at), oldHeight = child.height;
-          child.removeInner(at, rm);
-          this.height -= oldHeight - child.height;
-          if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }
-          if ((n -= rm) == 0) break;
-          at = 0;
-        } else at -= sz;
-      }
-      // If the result is smaller than 25 lines, ensure that it is a
-      // single leaf node.
-      if (this.size - n < 25 &&
-          (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {
-        var lines = [];
-        this.collapse(lines);
-        this.children = [new LeafChunk(lines)];
-        this.children[0].parent = this;
-      }
-    },
-    collapse: function(lines) {
-      for (var i = 0; i < this.children.length; ++i) this.children[i].collapse(lines);
-    },
-    insertInner: function(at, lines, height) {
-      this.size += lines.length;
-      this.height += height;
-      for (var i = 0; i < this.children.length; ++i) {
-        var child = this.children[i], sz = child.chunkSize();
-        if (at <= sz) {
-          child.insertInner(at, lines, height);
-          if (child.lines && child.lines.length > 50) {
-            // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.
-            // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.
-            var remaining = child.lines.length % 25 + 25
-            for (var pos = remaining; pos < child.lines.length;) {
-              var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));
-              child.height -= leaf.height;
-              this.children.splice(++i, 0, leaf);
-              leaf.parent = this;
-            }
-            child.lines = child.lines.slice(0, remaining);
-            this.maybeSpill();
-          }
-          break;
-        }
-        at -= sz;
-      }
-    },
-    // When a node has grown, check whether it should be split.
-    maybeSpill: function() {
-      if (this.children.length <= 10) return;
-      var me = this;
-      do {
-        var spilled = me.children.splice(me.children.length - 5, 5);
-        var sibling = new BranchChunk(spilled);
-        if (!me.parent) { // Become the parent node
-          var copy = new BranchChunk(me.children);
-          copy.parent = me;
-          me.children = [copy, sibling];
-          me = copy;
-       } else {
-          me.size -= sibling.size;
-          me.height -= sibling.height;
-          var myIndex = indexOf(me.parent.children, me);
-          me.parent.children.splice(myIndex + 1, 0, sibling);
-        }
-        sibling.parent = me.parent;
-      } while (me.children.length > 10);
-      me.parent.maybeSpill();
-    },
-    iterN: function(at, n, op) {
-      for (var i = 0; i < this.children.length; ++i) {
-        var child = this.children[i], sz = child.chunkSize();
-        if (at < sz) {
-          var used = Math.min(n, sz - at);
-          if (child.iterN(at, used, op)) return true;
-          if ((n -= used) == 0) break;
-          at = 0;
-        } else at -= sz;
-      }
-    }
-  };
-
-  var nextDocId = 0;
-  var Doc = CodeMirror.Doc = function(text, mode, firstLine, lineSep) {
-    if (!(this instanceof Doc)) return new Doc(text, mode, firstLine, lineSep);
-    if (firstLine == null) firstLine = 0;
-
-    BranchChunk.call(this, [new LeafChunk([new Line("", null)])]);
-    this.first = firstLine;
-    this.scrollTop = this.scrollLeft = 0;
-    this.cantEdit = false;
-    this.cleanGeneration = 1;
-    this.frontier = firstLine;
-    var start = Pos(firstLine, 0);
-    this.sel = simpleSelection(start);
-    this.history = new History(null);
-    this.id = ++nextDocId;
-    this.modeOption = mode;
-    this.lineSep = lineSep;
-    this.extend = false;
-
-    if (typeof text == "string") text = this.splitLines(text);
-    updateDoc(this, {from: start, to: start, text: text});
-    setSelection(this, simpleSelection(start), sel_dontScroll);
-  };
-
-  Doc.prototype = createObj(BranchChunk.prototype, {
-    constructor: Doc,
-    // Iterate over the document. Supports two forms -- with only one
-    // argument, it calls that for each line in the document. With
-    // three, it iterates over the range given by the first two (with
-    // the second being non-inclusive).
-    iter: function(from, to, op) {
-      if (op) this.iterN(from - this.first, to - from, op);
-      else this.iterN(this.first, this.first + this.size, from);
-    },
-
-    // Non-public interface for adding and removing lines.
-    insert: function(at, lines) {
-      var height = 0;
-      for (var i = 0; i < lines.length; ++i) height += lines[i].height;
-      this.insertInner(at - this.first, lines, height);
-    },
-    remove: function(at, n) { this.removeInner(at - this.first, n); },
-
-    // From here, the methods are part of the public interface. Most
-    // are also available from CodeMirror (editor) instances.
-
-    getValue: function(lineSep) {
-      var lines = getLines(this, this.first, this.first + this.size);
-      if (lineSep === false) return lines;
-      return lines.join(lineSep || this.lineSeparator());
-    },
-    setValue: docMethodOp(function(code) {
-      var top = Pos(this.first, 0), last = this.first + this.size - 1;
-      makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),
-                        text: this.splitLines(code), origin: "setValue", full: true}, true);
-      setSelection(this, simpleSelection(top));
-    }),
-    replaceRange: function(code, from, to, origin) {
-      from = clipPos(this, from);
-      to = to ? clipPos(this, to) : from;
-      replaceRange(this, code, from, to, origin);
-    },
-    getRange: function(from, to, lineSep) {
-      var lines = getBetween(this, clipPos(this, from), clipPos(this, to));
-      if (lineSep === false) return lines;
-      return lines.join(lineSep || this.lineSeparator());
-    },
-
-    getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;},
-
-    getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);},
-    getLineNumber: function(line) {return lineNo(line);},
-
-    getLineHandleVisualStart: function(line) {
-      if (typeof line == "number") line = getLine(this, line);
-      return visualLine(line);
-    },
-
-    lineCount: function() {return this.size;},
-    firstLine: function() {return this.first;},
-    lastLine: function() {return this.first + this.size - 1;},
-
-    clipPos: function(pos) {return clipPos(this, pos);},
-
-    getCursor: function(start) {
-      var range = this.sel.primary(), pos;
-      if (start == null || start == "head") pos = range.head;
-      else if (start == "anchor") pos = range.anchor;
-      else if (start == "end" || start == "to" || start === false) pos = range.to();
-      else pos = range.from();
-      return pos;
-    },
-    listSelections: function() { return this.sel.ranges; },
-    somethingSelected: function() {return this.sel.somethingSelected();},
-
-    setCursor: docMethodOp(function(line, ch, options) {
-      setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options);
-    }),
-    setSelection: docMethodOp(function(anchor, head, options) {
-      setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);
-    }),
-    extendSelection: docMethodOp(function(head, other, options) {
-      extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);
-    }),
-    extendSelections: docMethodOp(function(heads, options) {
-      extendSelections(this, clipPosArray(this, heads), options);
-    }),
-    extendSelectionsBy: docMethodOp(function(f, options) {
-      var heads = map(this.sel.ranges, f);
-      extendSelections(this, clipPosArray(this, heads), options);
-    }),
-    setSelections: docMethodOp(function(ranges, primary, options) {
-      if (!ranges.length) return;
-      for (var i = 0, out = []; i < ranges.length; i++)
-        out[i] = new Range(clipPos(this, ranges[i].anchor),
-                           clipPos(this, ranges[i].head));
-      if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex);
-      setSelection(this, normalizeSelection(out, primary), options);
-    }),
-    addSelection: docMethodOp(function(anchor, head, options) {
-      var ranges = this.sel.ranges.slice(0);
-      ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));
-      setSelection(this, normalizeSelection(ranges, ranges.length - 1), options);
-    }),
-
-    getSelection: function(lineSep) {
-      var ranges = this.sel.ranges, lines;
-      for (var i = 0; i < ranges.length; i++) {
-        var sel = getBetween(this, ranges[i].from(), ranges[i].to());
-        lines = lines ? lines.concat(sel) : sel;
-      }
-      if (lineSep === false) return lines;
-      else return lines.join(lineSep || this.lineSeparator());
-    },
-    getSelections: function(lineSep) {
-      var parts = [], ranges = this.sel.ranges;
-      for (var i = 0; i < ranges.length; i++) {
-        var sel = getBetween(this, ranges[i].from(), ranges[i].to());
-        if (lineSep !== false) sel = sel.join(lineSep || this.lineSeparator());
-        parts[i] = sel;
-      }
-      return parts;
-    },
-    replaceSelection: function(code, collapse, origin) {
-      var dup = [];
-      for (var i = 0; i < this.sel.ranges.length; i++)
-        dup[i] = code;
-      this.replaceSelections(dup, collapse, origin || "+input");
-    },
-    replaceSelections: docMethodOp(function(code, collapse, origin) {
-      var changes = [], sel = this.sel;
-      for (var i = 0; i < sel.ranges.length; i++) {
-        var range = sel.ranges[i];
-        changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};
-      }
-      var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse);
-      for (var i = changes.length - 1; i >= 0; i--)
-        makeChange(this, changes[i]);
-      if (newSel) setSelectionReplaceHistory(this, newSel);
-      else if (this.cm) ensureCursorVisible(this.cm);
-    }),
-    undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}),
-    redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}),
-    undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}),
-    redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}),
-
-    setExtending: function(val) {this.extend = val;},
-    getExtending: function() {return this.extend;},
-
-    historySize: function() {
-      var hist = this.history, done = 0, undone = 0;
-      for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done;
-      for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone;
-      return {undo: done, redo: undone};
-    },
-    clearHistory: function() {this.history = new History(this.history.maxGeneration);},
-
-    markClean: function() {
-      this.cleanGeneration = this.changeGeneration(true);
-    },
-    changeGeneration: function(forceSplit) {
-      if (forceSplit)
-        this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null;
-      return this.history.generation;
-    },
-    isClean: function (gen) {
-      return this.history.generation == (gen || this.cleanGeneration);
-    },
-
-    getHistory: function() {
-      return {done: copyHistoryArray(this.history.done),
-              undone: copyHistoryArray(this.history.undone)};
-    },
-    setHistory: function(histData) {
-      var hist = this.history = new History(this.history.maxGeneration);
-      hist.done = copyHistoryArray(histData.done.slice(0), null, true);
-      hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);
-    },
-
-    addLineClass: docMethodOp(function(handle, where, cls) {
-      return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) {
-        var prop = where == "text" ? "textClass"
-                 : where == "background" ? "bgClass"
-                 : where == "gutter" ? "gutterClass" : "wrapClass";
-        if (!line[prop]) line[prop] = cls;
-        else if (classTest(cls).test(line[prop])) return false;
-        else line[prop] += " " + cls;
-        return true;
-      });
-    }),
-    removeLineClass: docMethodOp(function(handle, where, cls) {
-      return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) {
-        var prop = where == "text" ? "textClass"
-                 : where == "background" ? "bgClass"
-                 : where == "gutter" ? "gutterClass" : "wrapClass";
-        var cur = line[prop];
-        if (!cur) return false;
-        else if (cls == null) line[prop] = null;
-        else {
-          var found = cur.match(classTest(cls));
-          if (!found) return false;
-          var end = found.index + found[0].length;
-          line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null;
-        }
-        return true;
-      });
-    }),
-
-    addLineWidget: docMethodOp(function(handle, node, options) {
-      return addLineWidget(this, handle, node, options);
-    }),
-    removeLineWidget: function(widget) { widget.clear(); },
-
-    markText: function(from, to, options) {
-      return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range");
-    },
-    setBookmark: function(pos, options) {
-      var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),
-                      insertLeft: options && options.insertLeft,
-                      clearWhenEmpty: false, shared: options && options.shared,
-                      handleMouseEvents: options && options.handleMouseEvents};
-      pos = clipPos(this, pos);
-      return markText(this, pos, pos, realOpts, "bookmark");
-    },
-    findMarksAt: function(pos) {
-      pos = clipPos(this, pos);
-      var markers = [], spans = getLine(this, pos.line).markedSpans;
-      if (spans) for (var i = 0; i < spans.length; ++i) {
-        var span = spans[i];
-        if ((span.from == null || span.from <= pos.ch) &&
-            (span.to == null || span.to >= pos.ch))
-          markers.push(span.marker.parent || span.marker);
-      }
-      return markers;
-    },
-    findMarks: function(from, to, filter) {
-      from = clipPos(this, from); to = clipPos(this, to);
-      var found = [], lineNo = from.line;
-      this.iter(from.line, to.line + 1, function(line) {
-        var spans = line.markedSpans;
-        if (spans) for (var i = 0; i < spans.length; i++) {
-          var span = spans[i];
-          if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||
-                span.from == null && lineNo != from.line ||
-                span.from != null && lineNo == to.line && span.from >= to.ch) &&
-              (!filter || filter(span.marker)))
-            found.push(span.marker.parent || span.marker);
-        }
-        ++lineNo;
-      });
-      return found;
-    },
-    getAllMarks: function() {
-      var markers = [];
-      this.iter(function(line) {
-        var sps = line.markedSpans;
-        if (sps) for (var i = 0; i < sps.length; ++i)
-          if (sps[i].from != null) markers.push(sps[i].marker);
-      });
-      return markers;
-    },
-
-    posFromIndex: function(off) {
-      var ch, lineNo = this.first, sepSize = this.lineSeparator().length;
-      this.iter(function(line) {
-        var sz = line.text.length + sepSize;
-        if (sz > off) { ch = off; return true; }
-        off -= sz;
-        ++lineNo;
-      });
-      return clipPos(this, Pos(lineNo, ch));
-    },
-    indexFromPos: function (coords) {
-      coords = clipPos(this, coords);
-      var index = coords.ch;
-      if (coords.line < this.first || coords.ch < 0) return 0;
-      var sepSize = this.lineSeparator().length;
-      this.iter(this.first, coords.line, function (line) {
-        index += line.text.length + sepSize;
-      });
-      return index;
-    },
-
-    copy: function(copyHistory) {
-      var doc = new Doc(getLines(this, this.first, this.first + this.size),
-                        this.modeOption, this.first, this.lineSep);
-      doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;
-      doc.sel = this.sel;
-      doc.extend = false;
-      if (copyHistory) {
-        doc.history.undoDepth = this.history.undoDepth;
-        doc.setHistory(this.getHistory());
-      }
-      return doc;
-    },
-
-    linkedDoc: function(options) {
-      if (!options) options = {};
-      var from = this.first, to = this.first + this.size;
-      if (options.from != null && options.from > from) from = options.from;
-      if (options.to != null && options.to < to) to = options.to;
-      var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep);
-      if (options.sharedHist) copy.history = this.history;
-      (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});
-      copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];
-      copySharedMarkers(copy, findSharedMarkers(this));
-      return copy;
-    },
-    unlinkDoc: function(other) {
-      if (other instanceof CodeMirror) other = other.doc;
-      if (this.linked) for (var i = 0; i < this.linked.length; ++i) {
-        var link = this.linked[i];
-        if (link.doc != other) continue;
-        this.linked.splice(i, 1);
-        other.unlinkDoc(this);
-        detachSharedMarkers(findSharedMarkers(this));
-        break;
-      }
-      // If the histories were shared, split them again
-      if (other.history == this.history) {
-        var splitIds = [other.id];
-        linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true);
-        other.history = new History(null);
-        other.history.done = copyHistoryArray(this.history.done, splitIds);
-        other.history.undone = copyHistoryArray(this.history.undone, splitIds);
-      }
-    },
-    iterLinkedDocs: function(f) {linkedDocs(this, f);},
-
-    getMode: function() {return this.mode;},
-    getEditor: function() {return this.cm;},
-
-    splitLines: function(str) {
-      if (this.lineSep) return str.split(this.lineSep);
-      return splitLinesAuto(str);
-    },
-    lineSeparator: function() { return this.lineSep || "\n"; }
-  });
-
-  // Public alias.
-  Doc.prototype.eachLine = Doc.prototype.iter;
-
-  // Set up methods on CodeMirror's prototype to redirect to the editor's document.
-  var dontDelegate = "iter insert remove copy getEditor constructor".split(" ");
-  for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)
-    CodeMirror.prototype[prop] = (function(method) {
-      return function() {return method.apply(this.doc, arguments);};
-    })(Doc.prototype[prop]);
-
-  eventMixin(Doc);
-
-  // Call f for all linked documents.
-  function linkedDocs(doc, f, sharedHistOnly) {
-    function propagate(doc, skip, sharedHist) {
-      if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) {
-        var rel = doc.linked[i];
-        if (rel.doc == skip) continue;
-        var shared = sharedHist && rel.sharedHist;
-        if (sharedHistOnly && !shared) continue;
-        f(rel.doc, shared);
-        propagate(rel.doc, doc, shared);
-      }
-    }
-    propagate(doc, null, true);
-  }
-
-  // Attach a document to an editor.
-  function attachDoc(cm, doc) {
-    if (doc.cm) throw new Error("This document is already in use.");
-    cm.doc = doc;
-    doc.cm = cm;
-    estimateLineHeights(cm);
-    loadMode(cm);
-    if (!cm.options.lineWrapping) findMaxLine(cm);
-    cm.options.mode = doc.modeOption;
-    regChange(cm);
-  }
-
-  // LINE UTILITIES
-
-  // Find the line object corresponding to the given line number.
-  function getLine(doc, n) {
-    n -= doc.first;
-    if (n < 0 || n >= doc.size) throw new Error("There is no line " + (n + doc.first) + " in the document.");
-    for (var chunk = doc; !chunk.lines;) {
-      for (var i = 0;; ++i) {
-        var child = chunk.children[i], sz = child.chunkSize();
-        if (n < sz) { chunk = child; break; }
-        n -= sz;
-      }
-    }
-    return chunk.lines[n];
-  }
-
-  // Get the part of a document between two positions, as an array of
-  // strings.
-  function getBetween(doc, start, end) {
-    var out = [], n = start.line;
-    doc.iter(start.line, end.line + 1, function(line) {
-      var text = line.text;
-      if (n == end.line) text = text.slice(0, end.ch);
-      if (n == start.line) text = text.slice(start.ch);
-      out.push(text);
-      ++n;
-    });
-    return out;
-  }
-  // Get the lines between from and to, as array of strings.
-  function getLines(doc, from, to) {
-    var out = [];
-    doc.iter(from, to, function(line) { out.push(line.text); });
-    return out;
-  }
-
-  // Update the height of a line, propagating the height change
-  // upwards to parent nodes.
-  function updateLineHeight(line, height) {
-    var diff = height - line.height;
-    if (diff) for (var n = line; n; n = n.parent) n.height += diff;
-  }
-
-  // Given a line object, find its line number by walking up through
-  // its parent links.
-  function lineNo(line) {
-    if (line.parent == null) return null;
-    var cur = line.parent, no = indexOf(cur.lines, line);
-    for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {
-      for (var i = 0;; ++i) {
-        if (chunk.children[i] == cur) break;
-        no += chunk.children[i].chunkSize();
-      }
-    }
-    return no + cur.first;
-  }
-
-  // Find the line at the given vertical position, using the height
-  // information in the document tree.
-  function lineAtHeight(chunk, h) {
-    var n = chunk.first;
-    outer: do {
-      for (var i = 0; i < chunk.children.length; ++i) {
-        var child = chunk.children[i], ch = child.height;
-        if (h < ch) { chunk = child; continue outer; }
-        h -= ch;
-        n += child.chunkSize();
-      }
-      return n;
-    } while (!chunk.lines);
-    for (var i = 0; i < chunk.lines.length; ++i) {
-      var line = chunk.lines[i], lh = line.height;
-      if (h < lh) break;
-      h -= lh;
-    }
-    return n + i;
-  }
-
-
-  // Find the height above the given line.
-  function heightAtLine(lineObj) {
-    lineObj = visualLine(lineObj);
-
-    var h = 0, chunk = lineObj.parent;
-    for (var i = 0; i < chunk.lines.length; ++i) {
-      var line = chunk.lines[i];
-      if (line == lineObj) break;
-      else h += line.height;
-    }
-    for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {
-      for (var i = 0; i < p.children.length; ++i) {
-        var cur = p.children[i];
-        if (cur == chunk) break;
-        else h += cur.height;
-      }
-    }
-    return h;
-  }
-
-  // Get the bidi ordering for the given line (and cache it). Returns
-  // false for lines that are fully left-to-right, and an array of
-  // BidiSpan objects otherwise.
-  function getOrder(line) {
-    var order = line.order;
-    if (order == null) order = line.order = bidiOrdering(line.text);
-    return order;
-  }
-
-  // HISTORY
-
-  function History(startGen) {
-    // Arrays of change events and selections. Doing something adds an
-    // event to done and clears undo. Undoing moves events from done
-    // to undone, redoing moves them in the other direction.
-    this.done = []; this.undone = [];
-    this.undoDepth = Infinity;
-    // Used to track when changes can be merged into a single undo
-    // event
-    this.lastModTime = this.lastSelTime = 0;
-    this.lastOp = this.lastSelOp = null;
-    this.lastOrigin = this.lastSelOrigin = null;
-    // Used by the isClean() method
-    this.generation = this.maxGeneration = startGen || 1;
-  }
-
-  // Create a history change event from an updateDoc-style change
-  // object.
-  function historyChangeFromChange(doc, change) {
-    var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};
-    attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);
-    linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true);
-    return histChange;
-  }
-
-  // Pop all selection events off the end of a history array. Stop at
-  // a change event.
-  function clearSelectionEvents(array) {
-    while (array.length) {
-      var last = lst(array);
-      if (last.ranges) array.pop();
-      else break;
-    }
-  }
-
-  // Find the top change event in the history. Pop off selection
-  // events that are in the way.
-  function lastChangeEvent(hist, force) {
-    if (force) {
-      clearSelectionEvents(hist.done);
-      return lst(hist.done);
-    } else if (hist.done.length && !lst(hist.done).ranges) {
-      return lst(hist.done);
-    } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {
-      hist.done.pop();
-      return lst(hist.done);
-    }
-  }
-
-  // Register a change in the history. Merges changes that are within
-  // a single operation, ore are close together with an origin that
-  // allows merging (starting with "+") into a single event.
-  function addChangeToHistory(doc, change, selAfter, opId) {
-    var hist = doc.history;
-    hist.undone.length = 0;
-    var time = +new Date, cur;
-
-    if ((hist.lastOp == opId ||
-         hist.lastOrigin == change.origin && change.origin &&
-         ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) ||
-          change.origin.charAt(0) == "*")) &&
-        (cur = lastChangeEvent(hist, hist.lastOp == opId))) {
-      // Merge this change into the last event
-      var last = lst(cur.changes);
-      if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {
-        // Optimized case for simple insertion -- don't want to add
-        // new changesets for every character typed
-        last.to = changeEnd(change);
-      } else {
-        // Add new sub-event
-        cur.changes.push(historyChangeFromChange(doc, change));
-      }
-    } else {
-      // Can not be merged, start a new event.
-      var before = lst(hist.done);
-      if (!before || !before.ranges)
-        pushSelectionToHistory(doc.sel, hist.done);
-      cur = {changes: [historyChangeFromChange(doc, change)],
-             generation: hist.generation};
-      hist.done.push(cur);
-      while (hist.done.length > hist.undoDepth) {
-        hist.done.shift();
-        if (!hist.done[0].ranges) hist.done.shift();
-      }
-    }
-    hist.done.push(selAfter);
-    hist.generation = ++hist.maxGeneration;
-    hist.lastModTime = hist.lastSelTime = time;
-    hist.lastOp = hist.lastSelOp = opId;
-    hist.lastOrigin = hist.lastSelOrigin = change.origin;
-
-    if (!last) signal(doc, "historyAdded");
-  }
-
-  function selectionEventCanBeMerged(doc, origin, prev, sel) {
-    var ch = origin.charAt(0);
-    return ch == "*" ||
-      ch == "+" &&
-      prev.ranges.length == sel.ranges.length &&
-      prev.somethingSelected() == sel.somethingSelected() &&
-      new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500);
-  }
-
-  // Called whenever the selection changes, sets the new selection as
-  // the pending selection in the history, and pushes the old pending
-  // selection into the 'done' array when it was significantly
-  // different (in number of selected ranges, emptiness, or time).
-  function addSelectionToHistory(doc, sel, opId, options) {
-    var hist = doc.history, origin = options && options.origin;
-
-    // A new event is started when the previous origin does not match
-    // the current, or the origins don't allow matching. Origins
-    // starting with * are always merged, those starting with + are
-    // merged when similar and close together in time.
-    if (opId == hist.lastSelOp ||
-        (origin && hist.lastSelOrigin == origin &&
-         (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||
-          selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))
-      hist.done[hist.done.length - 1] = sel;
-    else
-      pushSelectionToHistory(sel, hist.done);
-
-    hist.lastSelTime = +new Date;
-    hist.lastSelOrigin = origin;
-    hist.lastSelOp = opId;
-    if (options && options.clearRedo !== false)
-      clearSelectionEvents(hist.undone);
-  }
-
-  function pushSelectionToHistory(sel, dest) {
-    var top = lst(dest);
-    if (!(top && top.ranges && top.equals(sel)))
-      dest.push(sel);
-  }
-
-  // Used to store marked span information in the history.
-  function attachLocalSpans(doc, change, from, to) {
-    var existing = change["spans_" + doc.id], n = 0;
-    doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) {
-      if (line.markedSpans)
-        (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans;
-      ++n;
-    });
-  }
-
-  // When un/re-doing restores text containing marked spans, those
-  // that have been explicitly cleared should not be restored.
-  function removeClearedSpans(spans) {
-    if (!spans) return null;
-    for (var i = 0, out; i < spans.length; ++i) {
-      if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); }
-      else if (out) out.push(spans[i]);
-    }
-    return !out ? spans : out.length ? out : null;
-  }
-
-  // Retrieve and filter the old marked spans stored in a change event.
-  function getOldSpans(doc, change) {
-    var found = change["spans_" + doc.id];
-    if (!found) return null;
-    for (var i = 0, nw = []; i < change.text.length; ++i)
-      nw.push(removeClearedSpans(found[i]));
-    return nw;
-  }
-
-  // Used both to provide a JSON-safe object in .getHistory, and, when
-  // detaching a document, to split the history in two
-  function copyHistoryArray(events, newGroup, instantiateSel) {
-    for (var i = 0, copy = []; i < events.length; ++i) {
-      var event = events[i];
-      if (event.ranges) {
-        copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);
-        continue;
-      }
-      var changes = event.changes, newChanges = [];
-      copy.push({changes: newChanges});
-      for (var j = 0; j < changes.length; ++j) {
-        var change = changes[j], m;
-        newChanges.push({from: change.from, to: change.to, text: change.text});
-        if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) {
-          if (indexOf(newGroup, Number(m[1])) > -1) {
-            lst(newChanges)[prop] = change[prop];
-            delete change[prop];
-          }
-        }
-      }
-    }
-    return copy;
-  }
-
-  // Rebasing/resetting history to deal with externally-sourced changes
-
-  function rebaseHistSelSingle(pos, from, to, diff) {
-    if (to < pos.line) {
-      pos.line += diff;
-    } else if (from < pos.line) {
-      pos.line = from;
-      pos.ch = 0;
-    }
-  }
-
-  // Tries to rebase an array of history events given a change in the
-  // document. If the change touches the same lines as the event, the
-  // event, and everything 'behind' it, is discarded. If the change is
-  // before the event, the event's positions are updated. Uses a
-  // copy-on-write scheme for the positions, to avoid having to
-  // reallocate them all on every rebase, but also avoid problems with
-  // shared position objects being unsafely updated.
-  function rebaseHistArray(array, from, to, diff) {
-    for (var i = 0; i < array.length; ++i) {
-      var sub = array[i], ok = true;
-      if (sub.ranges) {
-        if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }
-        for (var j = 0; j < sub.ranges.length; j++) {
-          rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);
-          rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);
-        }
-        continue;
-      }
-      for (var j = 0; j < sub.changes.length; ++j) {
-        var cur = sub.changes[j];
-        if (to < cur.from.line) {
-          cur.from = Pos(cur.from.line + diff, cur.from.ch);
-          cur.to = Pos(cur.to.line + diff, cur.to.ch);
-        } else if (from <= cur.to.line) {
-          ok = false;
-          break;
-        }
-      }
-      if (!ok) {
-        array.splice(0, i + 1);
-        i = 0;
-      }
-    }
-  }
-
-  function rebaseHist(hist, change) {
-    var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;
-    rebaseHistArray(hist.done, from, to, diff);
-    rebaseHistArray(hist.undone, from, to, diff);
-  }
-
-  // EVENT UTILITIES
-
-  // Due to the fact that we still support jurassic IE versions, some
-  // compatibility wrappers are needed.
-
-  var e_preventDefault = CodeMirror.e_preventDefault = function(e) {
-    if (e.preventDefault) e.preventDefault();
-    else e.returnValue = false;
-  };
-  var e_stopPropagation = CodeMirror.e_stopPropagation = function(e) {
-    if (e.stopPropagation) e.stopPropagation();
-    else e.cancelBubble = true;
-  };
-  function e_defaultPrevented(e) {
-    return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false;
-  }
-  var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);};
-
-  function e_target(e) {return e.target || e.srcElement;}
-  function e_button(e) {
-    var b = e.which;
-    if (b == null) {
-      if (e.button & 1) b = 1;
-      else if (e.button & 2) b = 3;
-      else if (e.button & 4) b = 2;
-    }
-    if (mac && e.ctrlKey && b == 1) b = 3;
-    return b;
-  }
-
-  // EVENT HANDLING
-
-  // Lightweight event framework. on/off also work on DOM nodes,
-  // registering native DOM handlers.
-
-  var on = CodeMirror.on = function(emitter, type, f) {
-    if (emitter.addEventListener)
-      emitter.addEventListener(type, f, false);
-    else if (emitter.attachEvent)
-      emitter.attachEvent("on" + type, f);
-    else {
-      var map = emitter._handlers || (emitter._handlers = {});
-      var arr = map[type] || (map[type] = []);
-      arr.push(f);
-    }
-  };
-
-  var noHandlers = []
-  function getHandlers(emitter, type, copy) {
-    var arr = emitter._handlers && emitter._handlers[type]
-    if (copy) return arr && arr.length > 0 ? arr.slice() : noHandlers
-    else return arr || noHandlers
-  }
-
-  var off = CodeMirror.off = function(emitter, type, f) {
-    if (emitter.removeEventListener)
-      emitter.removeEventListener(type, f, false);
-    else if (emitter.detachEvent)
-      emitter.detachEvent("on" + type, f);
-    else {
-      var handlers = getHandlers(emitter, type, false)
-      for (var i = 0; i < handlers.length; ++i)
-        if (handlers[i] == f) { handlers.splice(i, 1); break; }
-    }
-  };
-
-  var signal = CodeMirror.signal = function(emitter, type /*, values...*/) {
-    var handlers = getHandlers(emitter, type, true)
-    if (!handlers.length) return;
-    var args = Array.prototype.slice.call(arguments, 2);
-    for (var i = 0; i < handlers.length; ++i) handlers[i].apply(null, args);
-  };
-
-  var orphanDelayedCallbacks = null;
-
-  // Often, we want to signal events at a point where we are in the
-  // middle of some work, but don't want the handler to start calling
-  // other methods on the editor, which might be in an inconsistent
-  // state or simply not expect any other events to happen.
-  // signalLater looks whether there are any handlers, and schedules
-  // them to be executed when the last operation ends, or, if no
-  // operation is active, when a timeout fires.
-  function signalLater(emitter, type /*, values...*/) {
-    var arr = getHandlers(emitter, type, false)
-    if (!arr.length) return;
-    var args = Array.prototype.slice.call(arguments, 2), list;
-    if (operationGroup) {
-      list = operationGroup.delayedCallbacks;
-    } else if (orphanDelayedCallbacks) {
-      list = orphanDelayedCallbacks;
-    } else {
-      list = orphanDelayedCallbacks = [];
-      setTimeout(fireOrphanDelayed, 0);
-    }
-    function bnd(f) {return function(){f.apply(null, args);};};
-    for (var i = 0; i < arr.length; ++i)
-      list.push(bnd(arr[i]));
-  }
-
-  function fireOrphanDelayed() {
-    var delayed = orphanDelayedCallbacks;
-    orphanDelayedCallbacks = null;
-    for (var i = 0; i < delayed.length; ++i) delayed[i]();
-  }
-
-  // The DOM events that CodeMirror handles can be overridden by
-  // registering a (non-DOM) handler on the editor for the event name,
-  // and preventDefault-ing the event in that handler.
-  function signalDOMEvent(cm, e, override) {
-    if (typeof e == "string")
-      e = {type: e, preventDefault: function() { this.defaultPrevented = true; }};
-    signal(cm, override || e.type, cm, e);
-    return e_defaultPrevented(e) || e.codemirrorIgnore;
-  }
-
-  function signalCursorActivity(cm) {
-    var arr = cm._handlers && cm._handlers.cursorActivity;
-    if (!arr) return;
-    var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);
-    for (var i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1)
-      set.push(arr[i]);
-  }
-
-  function hasHandler(emitter, type) {
-    return getHandlers(emitter, type).length > 0
-  }
-
-  // Add on and off methods to a constructor's prototype, to make
-  // registering events on such objects more convenient.
-  function eventMixin(ctor) {
-    ctor.prototype.on = function(type, f) {on(this, type, f);};
-    ctor.prototype.off = function(type, f) {off(this, type, f);};
-  }
-
-  // MISC UTILITIES
-
-  // Number of pixels added to scroller and sizer to hide scrollbar
-  var scrollerGap = 30;
-
-  // Returned or thrown by various protocols to signal 'I'm not
-  // handling this'.
-  var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}};
-
-  // Reused option objects for setSelection & friends
-  var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"};
-
-  function Delayed() {this.id = null;}
-  Delayed.prototype.set = function(ms, f) {
-    clearTimeout(this.id);
-    this.id = setTimeout(f, ms);
-  };
-
-  // Counts the column offset in a string, taking tabs into account.
-  // Used mostly to find indentation.
-  var countColumn = CodeMirror.countColumn = function(string, end, tabSize, startIndex, startValue) {
-    if (end == null) {
-      end = string.search(/[^\s\u00a0]/);
-      if (end == -1) end = string.length;
-    }
-    for (var i = startIndex || 0, n = startValue || 0;;) {
-      var nextTab = string.indexOf("\t", i);
-      if (nextTab < 0 || nextTab >= end)
-        return n + (end - i);
-      n += nextTab - i;
-      n += tabSize - (n % tabSize);
-      i = nextTab + 1;
-    }
-  };
-
-  // The inverse of countColumn -- find the offset that corresponds to
-  // a particular column.
-  var findColumn = CodeMirror.findColumn = function(string, goal, tabSize) {
-    for (var pos = 0, col = 0;;) {
-      var nextTab = string.indexOf("\t", pos);
-      if (nextTab == -1) nextTab = string.length;
-      var skipped = nextTab - pos;
-      if (nextTab == string.length || col + skipped >= goal)
-        return pos + Math.min(skipped, goal - col);
-      col += nextTab - pos;
-      col += tabSize - (col % tabSize);
-      pos = nextTab + 1;
-      if (col >= goal) return pos;
-    }
-  }
-
-  var spaceStrs = [""];
-  function spaceStr(n) {
-    while (spaceStrs.length <= n)
-      spaceStrs.push(lst(spaceStrs) + " ");
-    return spaceStrs[n];
-  }
-
-  function lst(arr) { return arr[arr.length-1]; }
-
-  var selectInput = function(node) { node.select(); };
-  if (ios) // Mobile Safari apparently has a bug where select() is broken.
-    selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; };
-  else if (ie) // Suppress mysterious IE10 errors
-    selectInput = function(node) { try { node.select(); } catch(_e) {} };
-
-  function indexOf(array, elt) {
-    for (var i = 0; i < array.length; ++i)
-      if (array[i] == elt) return i;
-    return -1;
-  }
-  function map(array, f) {
-    var out = [];
-    for (var i = 0; i < array.length; i++) out[i] = f(array[i], i);
-    return out;
-  }
-
-  function nothing() {}
-
-  function createObj(base, props) {
-    var inst;
-    if (Object.create) {
-      inst = Object.create(base);
-    } else {
-      nothing.prototype = base;
-      inst = new nothing();
-    }
-    if (props) copyObj(props, inst);
-    return inst;
-  };
-
-  function copyObj(obj, target, overwrite) {
-    if (!target) target = {};
-    for (var prop in obj)
-      if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))
-        target[prop] = obj[prop];
-    return target;
-  }
-
-  function bind(f) {
-    var args = Array.prototype.slice.call(arguments, 1);
-    return function(){return f.apply(null, args);};
-  }
-
-  var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;
-  var isWordCharBasic = CodeMirror.isWordChar = function(ch) {
-    return /\w/.test(ch) || ch > "\x80" &&
-      (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch));
-  };
-  function isWordChar(ch, helper) {
-    if (!helper) return isWordCharBasic(ch);
-    if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) return true;
-    return helper.test(ch);
-  }
-
-  function isEmpty(obj) {
-    for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false;
-    return true;
-  }
-
-  // Extending unicode characters. A series of a non-extending char +
-  // any number of extending chars is treated as a single unit as far
-  // as editing and measuring is concerned. This is not fully correct,
-  // since some scripts/fonts/browsers also treat other configurations
-  // of code points as a group.
-  var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;
-  function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); }
-
-  // DOM UTILITIES
-
-  function elt(tag, content, className, style) {
-    var e = document.createElement(tag);
-    if (className) e.className = className;
-    if (style) e.style.cssText = style;
-    if (typeof content == "string") e.appendChild(document.createTextNode(content));
-    else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]);
-    return e;
-  }
-
-  var range;
-  if (document.createRange) range = function(node, start, end, endNode) {
-    var r = document.createRange();
-    r.setEnd(endNode || node, end);
-    r.setStart(node, start);
-    return r;
-  };
-  else range = function(node, start, end) {
-    var r = document.body.createTextRange();
-    try { r.moveToElementText(node.parentNode); }
-    catch(e) { return r; }
-    r.collapse(true);
-    r.moveEnd("character", end);
-    r.moveStart("character", start);
-    return r;
-  };
-
-  function removeChildren(e) {
-    for (var count = e.childNodes.length; count > 0; --count)
-      e.removeChild(e.firstChild);
-    return e;
-  }
-
-  function removeChildrenAndAdd(parent, e) {
-    return removeChildren(parent).appendChild(e);
-  }
-
-  var contains = CodeMirror.contains = function(parent, child) {
-    if (child.nodeType == 3) // Android browser always returns false when child is a textnode
-      child = child.parentNode;
-    if (parent.contains)
-      return parent.contains(child);
-    do {
-      if (child.nodeType == 11) child = child.host;
-      if (child == parent) return true;
-    } while (child = child.parentNode);
-  };
-
-  function activeElt() {
-    var activeElement = document.activeElement;
-    while (activeElement && activeElement.root && activeElement.root.activeElement)
-      activeElement = activeElement.root.activeElement;
-    return activeElement;
-  }
-  // Older versions of IE throws unspecified error when touching
-  // document.activeElement in some cases (during loading, in iframe)
-  if (ie && ie_version < 11) activeElt = function() {
-    try { return document.activeElement; }
-    catch(e) { return document.body; }
-  };
-
-  function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); }
-  var rmClass = CodeMirror.rmClass = function(node, cls) {
-    var current = node.className;
-    var match = classTest(cls).exec(current);
-    if (match) {
-      var after = current.slice(match.index + match[0].length);
-      node.className = current.slice(0, match.index) + (after ? match[1] + after : "");
-    }
-  };
-  var addClass = CodeMirror.addClass = function(node, cls) {
-    var current = node.className;
-    if (!classTest(cls).test(current)) node.className += (current ? " " : "") + cls;
-  };
-  function joinClasses(a, b) {
-    var as = a.split(" ");
-    for (var i = 0; i < as.length; i++)
-      if (as[i] && !classTest(as[i]).test(b)) b += " " + as[i];
-    return b;
-  }
-
-  // WINDOW-WIDE EVENTS
-
-  // These must be handled carefully, because naively registering a
-  // handler for each editor will cause the editors to never be
-  // garbage collected.
-
-  function forEachCodeMirror(f) {
-    if (!document.body.getElementsByClassName) return;
-    var byClass = document.body.getElementsByClassName("CodeMirror");
-    for (var i = 0; i < byClass.length; i++) {
-      var cm = byClass[i].CodeMirror;
-      if (cm) f(cm);
-    }
-  }
-
-  var globalsRegistered = false;
-  function ensureGlobalHandlers() {
-    if (globalsRegistered) return;
-    registerGlobalHandlers();
-    globalsRegistered = true;
-  }
-  function registerGlobalHandlers() {
-    // When the window resizes, we need to refresh active editors.
-    var resizeTimer;
-    on(window, "resize", function() {
-      if (resizeTimer == null) resizeTimer = setTimeout(function() {
-        resizeTimer = null;
-        forEachCodeMirror(onResize);
-      }, 100);
-    });
-    // When the window loses focus, we want to show the editor as blurred
-    on(window, "blur", function() {
-      forEachCodeMirror(onBlur);
-    });
-  }
-
-  // FEATURE DETECTION
-
-  // Detect drag-and-drop
-  var dragAndDrop = function() {
-    // There is *some* kind of drag-and-drop support in IE6-8, but I
-    // couldn't get it to work yet.
-    if (ie && ie_version < 9) return false;
-    var div = elt('div');
-    return "draggable" in div || "dragDrop" in div;
-  }();
-
-  var zwspSupported;
-  function zeroWidthElement(measure) {
-    if (zwspSupported == null) {
-      var test = elt("span", "\u200b");
-      removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")]));
-      if (measure.firstChild.offsetHeight != 0)
-        zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8);
-    }
-    var node = zwspSupported ? elt("span", "\u200b") :
-      elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px");
-    node.setAttribute("cm-text", "");
-    return node;
-  }
-
-  // Feature-detect IE's crummy client rect reporting for bidi text
-  var badBidiRects;
-  function hasBadBidiRects(measure) {
-    if (badBidiRects != null) return badBidiRects;
-    var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA"));
-    var r0 = range(txt, 0, 1).getBoundingClientRect();
-    if (!r0 || r0.left == r0.right) return false; // Safari returns null in some cases (#2780)
-    var r1 = range(txt, 1, 2).getBoundingClientRect();
-    return badBidiRects = (r1.right - r0.right < 3);
-  }
-
-  // See if "".split is the broken IE version, if so, provide an
-  // alternative way to split lines.
-  var splitLinesAuto = CodeMirror.splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) {
-    var pos = 0, result = [], l = string.length;
-    while (pos <= l) {
-      var nl = string.indexOf("\n", pos);
-      if (nl == -1) nl = string.length;
-      var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl);
-      var rt = line.indexOf("\r");
-      if (rt != -1) {
-        result.push(line.slice(0, rt));
-        pos += rt + 1;
-      } else {
-        result.push(line);
-        pos = nl + 1;
-      }
-    }
-    return result;
-  } : function(string){return string.split(/\r\n?|\n/);};
-
-  var hasSelection = window.getSelection ? function(te) {
-    try { return te.selectionStart != te.selectionEnd; }
-    catch(e) { return false; }
-  } : function(te) {
-    try {var range = te.ownerDocument.selection.createRange();}
-    catch(e) {}
-    if (!range || range.parentElement() != te) return false;
-    return range.compareEndPoints("StartToEnd", range) != 0;
-  };
-
-  var hasCopyEvent = (function() {
-    var e = elt("div");
-    if ("oncopy" in e) return true;
-    e.setAttribute("oncopy", "return;");
-    return typeof e.oncopy == "function";
-  })();
-
-  var badZoomedRects = null;
-  function hasBadZoomedRects(measure) {
-    if (badZoomedRects != null) return badZoomedRects;
-    var node = removeChildrenAndAdd(measure, elt("span", "x"));
-    var normal = node.getBoundingClientRect();
-    var fromRange = range(node, 0, 1).getBoundingClientRect();
-    return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1;
-  }
-
-  // KEY NAMES
-
-  var keyNames = CodeMirror.keyNames = {
-    3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt",
-    19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End",
-    36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert",
-    46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod",
-    106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete",
-    173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\",
-    221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete",
-    63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"
-  };
-  (function() {
-    // Number keys
-    for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i);
-    // Alphabetic keys
-    for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i);
-    // Function keys
-    for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i;
-  })();
-
-  // BIDI HELPERS
-
-  function iterateBidiSections(order, from, to, f) {
-    if (!order) return f(from, to, "ltr");
-    var found = false;
-    for (var i = 0; i < order.length; ++i) {
-      var part = order[i];
-      if (part.from < to && part.to > from || from == to && part.to == from) {
-        f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr");
-        found = true;
-      }
-    }
-    if (!found) f(from, to, "ltr");
-  }
-
-  function bidiLeft(part) { return part.level % 2 ? part.to : part.from; }
-  function bidiRight(part) { return part.level % 2 ? part.from : part.to; }
-
-  function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; }
-  function lineRight(line) {
-    var order = getOrder(line);
-    if (!order) return line.text.length;
-    return bidiRight(lst(order));
-  }
-
-  function lineStart(cm, lineN) {
-    var line = getLine(cm.doc, lineN);
-    var visual = visualLine(line);
-    if (visual != line) lineN = lineNo(visual);
-    var order = getOrder(visual);
-    var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual);
-    return Pos(lineN, ch);
-  }
-  function lineEnd(cm, lineN) {
-    var merged, line = getLine(cm.doc, lineN);
-    while (merged = collapsedSpanAtEnd(line)) {
-      line = merged.find(1, true).line;
-      lineN = null;
-    }
-    var order = getOrder(line);
-    var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line);
-    return Pos(lineN == null ? lineNo(line) : lineN, ch);
-  }
-  function lineStartSmart(cm, pos) {
-    var start = lineStart(cm, pos.line);
-    var line = getLine(cm.doc, start.line);
-    var order = getOrder(line);
-    if (!order || order[0].level == 0) {
-      var firstNonWS = Math.max(0, line.text.search(/\S/));
-      var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;
-      return Pos(start.line, inWS ? 0 : firstNonWS);
-    }
-    return start;
-  }
-
-  function compareBidiLevel(order, a, b) {
-    var linedir = order[0].level;
-    if (a == linedir) return true;
-    if (b == linedir) return false;
-    return a < b;
-  }
-  var bidiOther;
-  function getBidiPartAt(order, pos) {
-    bidiOther = null;
-    for (var i = 0, found; i < order.length; ++i) {
-      var cur = order[i];
-      if (cur.from < pos && cur.to > pos) return i;
-      if ((cur.from == pos || cur.to == pos)) {
-        if (found == null) {
-          found = i;
-        } else if (compareBidiLevel(order, cur.level, order[found].level)) {
-          if (cur.from != cur.to) bidiOther = found;
-          return i;
-        } else {
-          if (cur.from != cur.to) bidiOther = i;
-          return found;
-        }
-      }
-    }
-    return found;
-  }
-
-  function moveInLine(line, pos, dir, byUnit) {
-    if (!byUnit) return pos + dir;
-    do pos += dir;
-    while (pos > 0 && isExtendingChar(line.text.charAt(pos)));
-    return pos;
-  }
-
-  // This is needed in order to move 'visually' through bi-directional
-  // text -- i.e., pressing left should make the cursor go left, even
-  // when in RTL text. The tricky part is the 'jumps', where RTL and
-  // LTR text touch each other. This often requires the cursor offset
-  // to move more than one unit, in order to visually move one unit.
-  function moveVisually(line, start, dir, byUnit) {
-    var bidi = getOrder(line);
-    if (!bidi) return moveLogically(line, start, dir, byUnit);
-    var pos = getBidiPartAt(bidi, start), part = bidi[pos];
-    var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit);
-
-    for (;;) {
-      if (target > part.from && target < part.to) return target;
-      if (target == part.from || target == part.to) {
-        if (getBidiPartAt(bidi, target) == pos) return target;
-        part = bidi[pos += dir];
-        return (dir > 0) == part.level % 2 ? part.to : part.from;
-      } else {
-        part = bidi[pos += dir];
-        if (!part) return null;
-        if ((dir > 0) == part.level % 2)
-          target = moveInLine(line, part.to, -1, byUnit);
-        else
-          target = moveInLine(line, part.from, 1, byUnit);
-      }
-    }
-  }
-
-  function moveLogically(line, start, dir, byUnit) {
-    var target = start + dir;
-    if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir;
-    return target < 0 || target > line.text.length ? null : target;
-  }
-
-  // Bidirectional ordering algorithm
-  // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm
-  // that this (partially) implements.
-
-  // One-char codes used for character types:
-  // L (L):   Left-to-Right
-  // R (R):   Right-to-Left
-  // r (AL):  Right-to-Left Arabic
-  // 1 (EN):  European Number
-  // + (ES):  European Number Separator
-  // % (ET):  European Number Terminator
-  // n (AN):  Arabic Number
-  // , (CS):  Common Number Separator
-  // m (NSM): Non-Spacing Mark
-  // b (BN):  Boundary Neutral
-  // s (B):   Paragraph Separator
-  // t (S):   Segment Separator
-  // w (WS):  Whitespace
-  // N (ON):  Other Neutrals
-
-  // Returns null if characters are ordered as they appear
-  // (left-to-right), or an array of sections ({from, to, level}
-  // objects) in the order in which they occur visually.
-  var bidiOrdering = (function() {
-    // Character types for codepoints 0 to 0xff
-    var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN";
-    // Character types for codepoints 0x600 to 0x6ff
-    var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm";
-    function charType(code) {
-      if (code <= 0xf7) return lowTypes.charAt(code);
-      else if (0x590 <= code && code <= 0x5f4) return "R";
-      else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600);
-      else if (0x6ee <= code && code <= 0x8ac) return "r";
-      else if (0x2000 <= code && code <= 0x200b) return "w";
-      else if (code == 0x200c) return "b";
-      else return "L";
-    }
-
-    var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;
-    var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;
-    // Browsers seem to always treat the boundaries of block elements as being L.
-    var outerType = "L";
-
-    function BidiSpan(level, from, to) {
-      this.level = level;
-      this.from = from; this.to = to;
-    }
-
-    return function(str) {
-      if (!bidiRE.test(str)) return false;
-      var len = str.length, types = [];
-      for (var i = 0, type; i < len; ++i)
-        types.push(type = charType(str.charCodeAt(i)));
-
-      // W1. Examine each non-spacing mark (NSM) in the level run, and
-      // change the type of the NSM to the type of the previous
-      // character. If the NSM is at the start of the level run, it will
-      // get the type of sor.
-      for (var i = 0, prev = outerType; i < len; ++i) {
-        var type = types[i];
-        if (type == "m") types[i] = prev;
-        else prev = type;
-      }
-
-      // W2. Search backwards from each instance of a European number
-      // until the first strong type (R, L, AL, or sor) is found. If an
-      // AL is found, change the type of the European number to Arabic
-      // number.
-      // W3. Change all ALs to R.
-      for (var i = 0, cur = outerType; i < len; ++i) {
-        var type = types[i];
-        if (type == "1" && cur == "r") types[i] = "n";
-        else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; }
-      }
-
-      // W4. A single European separator between two European numbers
-      // changes to a European number. A single common separator between
-      // two numbers of the same type changes to that type.
-      for (var i = 1, prev = types[0]; i < len - 1; ++i) {
-        var type = types[i];
-        if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1";
-        else if (type == "," && prev == types[i+1] &&
-                 (prev == "1" || prev == "n")) types[i] = prev;
-        prev = type;
-      }
-
-      // W5. A sequence of European terminators adjacent to European
-      // numbers changes to all European numbers.
-      // W6. Otherwise, separators and terminators change to Other
-      // Neutral.
-      for (var i = 0; i < len; ++i) {
-        var type = types[i];
-        if (type == ",") types[i] = "N";
-        else if (type == "%") {
-          for (var end = i + 1; end < len && types[end] == "%"; ++end) {}
-          var replace = (i && types[i-1] == "!") || (end < len && types[end] == "1") ? "1" : "N";
-          for (var j = i; j < end; ++j) types[j] = replace;
-          i = end - 1;
-        }
-      }
-
-      // W7. Search backwards from each instance of a European number
-      // until the first strong type (R, L, or sor) is found. If an L is
-      // found, then change the type of the European number to L.
-      for (var i = 0, cur = outerType; i < len; ++i) {
-        var type = types[i];
-        if (cur == "L" && type == "1") types[i] = "L";
-        else if (isStrong.test(type)) cur = type;
-      }
-
-      // N1. A sequence of neutrals takes the direction of the
-      // surrounding strong text if the text on both sides has the same
-      // direction. European and Arabic numbers act as if they were R in
-      // terms of their influence on neutrals. Start-of-level-run (sor)
-      // and end-of-level-run (eor) are used at level run boundaries.
-      // N2. Any remaining neutrals take the embedding direction.
-      for (var i = 0; i < len; ++i) {
-        if (isNeutral.test(types[i])) {
-          for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {}
-          var before = (i ? types[i-1] : outerType) == "L";
-          var after = (end < len ? types[end] : outerType) == "L";
-          var replace = before || after ? "L" : "R";
-          for (var j = i; j < end; ++j) types[j] = replace;
-          i = end - 1;
-        }
-      }
-
-      // Here we depart from the documented algorithm, in order to avoid
-      // building up an actual levels array. Since there are only three
-      // levels (0, 1, 2) in an implementation that doesn't take
-      // explicit embedding into account, we can build up the order on
-      // the fly, without following the level-based algorithm.
-      var order = [], m;
-      for (var i = 0; i < len;) {
-        if (countsAsLeft.test(types[i])) {
-          var start = i;
-          for (++i; i < len && countsAsLeft.test(types[i]); ++i) {}
-          order.push(new BidiSpan(0, start, i));
-        } else {
-          var pos = i, at = order.length;
-          for (++i; i < len && types[i] != "L"; ++i) {}
-          for (var j = pos; j < i;) {
-            if (countsAsNum.test(types[j])) {
-              if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j));
-              var nstart = j;
-              for (++j; j < i && countsAsNum.test(types[j]); ++j) {}
-              order.splice(at, 0, new BidiSpan(2, nstart, j));
-              pos = j;
-            } else ++j;
-          }
-          if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i));
-        }
-      }
-      if (order[0].level == 1 && (m = str.match(/^\s+/))) {
-        order[0].from = m[0].length;
-        order.unshift(new BidiSpan(0, 0, m[0].length));
-      }
-      if (lst(order).level == 1 && (m = str.match(/\s+$/))) {
-        lst(order).to -= m[0].length;
-        order.push(new BidiSpan(0, len - m[0].length, len));
-      }
-      if (order[0].level == 2)
-        order.unshift(new BidiSpan(1, order[0].to, order[0].to));
-      if (order[0].level != lst(order).level)
-        order.push(new BidiSpan(order[0].level, len, len));
-
-      return order;
-    };
-  })();
-
-  // THE END
-
-  CodeMirror.version = "5.15.2";
-
-  return CodeMirror;
-});
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/js/javascript.js b/asterixdb/asterix-app/src/main/resources/queryui/js/javascript.js
deleted file mode 100644
index e0e1bc8..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/js/javascript.js
+++ /dev/null
@@ -1,766 +0,0 @@
-/*
- * Copyright (C) 2016 by Marijn Haverbeke <marijnh@gmail.com> and others
- *
- * 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.
- */
-// TODO actually recognize syntax of TypeScript constructs
-
-(function(mod) {
-  if (typeof exports == "object" && typeof module == "object") // CommonJS
-    mod(require("../../lib/codemirror"));
-  else if (typeof define == "function" && define.amd) // AMD
-    define(["../../lib/codemirror"], mod);
-  else // Plain browser env
-    mod(CodeMirror);
-})(function(CodeMirror) {
-"use strict";
-
-function expressionAllowed(stream, state, backUp) {
-  return /^(?:operator|sof|keyword c|case|new|[\[{}\(,;:]|=>)$/.test(state.lastType) ||
-    (state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))))
-}
-
-CodeMirror.defineMode("javascript", function(config, parserConfig) {
-  var indentUnit = config.indentUnit;
-  var statementIndent = parserConfig.statementIndent;
-  var jsonldMode = parserConfig.jsonld;
-  var jsonMode = parserConfig.json || jsonldMode;
-  var isTS = parserConfig.typescript;
-  var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/;
-
-  // Tokenizer
-
-  var keywords = function(){
-    function kw(type) {return {type: type, style: "keyword"};}
-    var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c");
-    var operator = kw("operator"), atom = {type: "atom", style: "atom"};
-
-    var jsKeywords = {
-      "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B,
-      "return": C, "break": C, "continue": C, "new": kw("new"), "delete": C, "throw": C, "debugger": C,
-      "var": kw("var"), "const": kw("var"), "let": kw("var"),
-      "function": kw("function"), "catch": kw("catch"),
-      "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"),
-      "in": operator, "typeof": operator, "instanceof": operator,
-      "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom,
-      "this": kw("this"), "class": kw("class"), "super": kw("atom"),
-      "yield": C, "export": kw("export"), "import": kw("import"), "extends": C,
-      "await": C, "async": kw("async")
-    };
-
-    // Extend the 'normal' keywords with the TypeScript language extensions
-    if (isTS) {
-      var type = {type: "variable", style: "variable-3"};
-      var tsKeywords = {
-        // object-like things
-        "interface": kw("class"),
-        "implements": C,
-        "namespace": C,
-        "module": kw("module"),
-        "enum": kw("module"),
-
-        // scope modifiers
-        "public": kw("modifier"),
-        "private": kw("modifier"),
-        "protected": kw("modifier"),
-        "abstract": kw("modifier"),
-
-        // operators
-        "as": operator,
-
-        // types
-        "string": type, "number": type, "boolean": type, "any": type
-      };
-
-      for (var attr in tsKeywords) {
-        jsKeywords[attr] = tsKeywords[attr];
-      }
-    }
-
-    return jsKeywords;
-  }();
-
-  var isOperatorChar = /[+\-*&%=<>!?|~^]/;
-  var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;
-
-  function readRegexp(stream) {
-    var escaped = false, next, inSet = false;
-    while ((next = stream.next()) != null) {
-      if (!escaped) {
-        if (next == "/" && !inSet) return;
-        if (next == "[") inSet = true;
-        else if (inSet && next == "]") inSet = false;
-      }
-      escaped = !escaped && next == "\\";
-    }
-  }
-
-  // Used as scratch variables to communicate multiple values without
-  // consing up tons of objects.
-  var type, content;
-  function ret(tp, style, cont) {
-    type = tp; content = cont;
-    return style;
-  }
-  function tokenBase(stream, state) {
-    var ch = stream.next();
-    if (ch == '"' || ch == "'") {
-      state.tokenize = tokenString(ch);
-      return state.tokenize(stream, state);
-    } else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) {
-      return ret("number", "number");
-    } else if (ch == "." && stream.match("..")) {
-      return ret("spread", "meta");
-    } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) {
-      return ret(ch);
-    } else if (ch == "=" && stream.eat(">")) {
-      return ret("=>", "operator");
-    } else if (ch == "0" && stream.eat(/x/i)) {
-      stream.eatWhile(/[\da-f]/i);
-      return ret("number", "number");
-    } else if (ch == "0" && stream.eat(/o/i)) {
-      stream.eatWhile(/[0-7]/i);
-      return ret("number", "number");
-    } else if (ch == "0" && stream.eat(/b/i)) {
-      stream.eatWhile(/[01]/i);
-      return ret("number", "number");
-    } else if (/\d/.test(ch)) {
-      stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/);
-      return ret("number", "number");
-    } else if (ch == "/") {
-      if (stream.eat("*")) {
-        state.tokenize = tokenComment;
-        return tokenComment(stream, state);
-      } else if (stream.eat("/")) {
-        stream.skipToEnd();
-        return ret("comment", "comment");
-      } else if (expressionAllowed(stream, state, 1)) {
-        readRegexp(stream);
-        stream.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/);
-        return ret("regexp", "string-2");
-      } else {
-        stream.eatWhile(isOperatorChar);
-        return ret("operator", "operator", stream.current());
-      }
-    } else if (ch == "`") {
-      state.tokenize = tokenQuasi;
-      return tokenQuasi(stream, state);
-    } else if (ch == "#") {
-      stream.skipToEnd();
-      return ret("error", "error");
-    } else if (isOperatorChar.test(ch)) {
-      stream.eatWhile(isOperatorChar);
-      return ret("operator", "operator", stream.current());
-    } else if (wordRE.test(ch)) {
-      stream.eatWhile(wordRE);
-      var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];
-      return (known && state.lastType != ".") ? ret(known.type, known.style, word) :
-                     ret("variable", "variable", word);
-    }
-  }
-
-  function tokenString(quote) {
-    return function(stream, state) {
-      var escaped = false, next;
-      if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){
-        state.tokenize = tokenBase;
-        return ret("jsonld-keyword", "meta");
-      }
-      while ((next = stream.next()) != null) {
-        if (next == quote && !escaped) break;
-        escaped = !escaped && next == "\\";
-      }
-      if (!escaped) state.tokenize = tokenBase;
-      return ret("string", "string");
-    };
-  }
-
-  function tokenComment(stream, state) {
-    var maybeEnd = false, ch;
-    while (ch = stream.next()) {
-      if (ch == "/" && maybeEnd) {
-        state.tokenize = tokenBase;
-        break;
-      }
-      maybeEnd = (ch == "*");
-    }
-    return ret("comment", "comment");
-  }
-
-  function tokenQuasi(stream, state) {
-    var escaped = false, next;
-    while ((next = stream.next()) != null) {
-      if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) {
-        state.tokenize = tokenBase;
-        break;
-      }
-      escaped = !escaped && next == "\\";
-    }
-    return ret("quasi", "string-2", stream.current());
-  }
-
-  var brackets = "([{}])";
-  // This is a crude lookahead trick to try and notice that we're
-  // parsing the argument patterns for a fat-arrow function before we
-  // actually hit the arrow token. It only works if the arrow is on
-  // the same line as the arguments and there's no strange noise
-  // (comments) in between. Fallback is to only notice when we hit the
-  // arrow, and not declare the arguments as locals for the arrow
-  // body.
-  function findFatArrow(stream, state) {
-    if (state.fatArrowAt) state.fatArrowAt = null;
-    var arrow = stream.string.indexOf("=>", stream.start);
-    if (arrow < 0) return;
-
-    var depth = 0, sawSomething = false;
-    for (var pos = arrow - 1; pos >= 0; --pos) {
-      var ch = stream.string.charAt(pos);
-      var bracket = brackets.indexOf(ch);
-      if (bracket >= 0 && bracket < 3) {
-        if (!depth) { ++pos; break; }
-        if (--depth == 0) break;
-      } else if (bracket >= 3 && bracket < 6) {
-        ++depth;
-      } else if (wordRE.test(ch)) {
-        sawSomething = true;
-      } else if (/["'\/]/.test(ch)) {
-        return;
-      } else if (sawSomething && !depth) {
-        ++pos;
-        break;
-      }
-    }
-    if (sawSomething && !depth) state.fatArrowAt = pos;
-  }
-
-  // Parser
-
-  var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true};
-
-  function JSLexical(indented, column, type, align, prev, info) {
-    this.indented = indented;
-    this.column = column;
-    this.type = type;
-    this.prev = prev;
-    this.info = info;
-    if (align != null) this.align = align;
-  }
-
-  function inScope(state, varname) {
-    for (var v = state.localVars; v; v = v.next)
-      if (v.name == varname) return true;
-    for (var cx = state.context; cx; cx = cx.prev) {
-      for (var v = cx.vars; v; v = v.next)
-        if (v.name == varname) return true;
-    }
-  }
-
-  function parseJS(state, style, type, content, stream) {
-    var cc = state.cc;
-    // Communicate our context to the combinators.
-    // (Less wasteful than consing up a hundred closures on every call.)
-    cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style;
-
-    if (!state.lexical.hasOwnProperty("align"))
-      state.lexical.align = true;
-
-    while(true) {
-      var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;
-      if (combinator(type, content)) {
-        while(cc.length && cc[cc.length - 1].lex)
-          cc.pop()();
-        if (cx.marked) return cx.marked;
-        if (type == "variable" && inScope(state, content)) return "variable-2";
-        return style;
-      }
-    }
-  }
-
-  // Combinator utils
-
-  var cx = {state: null, column: null, marked: null, cc: null};
-  function pass() {
-    for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);
-  }
-  function cont() {
-    pass.apply(null, arguments);
-    return true;
-  }
-  function register(varname) {
-    function inList(list) {
-      for (var v = list; v; v = v.next)
-        if (v.name == varname) return true;
-      return false;
-    }
-    var state = cx.state;
-    cx.marked = "def";
-    if (state.context) {
-      if (inList(state.localVars)) return;
-      state.localVars = {name: varname, next: state.localVars};
-    } else {
-      if (inList(state.globalVars)) return;
-      if (parserConfig.globalVars)
-        state.globalVars = {name: varname, next: state.globalVars};
-    }
-  }
-
-  // Combinators
-
-  var defaultVars = {name: "this", next: {name: "arguments"}};
-  function pushcontext() {
-    cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};
-    cx.state.localVars = defaultVars;
-  }
-  function popcontext() {
-    cx.state.localVars = cx.state.context.vars;
-    cx.state.context = cx.state.context.prev;
-  }
-  function pushlex(type, info) {
-    var result = function() {
-      var state = cx.state, indent = state.indented;
-      if (state.lexical.type == "stat") indent = state.lexical.indented;
-      else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev)
-        indent = outer.indented;
-      state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);
-    };
-    result.lex = true;
-    return result;
-  }
-  function poplex() {
-    var state = cx.state;
-    if (state.lexical.prev) {
-      if (state.lexical.type == ")")
-        state.indented = state.lexical.indented;
-      state.lexical = state.lexical.prev;
-    }
-  }
-  poplex.lex = true;
-
-  function expect(wanted) {
-    function exp(type) {
-      if (type == wanted) return cont();
-      else if (wanted == ";") return pass();
-      else return cont(exp);
-    };
-    return exp;
-  }
-
-  function statement(type, value) {
-    if (type == "var") return cont(pushlex("vardef", value.length), vardef, expect(";"), poplex);
-    if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex);
-    if (type == "keyword b") return cont(pushlex("form"), statement, poplex);
-    if (type == "{") return cont(pushlex("}"), block, poplex);
-    if (type == ";") return cont();
-    if (type == "if") {
-      if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex)
-        cx.state.cc.pop()();
-      return cont(pushlex("form"), expression, statement, poplex, maybeelse);
-    }
-    if (type == "function") return cont(functiondef);
-    if (type == "for") return cont(pushlex("form"), forspec, statement, poplex);
-    if (type == "variable") return cont(pushlex("stat"), maybelabel);
-    if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"),
-                                      block, poplex, poplex);
-    if (type == "case") return cont(expression, expect(":"));
-    if (type == "default") return cont(expect(":"));
-    if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"),
-                                     statement, poplex, popcontext);
-    if (type == "class") return cont(pushlex("form"), className, poplex);
-    if (type == "export") return cont(pushlex("stat"), afterExport, poplex);
-    if (type == "import") return cont(pushlex("stat"), afterImport, poplex);
-    if (type == "module") return cont(pushlex("form"), pattern, pushlex("}"), expect("{"), block, poplex, poplex)
-    if (type == "async") return cont(statement)
-    return pass(pushlex("stat"), expression, expect(";"), poplex);
-  }
-  function expression(type) {
-    return expressionInner(type, false);
-  }
-  function expressionNoComma(type) {
-    return expressionInner(type, true);
-  }
-  function expressionInner(type, noComma) {
-    if (cx.state.fatArrowAt == cx.stream.start) {
-      var body = noComma ? arrowBodyNoComma : arrowBody;
-      if (type == "(") return cont(pushcontext, pushlex(")"), commasep(pattern, ")"), poplex, expect("=>"), body, popcontext);
-      else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext);
-    }
-
-    var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;
-    if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);
-    if (type == "function") return cont(functiondef, maybeop);
-    if (type == "keyword c") return cont(noComma ? maybeexpressionNoComma : maybeexpression);
-    if (type == "(") return cont(pushlex(")"), maybeexpression, comprehension, expect(")"), poplex, maybeop);
-    if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression);
-    if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop);
-    if (type == "{") return contCommasep(objprop, "}", null, maybeop);
-    if (type == "quasi") return pass(quasi, maybeop);
-    if (type == "new") return cont(maybeTarget(noComma));
-    return cont();
-  }
-  function maybeexpression(type) {
-    if (type.match(/[;\}\)\],]/)) return pass();
-    return pass(expression);
-  }
-  function maybeexpressionNoComma(type) {
-    if (type.match(/[;\}\)\],]/)) return pass();
-    return pass(expressionNoComma);
-  }
-
-  function maybeoperatorComma(type, value) {
-    if (type == ",") return cont(expression);
-    return maybeoperatorNoComma(type, value, false);
-  }
-  function maybeoperatorNoComma(type, value, noComma) {
-    var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;
-    var expr = noComma == false ? expression : expressionNoComma;
-    if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);
-    if (type == "operator") {
-      if (/\+\+|--/.test(value)) return cont(me);
-      if (value == "?") return cont(expression, expect(":"), expr);
-      return cont(expr);
-    }
-    if (type == "quasi") { return pass(quasi, me); }
-    if (type == ";") return;
-    if (type == "(") return contCommasep(expressionNoComma, ")", "call", me);
-    if (type == ".") return cont(property, me);
-    if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me);
-  }
-  function quasi(type, value) {
-    if (type != "quasi") return pass();
-    if (value.slice(value.length - 2) != "${") return cont(quasi);
-    return cont(expression, continueQuasi);
-  }
-  function continueQuasi(type) {
-    if (type == "}") {
-      cx.marked = "string-2";
-      cx.state.tokenize = tokenQuasi;
-      return cont(quasi);
-    }
-  }
-  function arrowBody(type) {
-    findFatArrow(cx.stream, cx.state);
-    return pass(type == "{" ? statement : expression);
-  }
-  function arrowBodyNoComma(type) {
-    findFatArrow(cx.stream, cx.state);
-    return pass(type == "{" ? statement : expressionNoComma);
-  }
-  function maybeTarget(noComma) {
-    return function(type) {
-      if (type == ".") return cont(noComma ? targetNoComma : target);
-      else return pass(noComma ? expressionNoComma : expression);
-    };
-  }
-  function target(_, value) {
-    if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorComma); }
-  }
-  function targetNoComma(_, value) {
-    if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorNoComma); }
-  }
-  function maybelabel(type) {
-    if (type == ":") return cont(poplex, statement);
-    return pass(maybeoperatorComma, expect(";"), poplex);
-  }
-  function property(type) {
-    if (type == "variable") {cx.marked = "property"; return cont();}
-  }
-  function objprop(type, value) {
-    if (type == "variable" || cx.style == "keyword") {
-      cx.marked = "property";
-      if (value == "get" || value == "set") return cont(getterSetter);
-      return cont(afterprop);
-    } else if (type == "number" || type == "string") {
-      cx.marked = jsonldMode ? "property" : (cx.style + " property");
-      return cont(afterprop);
-    } else if (type == "jsonld-keyword") {
-      return cont(afterprop);
-    } else if (type == "modifier") {
-      return cont(objprop)
-    } else if (type == "[") {
-      return cont(expression, expect("]"), afterprop);
-    } else if (type == "spread") {
-      return cont(expression);
-    }
-  }
-  function getterSetter(type) {
-    if (type != "variable") return pass(afterprop);
-    cx.marked = "property";
-    return cont(functiondef);
-  }
-  function afterprop(type) {
-    if (type == ":") return cont(expressionNoComma);
-    if (type == "(") return pass(functiondef);
-  }
-  function commasep(what, end) {
-    function proceed(type, value) {
-      if (type == ",") {
-        var lex = cx.state.lexical;
-        if (lex.info == "call") lex.pos = (lex.pos || 0) + 1;
-        return cont(what, proceed);
-      }
-      if (type == end || value == end) return cont();
-      return cont(expect(end));
-    }
-    return function(type, value) {
-      if (type == end || value == end) return cont();
-      return pass(what, proceed);
-    };
-  }
-  function contCommasep(what, end, info) {
-    for (var i = 3; i < arguments.length; i++)
-      cx.cc.push(arguments[i]);
-    return cont(pushlex(end, info), commasep(what, end), poplex);
-  }
-  function block(type) {
-    if (type == "}") return cont();
-    return pass(statement, block);
-  }
-  function maybetype(type) {
-    if (isTS && type == ":") return cont(typeexpr);
-  }
-  function maybedefault(_, value) {
-    if (value == "=") return cont(expressionNoComma);
-  }
-  function typeexpr(type) {
-    if (type == "variable") {cx.marked = "variable-3"; return cont(afterType);}
-  }
-  function afterType(type, value) {
-    if (value == "<") return cont(commasep(typeexpr, ">"), afterType)
-    if (type == "[") return cont(expect("]"), afterType)
-  }
-  function vardef() {
-    return pass(pattern, maybetype, maybeAssign, vardefCont);
-  }
-  function pattern(type, value) {
-    if (type == "modifier") return cont(pattern)
-    if (type == "variable") { register(value); return cont(); }
-    if (type == "spread") return cont(pattern);
-    if (type == "[") return contCommasep(pattern, "]");
-    if (type == "{") return contCommasep(proppattern, "}");
-  }
-  function proppattern(type, value) {
-    if (type == "variable" && !cx.stream.match(/^\s*:/, false)) {
-      register(value);
-      return cont(maybeAssign);
-    }
-    if (type == "variable") cx.marked = "property";
-    if (type == "spread") return cont(pattern);
-    if (type == "}") return pass();
-    return cont(expect(":"), pattern, maybeAssign);
-  }
-  function maybeAssign(_type, value) {
-    if (value == "=") return cont(expressionNoComma);
-  }
-  function vardefCont(type) {
-    if (type == ",") return cont(vardef);
-  }
-  function maybeelse(type, value) {
-    if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex);
-  }
-  function forspec(type) {
-    if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex);
-  }
-  function forspec1(type) {
-    if (type == "var") return cont(vardef, expect(";"), forspec2);
-    if (type == ";") return cont(forspec2);
-    if (type == "variable") return cont(formaybeinof);
-    return pass(expression, expect(";"), forspec2);
-  }
-  function formaybeinof(_type, value) {
-    if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); }
-    return cont(maybeoperatorComma, forspec2);
-  }
-  function forspec2(type, value) {
-    if (type == ";") return cont(forspec3);
-    if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); }
-    return pass(expression, expect(";"), forspec3);
-  }
-  function forspec3(type) {
-    if (type != ")") cont(expression);
-  }
-  function functiondef(type, value) {
-    if (value == "*") {cx.marked = "keyword"; return cont(functiondef);}
-    if (type == "variable") {register(value); return cont(functiondef);}
-    if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, maybetype, statement, popcontext);
-  }
-  function funarg(type) {
-    if (type == "spread") return cont(funarg);
-    return pass(pattern, maybetype, maybedefault);
-  }
-  function className(type, value) {
-    if (type == "variable") {register(value); return cont(classNameAfter);}
-  }
-  function classNameAfter(type, value) {
-    if (value == "extends") return cont(expression, classNameAfter);
-    if (type == "{") return cont(pushlex("}"), classBody, poplex);
-  }
-  function classBody(type, value) {
-    if (type == "variable" || cx.style == "keyword") {
-      if (value == "static") {
-        cx.marked = "keyword";
-        return cont(classBody);
-      }
-      cx.marked = "property";
-      if (value == "get" || value == "set") return cont(classGetterSetter, functiondef, classBody);
-      return cont(functiondef, classBody);
-    }
-    if (value == "*") {
-      cx.marked = "keyword";
-      return cont(classBody);
-    }
-    if (type == ";") return cont(classBody);
-    if (type == "}") return cont();
-  }
-  function classGetterSetter(type) {
-    if (type != "variable") return pass();
-    cx.marked = "property";
-    return cont();
-  }
-  function afterExport(_type, value) {
-    if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); }
-    if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); }
-    return pass(statement);
-  }
-  function afterImport(type) {
-    if (type == "string") return cont();
-    return pass(importSpec, maybeFrom);
-  }
-  function importSpec(type, value) {
-    if (type == "{") return contCommasep(importSpec, "}");
-    if (type == "variable") register(value);
-    if (value == "*") cx.marked = "keyword";
-    return cont(maybeAs);
-  }
-  function maybeAs(_type, value) {
-    if (value == "as") { cx.marked = "keyword"; return cont(importSpec); }
-  }
-  function maybeFrom(_type, value) {
-    if (value == "from") { cx.marked = "keyword"; return cont(expression); }
-  }
-  function arrayLiteral(type) {
-    if (type == "]") return cont();
-    return pass(expressionNoComma, maybeArrayComprehension);
-  }
-  function maybeArrayComprehension(type) {
-    if (type == "for") return pass(comprehension, expect("]"));
-    if (type == ",") return cont(commasep(maybeexpressionNoComma, "]"));
-    return pass(commasep(expressionNoComma, "]"));
-  }
-  function comprehension(type) {
-    if (type == "for") return cont(forspec, comprehension);
-    if (type == "if") return cont(expression, comprehension);
-  }
-
-  function isContinuedStatement(state, textAfter) {
-    return state.lastType == "operator" || state.lastType == "," ||
-      isOperatorChar.test(textAfter.charAt(0)) ||
-      /[,.]/.test(textAfter.charAt(0));
-  }
-
-  // Interface
-
-  return {
-    startState: function(basecolumn) {
-      var state = {
-        tokenize: tokenBase,
-        lastType: "sof",
-        cc: [],
-        lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false),
-        localVars: parserConfig.localVars,
-        context: parserConfig.localVars && {vars: parserConfig.localVars},
-        indented: basecolumn || 0
-      };
-      if (parserConfig.globalVars && typeof parserConfig.globalVars == "object")
-        state.globalVars = parserConfig.globalVars;
-      return state;
-    },
-
-    token: function(stream, state) {
-      if (stream.sol()) {
-        if (!state.lexical.hasOwnProperty("align"))
-          state.lexical.align = false;
-        state.indented = stream.indentation();
-        findFatArrow(stream, state);
-      }
-      if (state.tokenize != tokenComment && stream.eatSpace()) return null;
-      var style = state.tokenize(stream, state);
-      if (type == "comment") return style;
-      state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type;
-      return parseJS(state, style, type, content, stream);
-    },
-
-    indent: function(state, textAfter) {
-      if (state.tokenize == tokenComment) return CodeMirror.Pass;
-      if (state.tokenize != tokenBase) return 0;
-      var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical;
-      // Kludge to prevent 'maybelse' from blocking lexical scope pops
-      if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {
-        var c = state.cc[i];
-        if (c == poplex) lexical = lexical.prev;
-        else if (c != maybeelse) break;
-      }
-      if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev;
-      if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat")
-        lexical = lexical.prev;
-      var type = lexical.type, closing = firstChar == type;
-
-      if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info + 1 : 0);
-      else if (type == "form" && firstChar == "{") return lexical.indented;
-      else if (type == "form") return lexical.indented + indentUnit;
-      else if (type == "stat")
-        return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);
-      else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false)
-        return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit);
-      else if (lexical.align) return lexical.column + (closing ? 0 : 1);
-      else return lexical.indented + (closing ? 0 : indentUnit);
-    },
-
-    electricInput: /^\s*(?:case .*?:|default:|\{|\})$/,
-    blockCommentStart: jsonMode ? null : "/*",
-    blockCommentEnd: jsonMode ? null : "*/",
-    lineComment: jsonMode ? null : "//",
-    fold: "brace",
-    closeBrackets: "()[]{}''\"\"``",
-
-    helperType: jsonMode ? "json" : "javascript",
-    jsonldMode: jsonldMode,
-    jsonMode: jsonMode,
-
-    expressionAllowed: expressionAllowed,
-    skipExpression: function(state) {
-      var top = state.cc[state.cc.length - 1]
-      if (top == expression || top == expressionNoComma) state.cc.pop()
-    }
-  };
-});
-
-CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/);
-
-CodeMirror.defineMIME("text/javascript", "javascript");
-CodeMirror.defineMIME("text/ecmascript", "javascript");
-CodeMirror.defineMIME("application/javascript", "javascript");
-CodeMirror.defineMIME("application/x-javascript", "javascript");
-CodeMirror.defineMIME("application/ecmascript", "javascript");
-CodeMirror.defineMIME("application/json", {name: "javascript", json: true});
-CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true});
-CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true});
-CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true });
-CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true });
-
-});
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/js/jquery-1.12.4.min.js b/asterixdb/asterix-app/src/main/resources/queryui/js/jquery-1.12.4.min.js
deleted file mode 100644
index f23115a..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/js/jquery-1.12.4.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0;
-}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",j.childNodes[0].style.borderCollapse="separate",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g=l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Sa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Oa.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+eb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{
-marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g,sb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(sb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Bb=/[\t\r\n\f]/g;function Cb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Cb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Cb(c)+" ").replace(Bb," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Db=a.location,Eb=n.now(),Fb=/\?/,Gb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\/\//,Nb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ob={},Pb={},Qb="*/".concat("*"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Rb,type:"GET",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+"").replace(Hb,"").replace(Mb,Sb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Sb[3]||("http:"===Sb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,"$1_="+Eb++):f+(Fb.test(f)?"&":"?")+"_="+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Qb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Yb(a){return a.style&&a.style.display||n.css(a,"display")}function Zb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if("none"===Yb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\[\]$/,ac=/\r?\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)dc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)dc(c,a[c],b,e);return d.join("&").replace($b,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(ac,"\r\n")}}):{name:b.name,value:c.replace(ac,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&"withCredentials"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=jc.pop()||n.expando+"_"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&kc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(kc,"$1"+e):b.jsonp!==!1&&(b.url+=(Fb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({
-padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/js/json-formatter.min.js b/asterixdb/asterix-app/src/main/resources/queryui/js/json-formatter.min.js
deleted file mode 100644
index 77882c0..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/js/json-formatter.min.js
+++ /dev/null
@@ -1 +0,0 @@
-/*! jsonformatter 0.6.0 - 2016-04-29T03:24:40.680Z | (c) 2014 Mohsen Azimi | http://www.apache.org/licenses/LICENSE-2.0 */"use strict";angular.module("jsonFormatter",["RecursionHelper"]).provider("JSONFormatterConfig",function(){var n=!1,e=100,t=5;return{get hoverPreviewEnabled(){return n},set hoverPreviewEnabled(e){n=!!e},get hoverPreviewArrayCount(){return e},set hoverPreviewArrayCount(n){e=parseInt(n,10)},get hoverPreviewFieldCount(){return t},set hoverPreviewFieldCount(n){t=parseInt(n,10)},$get:function(){return{hoverPreviewEnabled:n,hoverPreviewArrayCount:e,hoverPreviewFieldCount:t}}}}).directive("jsonFormatter",["RecursionHelper","JSONFormatterConfig",function(n,e){function t(n){return n.replace('"','"')}function r(n){if(void 0===n)return"";if(null===n)return"Object";if("object"==typeof n&&!n.constructor)return"Object";var e=/function (.{1,})\(/,t=e.exec(n.constructor.toString());return t&&t.length>1?t[1]:""}function o(n){return null===n?"null":typeof n}function s(n,e){var r=o(n);return"null"===r||"undefined"===r?r:("string"===r&&(e='"'+t(e)+'"'),"function"===r?n.toString().replace(/[\r\n]/g,"").replace(/\{.*\}/,"")+"{…}":e)}function i(n){var e="";return angular.isObject(n)?(e=r(n),angular.isArray(n)&&(e+="["+n.length+"]")):e=s(n,n),e}function a(n){n.isArray=function(){return angular.isArray(n.json)},n.isObject=function(){return angular.isObject(n.json)},n.getKeys=function(){return n.isObject()?Object.keys(n.json).map(function(n){return""===n?'""':n}):void 0},n.type=o(n.json),n.hasKey="undefined"!=typeof n.key,n.getConstructorName=function(){return r(n.json)},"string"===n.type&&("Invalid Date"!==new Date(n.json).toString()&&(n.isDate=!0),0===n.json.indexOf("http")&&(n.isUrl=!0)),n.isEmptyObject=function(){return n.getKeys()&&!n.getKeys().length&&n.isOpen&&!n.isArray()},n.isOpen=!!n.open,n.toggleOpen=function(){n.isOpen=!n.isOpen},n.childrenOpen=function(){return n.open>1?n.open-1:0},n.openLink=function(e){e&&(window.location.href=n.json)},n.parseValue=function(e){return s(n.json,e)},n.showThumbnail=function(){return!!e.hoverPreviewEnabled&&n.isObject()&&!n.isOpen},n.getThumbnail=function(){if(n.isArray())return n.json.length>e.hoverPreviewArrayCount?"Array["+n.json.length+"]":"["+n.json.map(i).join(", ")+"]";var t=n.getKeys(),r=t.slice(0,e.hoverPreviewFieldCount),o=r.map(function(e){return e+":"+i(n.json[e])}),s=t.length>=5?"…":"";return"{"+o.join(", ")+s+"}"}}return{templateUrl:"json-formatter.html",restrict:"E",replace:!0,scope:{json:"=",key:"=",open:"="},compile:function(e){return n.compile(e,a)}}}]),"object"==typeof module&&(module.exports="jsonFormatter"),angular.module("RecursionHelper",[]).factory("RecursionHelper",["$compile",function(n){return{compile:function(e,t){angular.isFunction(t)&&(t={post:t});var r,o=e.contents().remove();return{pre:t&&t.pre?t.pre:null,post:function(e,s){r||(r=n(o)),r(e,function(n){s.append(n)}),t&&t.post&&t.post.apply(null,arguments)}}}}}]),angular.module("jsonFormatter").run(["$templateCache",function(n){n.put("json-formatter.html",'<div ng-init="isOpen = open && open > 0" class="json-formatter-row"><a ng-click="toggleOpen()"><span class="toggler {{isOpen ? \'open\' : \'\'}}" ng-if="isObject()"></span> <span class="key" ng-if="hasKey"><span class="key-text">{{key}}</span><span class="colon">:</span></span> <span class="value"><span ng-if="isObject()"><span class="constructor-name">{{getConstructorName(json)}}</span> <span ng-if="isArray()"><span class="bracket">[</span><span class="number">{{json.length}}</span><span class="bracket">]</span></span></span> <span ng-if="!isObject()" ng-click="openLink(isUrl)" class="{{type}}" ng-class="{date: isDate, url: isUrl}">{{parseValue(json)}}</span></span> <span ng-if="showThumbnail()" class="thumbnail-text">{{getThumbnail()}}</span></a><div class="children" ng-if="getKeys().length && isOpen"><json-formatter ng-repeat="key in getKeys() track by $index" json="json[key]" key="key" open="childrenOpen()"></json-formatter></div><div class="children empty object" ng-if="isEmptyObject()"></div><div class="children empty array" ng-if="getKeys() && !getKeys().length && isOpen && isArray()"></div></div>')}]);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/js/main.js b/asterixdb/asterix-app/src/main/resources/queryui/js/main.js
deleted file mode 100644
index 793c06e..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/js/main.js
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-var SERVER_HOST = "";
-var DATAVERSE_QUERY = "for $x in dataset Metadata.Dataverse return $x;"
-var DATE_TIME_REGEX = /^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z)$/;
-var DATE_REGEX = /^(\d{4}-\d{2}-\d{2})$/;
-
-var app = angular.module('queryui', ['jsonFormatter', 'ui.codemirror']);
-
-app.service('recordFunctions', function () {
-    this.ObjectKeys = function (obj) {
-        var typeStr = Object.prototype.toString.call(obj);
-        var res = [];
-        if (typeStr === "[object Object]") {
-            for (var key in obj) {
-                if (obj.hasOwnProperty(key) && !(key === "$$hashKey")) {
-                    res.push(key)
-                }
-            }
-        } else {
-            res = [-1];
-        }
-        return res;
-    }
-    this.isObject = function (obj) {
-        var typeStr = Object.prototype.toString.call(obj);
-        if (typeStr === "[object Object]") {
-            return true;
-        } else {
-            return false;
-        }
-    }
-    this.isArray = function (obj) {
-        var typeStr = Object.prototype.toString.call(obj);
-        if ((typeStr === "[object Array]" )) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-    this.isNested = function (obj) {
-        return this.isObject(obj) || this.isArray(obj);
-    }
-    this.ObjectValue = function (obj, key) {
-        var typeStr;
-        var value;
-        if (key == -1) {
-            typeStr = Object.prototype.toString.call(obj);
-            value = obj;
-        } else {
-            typeStr = Object.prototype.toString.call(obj[key]);
-            value = obj[key];
-        }
-        if (typeStr === "[object Array]") {
-            return "List +";
-        } else if (typeStr === "[object Object]") {
-            return "Record +";
-        } else if (typeStr == "[object Null]") {
-            return "NULL";
-        } else if (DATE_REGEX.exec(value) != null) {
-            var dat = new Date(value);
-            return dat.getUTCFullYear() + "/" + dat.getUTCMonth() + "/" + dat.getUTCDay();
-        } else if (DATE_TIME_REGEX.exec(value) != null) {
-            var dat = new Date(value);
-            return dat.getUTCFullYear() + "/" + dat.getUTCMonth() + "/" + dat.getUTCDay()
-                + " " + dat.getUTCHours() + ":" + dat.getUTCMinutes() + ":" + dat.getUTCSeconds();
-        } else {
-            return value;
-        }
-    }
-});
-
-app.controller('queryCtrl', function ($rootScope, $scope, $http, recordFunctions) {
-
-    $scope.recordFunctions = recordFunctions;
-    $scope.current_tab = 0;
-    $scope.current_preview_tab = 0;
-    $scope.current_list = 0;
-    $scope.maximized = false;
-    $scope.collapsed = false;
-    $scope.results = [];
-    $scope.history = [];
-    $scope.dataverses = [];
-    $scope.selectedItem = null;
-    $scope.selected_dataverse = "";
-    $scope.errorText = null;
-    $scope.statusText = "Wait...";
-    $scope.query_input = "";
-    $scope.uiReady = false;
-
-    $scope.queryCmOptions = {
-        lineNumbers: true,
-        indentWithTabs: true,
-        lineWrapping: false,
-        mode: 'aql'
-    }
-
-    $scope.queryPreviewOptions = {
-        indentWithTabs: true,
-        lineWrapping: true,
-        mode: 'javascript',
-        readOnly: true
-    }
-
-    $scope.init = function () {
-        $http.post("/").then(function (response) {
-            SERVER_HOST = location.protocol + "//" + location.hostname + ":" + response.data.api_port;
-            $scope.initDataverses();
-        }, function (response) {
-            $scope.statusText = "Unable to get Asterix HTTP API Port";
-        });
-    }
-
-    $scope.initDataverses = function () {
-        $http.get(SERVER_HOST + "/query?query=" + encodeURIComponent(DATAVERSE_QUERY)).then(function (response) {
-                for (i in response.data) {
-                    $scope.dataverses.push(response.data[i].DataverseName);
-                    $scope.selected_dataverse = $scope.dataverses[0];
-                    $scope.statusText = "Web UI Ready";
-                    $scope.uiReady = true;
-                }
-            },
-            function (response) {
-                $scope.statusText = "Error Occurred Executing Query";
-                $scope.errorText = response.data.summary;
-                $scope.maximized = false;
-            });
-        $scope.load();
-    }
-
-    $scope.query = function () {
-        var timer = new Date().getTime();
-        $scope.save($scope.query_input, $scope.selected_dataverse);
-        var uri = SERVER_HOST + "/query?query=" +
-            encodeURIComponent("use dataverse " + $scope.selected_dataverse + ";" + $scope.query_input)
-        $http.get(uri)
-            .then(function (response) {
-                    $scope.results = response.data;
-                    console.log(response);
-                    timer = new Date().getTime() - timer;
-                    $scope.statusText = "Query returned " + $scope.results.length + " records in " + timer + "ms";
-                    $scope.errorText = null;
-                    $scope.maximized = false;
-                },
-                function (response) {
-                    $scope.statusText = "Error Occurred Executing Query";
-                    $scope.errorText = response.data.summary;
-                    $scope.maximized = false;
-                    $scope.results = [];
-                });
-    }
-
-    $scope.isNested = function (obj) {
-        for (var key in obj) {
-            if (obj.hasOwnProperty(key)) {
-                var typeStr = Object.prototype.toString.call(obj[key]);
-              if (typeStr === "[object Array]" || typeStr === "[object Object]") {
-                return true;
-              }
-            }
-        }
-        return false;
-    }
-
-    $scope.isRecordPlus = function (obj, key) {
-        var value;
-        if (key == -1) {
-            value = obj;
-        } else {
-            value = obj[key];
-        }
-        return $scope.recordFunctions.isNested(value) ? "asterix-nested" : "";
-    }
-
-    $scope.viewRecord = function (obj) {
-        $scope.selectedItem = obj;
-        $scope.current_preview_tab = 0;
-        $("#recordModel").modal();
-    }
-
-    $scope.previewJSON = function (obj) {
-        return JSON.stringify(obj, null, 4);
-    }
-
-    $scope.save = function (query, database) {
-        var toSave = [query, database];
-        if ($scope.history.length >= 1) {
-            var i = $scope.history.length - 1;
-            if (new String(query).valueOf() === new String($scope.history[i][0]).valueOf()) {
-              if (new String(database).valueOf() === new String($scope.history[i][1]).valueOf()) {
-                return;
-              }
-            }
-        }
-        if ($scope.history.push(toSave) == 11) {
-            $scope.history.shift();
-        }
-        localStorage.setItem("history", JSON.stringify($scope.history));
-    }
-
-    $scope.load = function () {
-        var history = JSON.parse(localStorage.getItem("history"));
-      if (history != null) {
-        $scope.history = history;
-      }
-    }
-
-    $scope.previewHistory = function (entry) {
-        $scope.current_tab = 0;
-        $scope.query_input = entry[0];
-        $scope.selected_dataverse = entry[1];
-    }
-
-    $scope.leftContainerClass = function () {
-        if ($scope.maximized) {
-            return 'col-md-12';
-        } else {
-            if ($scope.collapsed) {
-                return 'col-md-1';
-            } else {
-                return 'col-md-4'
-            }
-        }
-    }
-
-    $scope.rightContainerClass = function () {
-        if ($scope.maximized) {
-            return 'col-md-0';
-        } else {
-            if ($scope.collapsed) {
-                return 'col-md-11';
-            } else {
-                return 'col-md-8'
-            }
-        }
-    }
-
-});
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/js/ui-codemirror.js b/asterixdb/asterix-app/src/main/resources/queryui/js/ui-codemirror.js
deleted file mode 100644
index 6eb35df..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/js/ui-codemirror.js
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (c) 2012 the AngularUI Team, http://angular-ui.github.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.
- */
-'use strict';
-
-/**
- * Binds a CodeMirror widget to a <textarea> element.
- */
-angular.module('ui.codemirror', [])
-  .constant('uiCodemirrorConfig', {})
-  .directive('uiCodemirror', uiCodemirrorDirective);
-
-/**
- * @ngInject
- */
-function uiCodemirrorDirective($timeout, uiCodemirrorConfig) {
-
-  return {
-    restrict: 'EA',
-    require: '?ngModel',
-    compile: function compile() {
-
-      // Require CodeMirror
-      if (angular.isUndefined(window.CodeMirror)) {
-        throw new Error('ui-codemirror needs CodeMirror to work... (o rly?)');
-      }
-
-      return postLink;
-    }
-  };
-
-  function postLink(scope, iElement, iAttrs, ngModel) {
-
-    var codemirrorOptions = angular.extend(
-      { value: iElement.text() },
-      uiCodemirrorConfig.codemirror || {},
-      scope.$eval(iAttrs.uiCodemirror),
-      scope.$eval(iAttrs.uiCodemirrorOpts)
-    );
-
-    var codemirror = newCodemirrorEditor(iElement, codemirrorOptions);
-
-    configOptionsWatcher(
-      codemirror,
-      iAttrs.uiCodemirror || iAttrs.uiCodemirrorOpts,
-      scope
-    );
-
-    configNgModelLink(codemirror, ngModel, scope);
-
-    configUiRefreshAttribute(codemirror, iAttrs.uiRefresh, scope);
-
-    // Allow access to the CodeMirror instance through a broadcasted event
-    // eg: $broadcast('CodeMirror', function(cm){...});
-    scope.$on('CodeMirror', function(event, callback) {
-      if (angular.isFunction(callback)) {
-        callback(codemirror);
-      } else {
-        throw new Error('the CodeMirror event requires a callback function');
-      }
-    });
-
-    // onLoad callback
-    if (angular.isFunction(codemirrorOptions.onLoad)) {
-      codemirrorOptions.onLoad(codemirror);
-    }
-  }
-
-  function newCodemirrorEditor(iElement, codemirrorOptions) {
-    var codemirrot;
-
-    if (iElement[0].tagName === 'TEXTAREA') {
-      // Might bug but still ...
-      codemirrot = window.CodeMirror.fromTextArea(iElement[0], codemirrorOptions);
-    } else {
-      iElement.html('');
-      codemirrot = new window.CodeMirror(function(cm_el) {
-        iElement.append(cm_el);
-      }, codemirrorOptions);
-    }
-
-    return codemirrot;
-  }
-
-  function configOptionsWatcher(codemirrot, uiCodemirrorAttr, scope) {
-    if (!uiCodemirrorAttr) { return; }
-
-    var codemirrorDefaultsKeys = Object.keys(window.CodeMirror.defaults);
-    scope.$watch(uiCodemirrorAttr, updateOptions, true);
-    function updateOptions(newValues, oldValue) {
-      if (!angular.isObject(newValues)) { return; }
-      codemirrorDefaultsKeys.forEach(function(key) {
-        if (newValues.hasOwnProperty(key)) {
-
-          if (oldValue && newValues[key] === oldValue[key]) {
-            return;
-          }
-
-          codemirrot.setOption(key, newValues[key]);
-        }
-      });
-    }
-  }
-
-  function configNgModelLink(codemirror, ngModel, scope) {
-    if (!ngModel) { return; }
-    // CodeMirror expects a string, so make sure it gets one.
-    // This does not change the model.
-    ngModel.$formatters.push(function(value) {
-      if (angular.isUndefined(value) || value === null) {
-        return '';
-      } else if (angular.isObject(value) || angular.isArray(value)) {
-        throw new Error('ui-codemirror cannot use an object or an array as a model');
-      }
-      return value;
-    });
-
-
-    // Override the ngModelController $render method, which is what gets called when the model is updated.
-    // This takes care of the synchronizing the codeMirror element with the underlying model, in the case that it is changed by something else.
-    ngModel.$render = function() {
-      //Code mirror expects a string so make sure it gets one
-      //Although the formatter have already done this, it can be possible that another formatter returns undefined (for example the required directive)
-      var safeViewValue = ngModel.$viewValue || '';
-      codemirror.setValue(safeViewValue);
-    };
-
-
-    // Keep the ngModel in sync with changes from CodeMirror
-    codemirror.on('change', function(instance) {
-      var newValue = instance.getValue();
-      if (newValue !== ngModel.$viewValue) {
-        scope.$evalAsync(function() {
-          ngModel.$setViewValue(newValue);
-        });
-      }
-    });
-  }
-
-  function configUiRefreshAttribute(codeMirror, uiRefreshAttr, scope) {
-    if (!uiRefreshAttr) { return; }
-
-    scope.$watch(uiRefreshAttr, function(newVal, oldVal) {
-      // Skip the initial watch firing
-      if (newVal !== oldVal) {
-        $timeout(function() {
-          codeMirror.refresh();
-        });
-      }
-    });
-  }
-
-}
diff --git a/asterixdb/asterix-app/src/main/resources/queryui/queryui.html b/asterixdb/asterix-app/src/main/resources/queryui/queryui.html
deleted file mode 100644
index c2fe702..0000000
--- a/asterixdb/asterix-app/src/main/resources/queryui/queryui.html
+++ /dev/null
@@ -1,177 +0,0 @@
-<!DOCTYPE html>
-<!--
- ! Licensed to the Apache Software Foundation (ASF) under one
- ! or more contributor license agreements.  See the NOTICE file
- ! distributed with this work for additional information
- ! regarding copyright ownership.  The ASF licenses this file
- ! to you 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.
- !-->
-<html lang="en">
-<head>
-  <meta charset="UTF-8">
-  <title>AsterixDB Console</title>
-  <link rel="stylesheet" href="/queryui/css/bootstrap.min.css" media="screen" title="no title" charset="utf-8">
-  <link rel="stylesheet" href="/queryui/css/bootstrap-theme.min.css" media="screen" title="no title" charset="utf-8">
-  <link rel="stylesheet" href="/queryui/css/master.css" media="screen" title="no title" charset="utf-8">
-  <link rel="stylesheet" href="/queryui/css/json-formatter.min.css" media="screen" title="no title" charset="utf-8">
-  <link rel="stylesheet" href="/queryui/css/codemirror.css" media="screen" title="no title" charset="utf-8">
-  <script src="/queryui/js/jquery-1.12.4.min.js" charset="utf-8"></script>
-  <script src="/queryui/js/angular.min.js" charset="utf-8"></script>
-  <script src="/queryui/js/json-formatter.min.js" charset="utf-8"></script>
-  <script src="/queryui/js/bootstrap.min.js" charset="utf-8"></script>
-  <script src="/queryui/js/codemirror.js" charset="utf-8"></script>
-  <script src="/queryui/js/ui-codemirror.js" charset="utf-8"></script>
-  <script src="/queryui/js/aql-mode.js" charset="utf-8"></script>
-  <script src="/queryui/js/javascript.js" charset="utf-8"></script>
-  <script src="/queryui/js/main.js" charset="utf-8"></script>
-</head>
-<body ng-app="queryui">
-  <div class="row main-container" ng-controller="queryCtrl" ng-init="init()">
-    <div class="col-md-4 left-container" ng-class="leftContainerClass()">
-        <div>
-            <div class="row" ng-show="collapsed">
-                <div class="row-fluid">
-                    <div class="col-sm-12 text-center"><img class="logo-collapsed" src="/queryui/img/asterixlogo-collapsed.png" alt=""/></div>
-                </div>
-                <div class="row-fluid">
-                    <div class="col-sm-12 text-center"><span class="glyphicon glyphicon-menu-hamburger asterix-button"
-                                                           ng-class="collapsed == true ? 'asterix-button-selected' : '' "
-                                                           ng-click="collapsed = !collapsed"></span></div>
-                </div>
-            </div>
-            <div class="row" ng-hide="collapsed">
-                <div class="col-sm-10"><img class="logo" src="/queryui/img/finalasterixlogo.png" alt=""/></div>
-                <div class="col-sm-2 text-right" ng-hide="maximized"><span class="glyphicon glyphicon-menu-left asterix-button"
-                                                       ng-class="collapsed == true ? 'asterix-button-selected' : '' "
-                                                       ng-click="collapsed = !collapsed"></span></div>
-            </div>
-            <div ng-hide="collapsed" class="row">
-                <div class="col-sm-12">
-                    <div class="left-using-container">
-                        <label for="usingSelect" class="col-sm-2 control-label">Using</label>
-                        <div class="col-sm-10">
-                            <select class="form-control" id="usingSelect" ng-model="selected_dataverse">
-                                <option ng-repeat="entry in dataverses" >{{entry}}</option>
-                            </select>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            <div ng-hide="collapsed" class="row">
-                <div class="col-sm-12">
-                    <div class="input-container">
-                        <div id="input-tab">
-                            <ul class="nav nav-justified asterix-nav">
-                                <li ng-class="current_tab == 0 ? 'asterix-nav-active' : '' "><a href="#" ng-click="current_tab = 0">Query</a></li>
-                                <li ng-class="current_tab == 1 ? 'asterix-nav-active' : '' "><a href="#" ng-click="current_tab = 1">History</a></li>
-                            </ul>
-                            <div class="asterix-tabpage" ng-if="current_tab == 0">
-                                <textarea ui-codemirror="queryCmOptions" name="Text1" ng-model="$parent.query_input" class="form-control input-container-code" placeholder="Query" cols="40" rows="15"></textarea>
-                                <div class="icon-maximize"><span class="glyphicon glyphicon-fullscreen asterix-button" aria-hidden="true"
-                                                                 ng-class="$parent.maximized == true ? 'asterix-button-selected' : '' "
-                                                                 ng-click="$parent.maximized = !$parent.maximized"></span></div>
-                            </div>
-                            <div class="asterix-tabpage" ng-if="current_tab == 1">
-                                <div class="asterix-tabpage-scroll">
-                                    <div class="asterix-well margin-bottom" ng-repeat="query in history.slice().reverse() track by $index">
-                                        <div class="row">
-                                            <div class="col-md-8"><code>{{query[0]}}</code></div>
-                                            <div class="col-md-4 asterix-well-right"><a href="" ng-click="previewHistory(query)">Preview</a></div>
-                                        </div>
-                                    </div>
-                                </div>
-                                <div class="icon-maximize"><span class="glyphicon glyphicon-fullscreen asterix-button" aria-hidden="true"
-                                                                 ng-class="$parent.maximized == true ? 'asterix-button-selected' : '' "
-                                                                 ng-click="$parent.maximized = !$parent.maximized"></span></div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            <div ng-hide="collapsed" class="row vh-spacer">
-                <div class="col-sm-12">
-                    <button type="button" class="btn btn-asterix center-block" ng-click="query()" ng-if="uiReady">Run</button>
-                    <button type="button" class="btn btn-asterix center-block" ng-if="!uiReady">Loading Wait..</button>
-                </div>
-            </div>
-        </div>
-        <div ng-show="false">
-            <div class="row">
-                <div class="col-sm-12"><img class="logo logo-collapsed" src="/queryui/img/finalasterixlogo.png" alt="" /></div>
-            </div>
-            <div class="row">
-                <div class="col-sm-12 text-center"><span class="glyphicon glyphicon-menu-hamburger asterix-button"
-                                                         ng-class="collapsed == true ? 'asterix-button-selected' : '' "
-                                                         ng-click="collapsed = !collapsed"></span></div>
-            </div>
-        </div>
-    </div>
-    <div class="col-md-8 right-container" ng-class="rightContainerClass()">
-      <p class="asterix-status">{{statusText}}</p>
-      <div class="alert alert-danger" role="alert" ng-if="errorText != null">{{errorText}}</div>
-      <div class="right-toolbar">
-        <span class="glyphicon glyphicon-align-justify asterix-button" aria-hidden="true"
-          ng-class="current_list == 0 ? 'asterix-button-selected' : '' "
-          ng-click="current_list = 0"></span>
-        <span class="glyphicon glyphicon-th-large asterix-button" aria-hidden="true"
-          ng-class="current_list == 1 ? 'asterix-button-selected' : '' "
-          ng-click="current_list = 1"></span>
-      </div>
-      <div class="asterix-list-view" ng-if="current_list == 0 && results.length != 0">
-        <table class="table table-hover asterix-table">
-          <tbody>
-            <tr ng-repeat="record in $parent.results track by $index">
-              <td ng-repeat="key in recordFunctions.ObjectKeys(record)" class="asterix-inline-item" ng-class="isRecordPlus(record,key)" ng-click="viewRecord(record)">
-                <p class="small asterix-small">{{key == -1 ? 'value' : key}}</p>{{recordFunctions.ObjectValue(record,key)}}
-              </td>
-            </tr>
-          </tbody>
-        </table>
-      </div>
-      <div class="asterix-list-wells" ng-if="current_list == 1 && results.length != 0">
-        <div ng-repeat="record in $parent.results track by $index" class="asterix-well flex-well" ng-click="viewRecord(record)">
-          <div ng-repeat="key in recordFunctions.ObjectKeys(record)" class="row asterix-well-row">
-            <div class="col-sm-6" ng-class="isRecordPlus(record,key)">{{recordFunctions.ObjectValue(record,key)}}</div>
-            <div class="col-sm-6 asterix-well-right"><p class="small asterix-small">{{key == -1 ? 'value' : key}}</p></div>
-          </div>
-          <div class="row">
-            <div class="col-sm-12" ng-if="isNested(record)">
-              <span class="label label-warning">NESTED</span>
-            </div>
-          </div>
-        </div>
-      </div>
-      <div class="modal fade" id="recordModel" role="dialog">
-          <div class="modal-dialog">
-            <div id="input-tab">
-              <ul class="nav nav-justified asterix-nav">
-                <li ng-class="current_preview_tab == 0 ? 'asterix-nav-active' : '' "><a href="#" ng-click="current_preview_tab = 0">Record Viewer</a></li>
-                <li ng-class="current_preview_tab == 1 ? 'asterix-nav-active' : '' "><a href="#" ng-click="current_preview_tab = 1">JSON Viewer</a></li>
-                <!-- <li><a href="#" data-dismiss="modal">
-                  <span class="glyphicon glyphicon-remove"></span>
-                </a></li> -->
-              </ul>
-              <div class="asterix-tabpage" ng-if="current_preview_tab == 0">
-              <json-formatter open="2" ng-if="selectedItem != null" json="selectedItem"></json-formatter>
-              </div>
-              <div class="asterix-tabpage" ng-if="current_preview_tab == 1">
-                <pre ng-bind="previewJSON(selectedItem)"></pre>
-              </div>
-            </div>
-          </div>
-        </div>
-    </div>
-  </div>
-</body>
-</html>
diff --git a/asterixdb/pom.xml b/asterixdb/pom.xml
index 0308d22..ff70c39 100644
--- a/asterixdb/pom.xml
+++ b/asterixdb/pom.xml
@@ -422,6 +422,9 @@
           <groupId>org.apache.hyracks</groupId>
           <artifactId>license-automation-plugin</artifactId>
           <version>${hyracks.version}</version>
+          <configuration>
+            <argLine>-Xmx2048m</argLine>
+          </configuration>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
