From 5446d2c322aab106982ce1784bfdc5101d767a24 Mon Sep 17 00:00:00 2001 From: Antoine Cormouls Date: Sat, 30 Nov 2019 20:24:53 +0100 Subject: [PATCH 01/42] wip --- _includes/graphql/getting-started.md | 52 +++++++++++++-------------- _includes/graphql/graphql.md | 11 ++++++ _includes/graphql/objects.md | 17 +++++---- _includes/graphql/relay.md | 8 +++++ _includes/graphql/your-first-class.md | 4 +-- _includes/graphql/your-first-query.md | 10 +++++- graphql.md | 2 ++ 7 files changed, 67 insertions(+), 37 deletions(-) create mode 100644 _includes/graphql/graphql.md create mode 100644 _includes/graphql/relay.md diff --git a/_includes/graphql/getting-started.md b/_includes/graphql/getting-started.md index 2114e3587..82ca622aa 100644 --- a/_includes/graphql/getting-started.md +++ b/_includes/graphql/getting-started.md @@ -7,56 +7,49 @@ The easiest way to run the Parse GraphQL Server is using the CLI: ```bash $ npm install -g parse-server mongodb-runner $ mongodb-runner start -$ parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://localhost/test --publicServerURL http://localhost:1337/parse --mountGraphQL --mountPlayground +$ parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://localhost/test --mountGraphQL --mountPlayground ``` Notes: * Run `parse-server --help` or refer to [Parse Server Options](https://parseplatform.org/parse-server/api/master/ParseServerOptions.html) for a complete list of Parse Server configuration options. -* ⚠️ Please do not use `--mountPlayground` option in production as anyone could access your API Playground and read or change your application's data. [Parse Dashboard](#running-parse-dashboard) has a built-in GraphQL Playground and it is the recommended option for production apps. +* ⚠️ Please do not use `--mountPlayground` option in production as anyone could access your API Playground and read or change your application's data. [Parse Dashboard](#running-parse-dashboard) has a built-in GraphQL Playground and it is the recommended option for production apps. If you want to lock your API on **production** take a look to [Class Level Persmissions](/js/guide/#class-level-permissions) * ⚠️ The Parse GraphQL ```beta``` implementation is fully functional but discussions are taking place on how to improve it. So new versions of Parse Server can bring breaking changes to the current API. After running the CLI command, you should have something like this in your terminal: -Parse GraphQL Server +```sh +... +[35071] parse-server running on http://localhost:1337/parse +[35071] GraphQL running on http://localhost:1337/graphql +[35071] Playground running on http://localhost:1337/playground +``` Since you have already started your Parse GraphQL Server, you can now visit [http://localhost:1337/playground](http://localhost:1337/playground) in your web browser to start playing with your GraphQL API. GraphQL Playground -## Using Docker - -You can also run the Parse GraphQL API inside a Docker container: - -```bash -$ git clone https://github.com/parse-community/parse-server -$ cd parse-server -$ docker build --tag parse-server . -$ docker run --name my-mongo -d mongo -$ docker run --name my-parse-server --link my-mongo:mongo -p 1337:1337 -d parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://mongo/test --publicServerURL http://localhost:1337/parse --mountGraphQL --mountPlayground -``` - -After starting the server, you can visit [http://localhost:1337/playground](http://localhost:1337/playground) in your browser to start playing with your GraphQL API. - -⚠️ Please do not use `--mountPlayground` option in production as anyone could access your API Playground and read or change your application's data. [Parse Dashboard](#running-parse-dashboard) has a built-in GraphQL Playground and it is the recommended option for production apps. - ## Using Express.js You can also mount the GraphQL API in an Express.js application together with the REST API or solo. You first need to create a new project and install the required dependencies: -```bash +```sh $ mkdir my-app $ cd my-app +$ npm init $ npm install parse-server express --save ``` Then, create an `index.js` file with the following content: ```js +// index.js const express = require('express'); const { default: ParseServer, ParseGraphQLServer } = require('parse-server'); +// Create express app const app = express(); +// Create a Parse Server Instance const parseServer = new ParseServer({ databaseURI: 'mongodb://localhost:27017/test', appId: 'APPLICATION_ID', @@ -65,6 +58,7 @@ const parseServer = new ParseServer({ publicServerURL: 'http://localhost:1337/parse' }); +// Create the GraphQL Server Instance const parseGraphQLServer = new ParseGraphQLServer( parseServer, { @@ -73,10 +67,14 @@ const parseGraphQLServer = new ParseGraphQLServer( } ); -app.use('/parse', parseServer.app); // (Optional) Mounts the REST API -parseGraphQLServer.applyGraphQL(app); // Mounts the GraphQL API -parseGraphQLServer.applyPlayground(app); // (Optional) Mounts the GraphQL Playground - do NOT use in Production +// (Optional) Mounts the REST API +app.use('/parse', parseServer.app); +// Mounts the GraphQL API using graphQLPath: '/graphql' +parseGraphQLServer.applyGraphQL(app); +// (Optional) Mounts the GraphQL Playground - do NOT use in Production +parseGraphQLServer.applyPlayground(app); +// Start the server app.listen(1337, function() { console.log('REST API running on http://localhost:1337/parse'); console.log('GraphQL API running on http://localhost:1337/graphql'); @@ -86,22 +84,22 @@ app.listen(1337, function() { And finally start your app: -```bash +```sh $ npx mongodb-runner start $ node index.js ``` After starting the app, you can visit [http://localhost:1337/playground](http://localhost:1337/playground) in your browser to start playing with your GraphQL API. -⚠️ Please do not mount the GraphQL Playground in production as anyone could access your API Playground and read or change your application's data. [Parse Dashboard](#running-parse-dashboard) has a built-in GraphQL Playground and it is the recommended option for production apps. +⚠️ Please do not mount the GraphQL Playground in production as anyone could access your API Playground and read or change your application's data. [Parse Dashboard](#running-parse-dashboard) has a built-in GraphQL Playground and it is the recommended option for production apps. If you want to lock your API on production take a look to [Class Level Persmissions](/js/guide/#class-level-permissions) ## Running Parse Dashboard -[Parse Dashboard](https://github.com/parse-community/parse-dashboard) is a standalone dashboard for managing your Parse Server apps, including your objects' schema and data, logs, jobs, and push notifications. Parse Dashboard also has a built-in GraphQL Playground that you can use to play around with your auto-generated Parse GraphQL API. It is the recommended option for production applications. +[Parse Dashboard](https://github.com/parse-community/parse-dashboard) is a standalone dashboard for managing your Parse Server apps, including your objects' schema and data, logs, jobs, clp, and push notifications. Parse Dashboard also has a built-in GraphQL Playground that you can use to play around with your auto-generated Parse GraphQL API. It is the recommended option for **production** applications. The easiest way to run the Parse Dashboard is through its CLI: -```bash +```sh $ npm install -g parse-dashboard $ parse-dashboard --dev --appId APPLICATION_ID --masterKey MASTER_KEY --serverURL "http://localhost:1337/parse" --graphQLServerURL "http://localhost:1337/graphql" --appName MyAppName ``` diff --git a/_includes/graphql/graphql.md b/_includes/graphql/graphql.md new file mode 100644 index 000000000..63b6a720b --- /dev/null +++ b/_includes/graphql/graphql.md @@ -0,0 +1,11 @@ +# GraphQL + +Before continuing, it is important to visit some of the **GraphQL** documentation: + +A **GraphQL** api contain 3 main concepts: +* `Query`: Allow to fetch data +* `Mutation`: Create/Modify data +* `Subscription`: Listen data changes + +## Learn Query & Mutation +To learn how to query data and execute operation on a **GraphQL** API, just follow this link: [Learn Query & Mutation](https://graphql.org/learn/queries/) \ No newline at end of file diff --git a/_includes/graphql/objects.md b/_includes/graphql/objects.md index 7dd887116..bebac8af9 100644 --- a/_includes/graphql/objects.md +++ b/_includes/graphql/objects.md @@ -1,18 +1,21 @@ -# Objects +# Create your first Object ## Creating Objects -For each class of your application's schema, Parse Server automatically generates a custom mutation for creating this class' objects through the GraphQL API. +For each class of your application's schema, Parse Server **automatically** generates a custom mutation for creating this class' objects through the **GraphQL API**. For example, if you have a class named `GameScore` in the schema, Parse Server automatically generates a new mutation called `createGameScore`, and you should be able to run the code below in your GraphQL Playground: ```graphql -mutation CreateGameScore { +mutation createAGameScore { createGameScore( - fields: { - playerName: "Sean Plott" - score: 1337 - cheatMode: false + input: { + clientMutationId: "anUniqueId", + fields: { + playerName: "Sean Plott" + score: 1337 + cheatMode: false + } } ) { id diff --git a/_includes/graphql/relay.md b/_includes/graphql/relay.md new file mode 100644 index 000000000..ed5a67921 --- /dev/null +++ b/_includes/graphql/relay.md @@ -0,0 +1,8 @@ +# Relay + +The **Parse GraphQL API** follows the latest standards currently available for a high-end **API**. +**Parse Open Source Team** choose to follow the [GraphQL Server Relay Specification.](https://relay.dev/docs/en/graphql-server-specification) specification. + +**Relay** is a JavaScript framework for building data-driven React applications powered by **GraphQL**, designed from the ground up to be **easy to use**, extensible and, most of all, **performant**. Relay accomplishes this with static queries and ahead-of-time code generation. + +We will see later some **Relay** concepts like: **Node**, **Connection**, **Cursor** \ No newline at end of file diff --git a/_includes/graphql/your-first-class.md b/_includes/graphql/your-first-class.md index 031f8d9fb..d2e7f3127 100644 --- a/_includes/graphql/your-first-class.md +++ b/_includes/graphql/your-first-class.md @@ -1,9 +1,9 @@ # Creating your first class -Since your application does not have any schema yet, you can use the `createClass` mutation to create your first class. Run the following: +Since your application does not have any schema yet, you can use the `createClass` mutation to create your first class through the **GraphQL API**. Run the following: ```graphql -mutation CreateClass { +mutation createGameScoreClass { createClass( name: "GameScore" schemaFields: { diff --git a/_includes/graphql/your-first-query.md b/_includes/graphql/your-first-query.md index 32df2cd99..4e54d80a3 100644 --- a/_includes/graphql/your-first-query.md +++ b/_includes/graphql/your-first-query.md @@ -3,7 +3,7 @@ Now that you have set up your GraphQL environment, it is time to run your first query. Execute the following code in your GraphQL Playground to check your API's health: ```graphql -query Health { +query healthy { health } ``` @@ -17,3 +17,11 @@ You should receive the following response: } } ``` + +Note: Following header was used for the query +```json +{ + "X-Parse-Application-Id": "APPLICATION_ID", + "X-Parse-Master-Key": "MASTER_KEY" +} +``` diff --git a/graphql.md b/graphql.md index eb8330464..c6fff2144 100644 --- a/graphql.md +++ b/graphql.md @@ -11,6 +11,8 @@ redirect_from: sections: - "graphql/getting-started.md" +- "graphql/graphql.md" +- "graphql/relay.md" - "graphql/your-first-query.md" - "graphql/your-first-class.md" - "graphql/objects.md" From 8b86952bdf74515dc8b9c29d688f3274d63d4cbe Mon Sep 17 00:00:00 2001 From: Antoine Cormouls Date: Mon, 2 Dec 2019 12:40:03 +0100 Subject: [PATCH 02/42] wip --- _includes/graphql/objects.md | 350 +++++-- _includes/graphql/your-first-class.md | 87 +- assets/js/bundle.js | 1335 ++++++++++++++++++++++++- package-lock.json | 231 ++--- 4 files changed, 1732 insertions(+), 271 deletions(-) diff --git a/_includes/graphql/objects.md b/_includes/graphql/objects.md index bebac8af9..bc7e1edaa 100644 --- a/_includes/graphql/objects.md +++ b/_includes/graphql/objects.md @@ -10,21 +10,29 @@ For example, if you have a class named `GameScore` in the schema, Parse Server a mutation createAGameScore { createGameScore( input: { - clientMutationId: "anUniqueId", - fields: { - playerName: "Sean Plott" - score: 1337 + clientMutationId: "anUniqueId" + fields: { + playerName: "Sean Plott", + score: 1337, cheatMode: false } } ) { - id - updatedAt - createdAt - playerName - score - cheatMode - ACL + clientMutationId + gameScore { + id + updatedAt + createdAt + playerName + score + cheatMode + ACL { + public { + write + read + } + } + } } } ``` @@ -35,18 +43,28 @@ The code above should resolve to something similar to this: { "data": { "createGameScore": { - "id": "XN75D94OBD", - "updatedAt": "2019-09-17T06:50:26.357Z", - "createdAt": "2019-09-17T06:50:26.357Z", - "playerName": "Sean Plott", - "score": 1337, - "cheatMode": false, - "ACL": null + "clientMutationId": "anUniqueId", + "gameScore": { + "id": "R2FtZVNjb3JlOjZtdGlNcmtXNnY=", + "updatedAt": "2019-12-02T10:14:28.786Z", + "createdAt": "2019-12-02T10:14:28.786Z", + "playerName": "Sean Plott", + "score": 1337, + "cheatMode": false, + "ACL": { + "public": { + "write": true, + "read": true + } + } + } } } } ``` +**Note:** The `id` is [Relay Global Object Identification](https://facebook.github.io/relay/graphql/objectidentification.htm), it's **NOT** a Parse `objectId`. Most of the time the `Relay Node Id` is a `Base64` of the `ParseClass` and the `objectId`. + ## Getting an Object For each class of your application's schema, Parse Server automatically generates a custom query for getting this class' objects through the GraphQL API. @@ -54,15 +72,19 @@ For each class of your application's schema, Parse Server automatically generate For example, if you have a class named `GameScore` in the schema, Parse Server automatically generates a new query called `gameScore`, and you should be able to run the code below in your GraphQL Playground: ```graphql -query GameScore { - gameScore(id: "XN75D94OBD") { +query getAGameScore { + gameScore(id: "R2FtZVNjb3JlOjZtdGlNcmtXNnY=") { id - updatedAt - createdAt + score playerName score cheatMode - ACL + ACL { + public { + read + write + } + } } } ``` @@ -73,18 +95,85 @@ The code above should resolve to something similar to this: { "data": { "gameScore": { - "id": "XN75D94OBD", - "updatedAt": "2019-09-17T06:50:26.357Z", - "createdAt": "2019-09-17T06:50:26.357Z", - "playerName": "Sean Plott", + "id": "R2FtZVNjb3JlOjZtdGlNcmtXNnY=", "score": 1337, + "playerName": "Sean Plott", "cheatMode": false, - "ACL": null + "ACL": { + "public": { + "read": true, + "write": true + } + } + } + } +} +``` + +## Getting an Object with Node Relay + +With the **Relay** specification you have also the choice to use [GraphQL Fragments](https://graphql.org/learn/queries/#fragments) through the `node` GraphQL Query. For a `GameScore` object the following query will do the job. + +```graphql +query getGameScoreWithNodeRelay { + node(id: "R2FtZVNjb3JlOjZtdGlNcmtXNnY") { + id + __typename + ... on GameScore { + playerName + score + cheatMode + } + } +} +``` + +```json +{ + "data": { + "node": { + "id": "R2FtZVNjb3JlOjZtdGlNcmtXNnY=", + "__typename": "GameScore", + "playerName": "Sean Plott", + "score": 1337, + "cheatMode": false + } + } +} +``` + +Here using `Node Relay` is useful for writing generic requests for your front end components. For example: +Assuming we already have a `User` with a `Relay Node Id: X1VzZXI6Q1lMeWJYMjFjcw==` and `username: "johndoe"` + +```graphql +query genericGet { + node(id: "X1VzZXI6Q1lMeWJYMjFjcw==") { + id + __typename + ... on User { + id + username + } + ... on GameScore { + playerName + score + cheatMode } } } ``` +```json +{ + "data": { + "node": { + "id": "X1VzZXI6Q1lMeWJYMjFjcw==", + "__typename": "User", + "username": "johndoe" + } + } +} +``` ## Finding Objects For each class of your application's schema, Parse Server automatically generates a custom query for finding this class' objects through the GraphQL API. @@ -92,17 +181,23 @@ For each class of your application's schema, Parse Server automatically generate For example, if you have a class named `GameScore` in the schema, Parse Server automatically generates a new query called `gameScores`, and you should be able to run the code below in your GraphQL Playground: ```graphql -query GameScores { +query getSomeGameScores{ gameScores { + pageInfo { + hasNextPage + hasPreviousPage + startCursor + endCursor + } count - results { - id - updatedAt - createdAt - playerName - score - cheatMode - ACL + edges { + cursor + node { + id + playerName + score + cheatMode + } } } } @@ -114,25 +209,40 @@ The code above should resolve to something similar to this: { "data": { "gameScores": { - "count": 2, - "results": [ + "pageInfo": { + "hasNextPage": false, + "hasPreviousPage": false, + "startCursor": "YXJyYXljb25uZWN0aW9uOjA=", + "endCursor": "YXJyYXljb25uZWN0aW9uOjI=" + }, + "count": 3, + "edges": [ + { + "cursor": "YXJyYXljb25uZWN0aW9uOjA=", + "node": { + "id": "R2FtZVNjb3JlOjZtdGlNcmtXNnY=", + "playerName": "Sean Plott", + "score": 1337, + "cheatMode": false + } + }, { - "id": "XN75D94OBD", - "updatedAt": "2019-09-17T06:50:26.357Z", - "createdAt": "2019-09-17T06:50:26.357Z", - "playerName": "Sean Plott", - "score": 1337, - "cheatMode": false, - "ACL": null + "cursor": "YXJyYXljb25uZWN0aW9uOjE=", + "node": { + "id": "R2FtZVNjb3JlOnp2cHdTYXlmYnA=", + "playerName": "John Doe", + "score": 13, + "cheatMode": true + } }, { - "id": "a7ulpjjuji", - "updatedAt": "2019-09-17T07:11:28.869Z", - "createdAt": "2019-09-17T07:11:28.869Z", - "playerName": "Jang Min Chul", - "score": 80075, - "cheatMode": false, - "ACL": null + "cursor": "YXJyYXljb25uZWN0aW9uOjI=", + "node": { + "id": "R2FtZVNjb3JlOjNmWjBoQVJDVU0=", + "playerName": "Steve Jordan", + "score": 134, + "cheatMode": false + } } ] } @@ -145,11 +255,18 @@ The code above should resolve to something similar to this: You can use the `where` argument to add constraints to a class find query. See the example below: ```graphql -query ConstraintsExamples { - gameScores( - where: { score: { greaterThan: 1500 } } - ) { +query getSomeGameScores { + gameScores(where: { score: { greaterThan: 158 } }) { count + edges { + cursor + node { + id + playerName + score + cheatMode + } + } } } ``` @@ -160,7 +277,18 @@ The code above should resolve to something similar to this: { "data": { "gameScores": { - "count": 1 + "count": 1, + "edges": [ + { + "cursor": "YXJyYXljb25uZWN0aW9uOjA=", + "node": { + "id": "R2FtZVNjb3JlOjZtdGlNcmtXNnY=", + "playerName": "Sean Plott", + "score": 1337, + "cheatMode": false + } + } + ] } } } @@ -171,14 +299,17 @@ The code above should resolve to something similar to this: You can use the `order` argument to select in which order the results should show up in a class find query. See the example below: ```graphql -query OrderExamples { - gameScores( - where: { cheatMode: { equalTo: false } } - order: [score_DESC] - ) { - results { - playerName - score +query getSomeGameScores { + gameScores(where: { cheatMode: { equalTo: false } }, order: score_ASC) { + count + edges { + cursor + node { + id + playerName + score + cheatMode + } } } } @@ -190,51 +321,90 @@ The code above should resolve to something similar to this: { "data": { "gameScores": { - "results": [ + "count": 2, + "edges": [ { - "playerName": "Jang Min Chul", - "score": 80075 + "cursor": "YXJyYXljb25uZWN0aW9uOjA=", + "node": { + "id": "R2FtZVNjb3JlOjNmWjBoQVJDVU0=", + "playerName": "Steve Jordan", + "score": 134, + "cheatMode": false + } }, { - "playerName": "Sean Plott", - "score": 1337 - } + "cursor": "YXJyYXljb25uZWN0aW9uOjE=", + "node": { + "id": "R2FtZVNjb3JlOjZtdGlNcmtXNnY=", + "playerName": "Sean Plott", + "score": 1337, + "cheatMode": false + } + } ] } } } ``` -### Pagination +### Pagination: Cursor, Skip, First, Last, Before, After + +[Relay Node Cursor](https://facebook.github.io/relay/graphql/connections.htm) provide a simple way to get an efficient and easy to use pagination into your app. + +With Relay you can build flexible pagination based on cursors here it's the main effect of each argument: +* `skip`: A regular skip to exlude some results +* `first`: Similar as a `limit` parameter but ask server to start from first result, ex: `first: 10` retreive first 10 results +* `last`: Retrieve the last results, ex: `last: 10` retrieve the 10 last resutls +* `before`: Get objects before the provided `Cursor`, in combinatin with `after` it's allow you to build inverted pagination +* `after`: Get objects after the provided `Cursor`, in combination with `first` you get a classic pagination similar to `skip & limit` -You can use the `skip` and `limit` arguments to paginate the results in a class find query. See the example below: +You can combine multi parameters like: `before & last`, `after & first` + +Assuming we have an old object with`cursor: YXJyYXljb25uZWN0aW9uOjE` (`cursor` is different of `id`, it's a temporary pagination Id for the query) ```graphql -query PaginationExamples { - gameScores( - where: { cheatMode: { equalTo: false } } - order: [score_DESC] - skip: 1 - limit: 1 - ) { - results { - playerName - score +query getSomeGameScores { + gameScores(after: "YXJyYXljb25uZWN0aW9uOjE") { + pageInfo { + hasNextPage + hasPreviousPage + startCursor + endCursor + } + count + edges { + cursor + node { + id + playerName + score + cheatMode + } } } } ``` -The code above should resolve to something similar to this: - ```json { "data": { "gameScores": { - "results": [ + "pageInfo": { + "hasNextPage": false, + "hasPreviousPage": true, + "startCursor": "YXJyYXljb25uZWN0aW9uOjI=", + "endCursor": "YXJyYXljb25uZWN0aW9uOjI=" + }, + "count": 3, + "edges": [ { - "playerName": "Sean Plott", - "score": 1337 + "cursor": "YXJyYXljb25uZWN0aW9uOjI=", + "node": { + "id": "R2FtZVNjb3JlOjNmWjBoQVJDVU0=", + "playerName": "Steve Jordan", + "score": 134, + "cheatMode": false + } } ] } @@ -242,6 +412,8 @@ The code above should resolve to something similar to this: } ``` +**Note**: `count` is a global count for available results. It's not the number of edges returned by the request. + ## Updating an Object For each class of your application's schema, Parse Server automatically generates a custom mutation for updating this class' objects through the GraphQL API. diff --git a/_includes/graphql/your-first-class.md b/_includes/graphql/your-first-class.md index d2e7f3127..be79c14a7 100644 --- a/_includes/graphql/your-first-class.md +++ b/_includes/graphql/your-first-class.md @@ -5,17 +5,23 @@ Since your application does not have any schema yet, you can use the `createClas ```graphql mutation createGameScoreClass { createClass( - name: "GameScore" - schemaFields: { - addStrings: [{ name: "playerName" }] - addNumbers: [{ name: "score" }] - addBooleans: [{ name: "cheatMode" }] + input: { + clientMutationId: "anFrontId" + name: "GameScore" + schemaFields: { + addStrings: [{ name: "playerName" }] + addNumbers: [{ name: "score" }] + addBooleans: [{ name: "cheatMode" }] + } } ) { - name - schemaFields { + clientMutationId + class { name - __typename + schemaFields { + name + __typename + } } } } @@ -27,37 +33,40 @@ You should receive the following response: { "data": { "createClass": { - "name": "GameScore", - "schemaFields": [ - { - "name": "objectId", - "__typename": "SchemaStringField" - }, - { - "name": "updatedAt", - "__typename": "SchemaDateField" - }, - { - "name": "createdAt", - "__typename": "SchemaDateField" - }, - { - "name": "playerName", - "__typename": "SchemaStringField" - }, - { - "name": "score", - "__typename": "SchemaNumberField" - }, - { - "name": "cheatMode", - "__typename": "SchemaBooleanField" - }, - { - "name": "ACL", - "__typename": "SchemaACLField" - } - ] + "clientMutationId": "anFrontId", + "class": { + "name": "GameScore", + "schemaFields": [ + { + "name": "objectId", + "__typename": "SchemaStringField" + }, + { + "name": "updatedAt", + "__typename": "SchemaDateField" + }, + { + "name": "createdAt", + "__typename": "SchemaDateField" + }, + { + "name": "playerName", + "__typename": "SchemaStringField" + }, + { + "name": "score", + "__typename": "SchemaNumberField" + }, + { + "name": "cheatMode", + "__typename": "SchemaBooleanField" + }, + { + "name": "ACL", + "__typename": "SchemaACLField" + } + ] + } } } } diff --git a/assets/js/bundle.js b/assets/js/bundle.js index 43b7b23ab..7c650354e 100644 --- a/assets/js/bundle.js +++ b/assets/js/bundle.js @@ -1,22 +1,1313 @@ -!function(e){var t={};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}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=110)}([function(e,t,n){(function(r){var o,i;o=[n(17),n(2),n(108),n(22),n(65),n(64),n(36),n(23),n(63),n(37),n(62),n(107),n(9),n(1),n(16),n(61),n(14)],void 0===(i=function(e,t,n,r,o,i,a,s,u,c,l,f,p,d,h,v,g){"use strict";var m=function(e,t){return new m.fn.init(e,t)},y=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function x(e){var t=!!e&&"length"in e&&e.length,n=g(e);return!d(e)&&!h(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}return m.fn=m.prototype={jquery:"3.4.1",constructor:m,length:0,toArray:function(){return r.call(this)},get:function(e){return null==e?r.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=m.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return m.each(this,e)},map:function(e){return this.pushStack(m.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(r.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n)[^>]*|#([\w-]+))$/,a=e.fn.init=function(a,s,u){var c,l;if(!a)return this;if(u=u||o,"string"==typeof a){if(!(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:i.exec(a))||!c[1]&&s)return!s||s.jquery?(s||u).find(a):this.constructor(s).find(a);if(c[1]){if(s=s instanceof e?s[0]:s,e.merge(this,e.parseHTML(c[1],s&&s.nodeType?s.ownerDocument||s:t,!0)),r.test(c[1])&&e.isPlainObject(s))for(c in s)n(this[c])?this[c](s[c]):this.attr(c,s[c]);return this}return(l=t.getElementById(c[2]))&&(this[0]=l,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):n(a)?void 0!==u.ready?u.ready(a):a(e):e.makeArray(a,this)};return a.prototype=e.fn,o=e(t),a}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(50)],void 0===(o=function(e){"use strict";return new e}.apply(t,r))||(e.exports=o)},function(e,t,n){var r;void 0===(r=function(){"use strict";return/[^\x20\t\r\n\f]+/g}.call(t,n,t,e))||(e.exports=r)},function(e,t,n){var r;void 0===(r=function(){"use strict";return function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}}.call(t,n,t,e))||(e.exports=r)},function(e,t,n){var r,o;r=[n(0),n(14),n(1)],void 0===(o=function(e,t,n){"use strict";var r=function(o,i,a,s,u,c,l){var f=0,p=o.length,d=null==a;if("object"===t(a))for(f in u=!0,a)r(o,i,f,a[f],!0,c,l);else if(void 0!==s&&(u=!0,n(s)||(l=!0),d&&(l?(i.call(o,s),i=null):(d=i,i=function(t,n,r){return d.call(e(t),r)})),i))for(;f0&&(T=window.setTimeout(function(){P.abort("timeout")},j.timeout));try{S=!1,x.send(I,R)}catch(e){if(S)throw e;R(-1,e)}}else R(-1,"No Transport");function R(t,n,r,o){var i,a,s,u,c,l=n;S||(S=!0,T&&window.clearTimeout(T),x=void 0,w=o||"",P.readyState=t>0?4:0,i=t>=200&&t<300||304===t,r&&(u=function(e,t,n){for(var r,o,i,a,s=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(o in s)if(s[o]&&s[o].test(r)){u.unshift(o);break}if(u[0]in n)i=u[0];else{for(o in n){if(!u[0]||e.converters[o+" "+u[0]]){i=o;break}a||(a=o)}i=i||a}if(i)return i!==u[0]&&u.unshift(i),n[i]}(j,P,r)),u=function(e,t,n,r){var o,i,a,s,u,c={},l=e.dataTypes.slice();if(l[1])for(a in e.converters)c[a.toLowerCase()]=e.converters[a];for(i=l.shift();i;)if(e.responseFields[i]&&(n[e.responseFields[i]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=i,i=l.shift())if("*"===i)i=u;else if("*"!==u&&u!==i){if(!(a=c[u+" "+i]||c["* "+i]))for(o in c)if((s=o.split(" "))[1]===i&&(a=c[u+" "+s[0]]||c["* "+s[0]])){!0===a?a=c[o]:!0!==c[o]&&(i=s[0],l.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+i}}}return{state:"success",data:t}}(j,u,P,i),i?(j.ifModified&&((c=P.getResponseHeader("Last-Modified"))&&(e.lastModified[b]=c),(c=P.getResponseHeader("etag"))&&(e.etag[b]=c)),204===t||"HEAD"===j.type?l="nocontent":304===t?l="notmodified":(l=u.state,a=u.data,i=!(s=u.error))):(s=l,!t&&l||(l="error",t<0&&(t=0))),P.status=t,P.statusText=(n||l)+"",i?O.resolveWith(D,[a,l,P]):O.rejectWith(D,[P,l,s]),P.statusCode(q),q=void 0,E&&L.trigger(i?"ajaxSuccess":"ajaxError",[P,j,i?a:s]),_.fireWith(D,[P,l]),E&&(L.trigger("ajaxComplete",[P,j]),--e.active||e.event.trigger("ajaxStop")))}return P},getJSON:function(t,n,r){return e.get(t,n,r,"json")},getScript:function(t,n){return e.get(t,void 0,n,"script")}}),e.each(["get","post"],function(t,r){e[r]=function(t,o,i,a){return n(o)&&(a=a||i,i=o,o=void 0),e.ajax(e.extend({url:t,type:r,dataType:a,data:o,success:i},e.isPlainObject(t)&&t))}}),e}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(2),n(20),n(1),n(6),n(27),n(22),n(5),n(7),n(4),n(3)],void 0===(o=function(e,t,n,r,o,i,a,s,u){"use strict";var c=/^key/,l=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,f=/^([^.]*)(?:\.(.+)|)/;function p(){return!0}function d(){return!1}function h(e,n){return e===function(){try{return t.activeElement}catch(e){}}()==("focus"===n)}function v(t,n,r,o,i,a){var s,u;if("object"==typeof n){for(u in"string"!=typeof r&&(o=o||r,r=void 0),n)v(t,u,r,o,n[u],a);return t}if(null==o&&null==i?(i=r,o=r=void 0):null==i&&("string"==typeof r?(i=o,o=void 0):(i=o,o=r,r=void 0)),!1===i)i=d;else if(!i)return t;return 1===a&&(s=i,(i=function(t){return e().off(t),s.apply(this,arguments)}).guid=s.guid||(s.guid=e.guid++)),t.each(function(){e.event.add(this,n,i,o,r)})}function g(t,n,r){r?(s.set(t,n,!1),e.event.add(t,n,{namespace:!1,handler:function(t){var o,i,u=s.get(this,n);if(1&t.isTrigger&&this[n]){if(u.length)(e.event.special[n]||{}).delegateType&&t.stopPropagation();else if(u=a.call(arguments),s.set(this,n,u),o=r(this,n),this[n](),u!==(i=s.get(this,n))||o?s.set(this,n,!1):i={},u!==i)return t.stopImmediatePropagation(),t.preventDefault(),i.value}else u.length&&(s.set(this,n,{value:e.event.trigger(e.extend(u[0],e.Event.prototype),u.slice(1),this)}),t.stopImmediatePropagation())}})):void 0===s.get(t,n)&&e.event.add(t,n,p)}return e.event={global:{},add:function(t,r,i,a,u){var c,l,p,d,h,v,g,m,y,x,b,w=s.get(t);if(w)for(i.handler&&(i=(c=i).handler,u=c.selector),u&&e.find.matchesSelector(n,u),i.guid||(i.guid=e.guid++),(d=w.events)||(d=w.events={}),(l=w.handle)||(l=w.handle=function(n){return void 0!==e&&e.event.triggered!==n.type?e.event.dispatch.apply(t,arguments):void 0}),h=(r=(r||"").match(o)||[""]).length;h--;)y=b=(p=f.exec(r[h])||[])[1],x=(p[2]||"").split(".").sort(),y&&(g=e.event.special[y]||{},y=(u?g.delegateType:g.bindType)||y,g=e.event.special[y]||{},v=e.extend({type:y,origType:b,data:a,handler:i,guid:i.guid,selector:u,needsContext:u&&e.expr.match.needsContext.test(u),namespace:x.join(".")},c),(m=d[y])||((m=d[y]=[]).delegateCount=0,g.setup&&!1!==g.setup.call(t,a,x,l)||t.addEventListener&&t.addEventListener(y,l)),g.add&&(g.add.call(t,v),v.handler.guid||(v.handler.guid=i.guid)),u?m.splice(m.delegateCount++,0,v):m.push(v),e.event.global[y]=!0)},remove:function(t,n,r,i,a){var u,c,l,p,d,h,v,g,m,y,x,b=s.hasData(t)&&s.get(t);if(b&&(p=b.events)){for(d=(n=(n||"").match(o)||[""]).length;d--;)if(m=x=(l=f.exec(n[d])||[])[1],y=(l[2]||"").split(".").sort(),m){for(v=e.event.special[m]||{},g=p[m=(i?v.delegateType:v.bindType)||m]||[],l=l[2]&&new RegExp("(^|\\.)"+y.join("\\.(?:.*\\.|)")+"(\\.|$)"),c=u=g.length;u--;)h=g[u],!a&&x!==h.origType||r&&r.guid!==h.guid||l&&!l.test(h.namespace)||i&&i!==h.selector&&("**"!==i||!h.selector)||(g.splice(u,1),h.selector&&g.delegateCount--,v.remove&&v.remove.call(t,h));c&&!g.length&&(v.teardown&&!1!==v.teardown.call(t,y,b.handle)||e.removeEvent(t,m,b.handle),delete p[m])}else for(m in p)e.event.remove(t,m+n[d],r,i,!0);e.isEmptyObject(p)&&s.remove(t,"handle events")}},dispatch:function(t){var n,r,o,i,a,u,c=e.event.fix(t),l=new Array(arguments.length),f=(s.get(this,"events")||{})[c.type]||[],p=e.event.special[c.type]||{};for(l[0]=c,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==t.type||!0!==l.disabled)){for(a=[],s={},r=0;r-1:e.find(i,this,null,[l]).length),s[i]&&a.push(o);a.length&&u.push({elem:l,handlers:a})}return l=this,c-1:1===r.nodeType&&e.find.matchesSelector(r,t))){s.push(r);break}return this.pushStack(s.length>1?e.uniqueSort(s):s)},index:function(n){return n?"string"==typeof n?t.call(e(n),this[0]):t.call(this,n.jquery?n[0]:n):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,n){return this.pushStack(e.uniqueSort(e.merge(this.get(),e(t,n))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),e.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return n(e,"parentNode")},parentsUntil:function(e,t,r){return n(e,"parentNode",r)},next:function(e){return u(e,"nextSibling")},prev:function(e){return u(e,"previousSibling")},nextAll:function(e){return n(e,"nextSibling")},prevAll:function(e){return n(e,"previousSibling")},nextUntil:function(e,t,r){return n(e,"nextSibling",r)},prevUntil:function(e,t,r){return n(e,"previousSibling",r)},siblings:function(e){return r((e.parentNode||{}).firstChild,e)},children:function(e){return r(e.firstChild)},contents:function(t){return void 0!==t.contentDocument?t.contentDocument:(i(t,"template")&&(t=t.content||t),e.merge([],t.childNodes))}},function(t,n){e.fn[t]=function(r,o){var i=e.map(this,n,r);return"Until"!==t.slice(-5)&&(o=r),o&&"string"==typeof o&&(i=e.filter(o,i)),this.length>1&&(s[t]||e.uniqueSort(i),a.test(t)&&i.reverse()),this.pushStack(i)}}),e}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(1),n(22),n(31)],void 0===(o=function(e,t,n){"use strict";function r(e){return e}function o(e){throw e}function i(e,n,r,o){var i;try{e&&t(i=e.promise)?i.call(e).done(n).fail(r):e&&t(i=e.then)?i.call(e,n,r):n.apply(void 0,[e].slice(o))}catch(e){r.apply(void 0,[e])}}return e.extend({Deferred:function(n){var i=[["notify","progress",e.Callbacks("memory"),e.Callbacks("memory"),2],["resolve","done",e.Callbacks("once memory"),e.Callbacks("once memory"),0,"resolved"],["reject","fail",e.Callbacks("once memory"),e.Callbacks("once memory"),1,"rejected"]],a="pending",s={state:function(){return a},always:function(){return u.done(arguments).fail(arguments),this},catch:function(e){return s.then(null,e)},pipe:function(){var n=arguments;return e.Deferred(function(r){e.each(i,function(e,o){var i=t(n[o[4]])&&n[o[4]];u[o[1]](function(){var e=i&&i.apply(this,arguments);e&&t(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[o[0]+"With"](this,i?[e]:arguments)})}),n=null}).promise()},then:function(n,a,s){var u=0;function c(n,i,a,s){return function(){var l=this,f=arguments,p=function(){var e,p;if(!(n=u&&(a!==o&&(l=void 0,f=[t]),i.rejectWith(l,f))}};n?d():(e.Deferred.getStackHook&&(d.stackTrace=e.Deferred.getStackHook()),window.setTimeout(d))}}return e.Deferred(function(e){i[0][3].add(c(0,e,t(s)?s:r,e.notifyWith)),i[1][3].add(c(0,e,t(n)?n:r)),i[2][3].add(c(0,e,t(a)?a:o))}).promise()},promise:function(t){return null!=t?e.extend(t,s):s}},u={};return e.each(i,function(e,t){var n=t[2],r=t[5];s[t[1]]=n.add,r&&n.add(function(){a=r},i[3-e][2].disable,i[3-e][3].disable,i[0][2].lock,i[0][3].lock),n.add(t[3].fire),u[t[0]]=function(){return u[t[0]+"With"](this===u?void 0:this,arguments),this},u[t[0]+"With"]=n.fireWith}),s.promise(u),n&&n.call(u,u),u},when:function(r){var o=arguments.length,a=o,s=Array(a),u=n.call(arguments),c=e.Deferred(),l=function(e){return function(t){s[e]=this,u[e]=arguments.length>1?n.call(arguments):t,--o||c.resolveWith(s,u)}};if(o<=1&&(i(r,c.done(l(a)).resolve,c.reject,!o),"pending"===c.state()||t(u[a]&&u[a].then)))return c.then();for(;a--;)i(u[a],l(a),c.reject);return c.promise()}}),e}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(23),n(63)],void 0===(o=function(e,t){"use strict";return function(n){return null==n?n+"":"object"==typeof n||"function"==typeof n?e[t.call(n)]||"object":typeof n}}.apply(t,r))||(e.exports=o)},function(e,t,n){var r;void 0===(r=function(){"use strict";var e=/^-ms-/,t=/-([a-z])/g;function n(e,t){return t.toUpperCase()}return function(r){return r.replace(e,"ms-").replace(t,n)}}.apply(t,[]))||(e.exports=r)},function(e,t,n){var r;void 0===(r=function(){"use strict";return function(e){return null!=e&&e===e.window}}.call(t,n,t,e))||(e.exports=r)},function(e,t,n){var r;void 0===(r=function(){"use strict";return[]}.call(t,n,t,e))||(e.exports=r)},function(e,t,n){var r,o;r=[n(0),n(8),n(15),n(32),n(34),n(35),n(59),n(58),n(66),n(57),n(56),n(33),n(55),n(4),n(51),n(3)],void 0===(o=function(e,t,n,r,o,i,a,s,u,c,l,f,p){"use strict";var d=/^(none|table(?!-c[ea]).+)/,h=/^--/,v={position:"absolute",visibility:"hidden",display:"block"},g={letterSpacing:"0",fontWeight:"400"};function m(e,t,n){var o=r.exec(t);return o?Math.max(0,o[2]-(n||0))+(o[3]||"px"):t}function y(t,n,r,o,a,s){var u="width"===n?1:0,c=0,l=0;if(r===(o?"border":"content"))return 0;for(;u<4;u+=2)"margin"===r&&(l+=e.css(t,r+i[u],!0,a)),o?("content"===r&&(l-=e.css(t,"padding"+i[u],!0,a)),"margin"!==r&&(l-=e.css(t,"border"+i[u]+"Width",!0,a))):(l+=e.css(t,"padding"+i[u],!0,a),"padding"!==r?l+=e.css(t,"border"+i[u]+"Width",!0,a):c+=e.css(t,"border"+i[u]+"Width",!0,a));return!o&&s>=0&&(l+=Math.max(0,Math.ceil(t["offset"+n[0].toUpperCase()+n.slice(1)]-s-l-c-.5))||0),l}function x(t,n,r){var i=a(t),s=(!f.boxSizingReliable()||r)&&"border-box"===e.css(t,"boxSizing",!1,i),c=s,l=u(t,n,i),p="offset"+n[0].toUpperCase()+n.slice(1);if(o.test(l)){if(!r)return l;l="auto"}return(!f.boxSizingReliable()&&s||"auto"===l||!parseFloat(l)&&"inline"===e.css(t,"display",!1,i))&&t.getClientRects().length&&(s="border-box"===e.css(t,"boxSizing",!1,i),(c=p in t)&&(l=t[p])),(l=parseFloat(l)||0)+y(t,n,r||(s?"border":"content"),c,i,l)+"px"}return e.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=u(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,o,i,a){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var s,u,l,d=n(o),v=h.test(o),g=t.style;if(v||(o=p(d)),l=e.cssHooks[o]||e.cssHooks[d],void 0===i)return l&&"get"in l&&void 0!==(s=l.get(t,!1,a))?s:g[o];"string"===(u=typeof i)&&(s=r.exec(i))&&s[1]&&(i=c(t,o,s),u="number"),null!=i&&i==i&&("number"!==u||v||(i+=s&&s[3]||(e.cssNumber[d]?"":"px")),f.clearCloneStyle||""!==i||0!==o.indexOf("background")||(g[o]="inherit"),l&&"set"in l&&void 0===(i=l.set(t,i,a))||(v?g.setProperty(o,i):g[o]=i))}},css:function(t,r,o,i){var a,s,c,l=n(r);return h.test(r)||(r=p(l)),(c=e.cssHooks[r]||e.cssHooks[l])&&"get"in c&&(a=c.get(t,!0,o)),void 0===a&&(a=u(t,r,i)),"normal"===a&&r in g&&(a=g[r]),""===o||o?(s=parseFloat(a),!0===o||isFinite(s)?s||0:a):a}}),e.each(["height","width"],function(t,n){e.cssHooks[n]={get:function(t,r,o){if(r)return!d.test(e.css(t,"display"))||t.getClientRects().length&&t.getBoundingClientRect().width?x(t,n,o):s(t,v,function(){return x(t,n,o)})},set:function(t,o,i){var s,u=a(t),c=!f.scrollboxSize()&&"absolute"===u.position,l=(c||i)&&"border-box"===e.css(t,"boxSizing",!1,u),p=i?y(t,n,i,l,u):0;return l&&c&&(p-=Math.ceil(t["offset"+n[0].toUpperCase()+n.slice(1)]-parseFloat(u[n])-y(t,n,"border",!1,u)-.5)),p&&(s=r.exec(o))&&"px"!==(s[3]||"px")&&(t.style[n]=o,o=e.css(t,n)),m(0,o,p)}}}),e.cssHooks.marginLeft=l(f.reliableMarginLeft,function(e,t){if(t)return(parseFloat(u(e,"marginLeft"))||e.getBoundingClientRect().left-s(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),e.each({margin:"",padding:"",border:"Width"},function(t,n){e.cssHooks[t+n]={expand:function(e){for(var r=0,o={},a="string"==typeof e?e.split(" "):[e];r<4;r++)o[t+i[r]+n]=a[r]||a[r-2]||a[0];return o}},"margin"!==t&&(e.cssHooks[t+n].set=m)}),e.fn.extend({css:function(n,r){return t(this,function(t,n,r){var o,i,s={},u=0;if(Array.isArray(n)){for(o=a(t),i=n.length;u1)}}),e}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(21),n(65),n(1),n(64),n(27),n(8),n(46),n(45),n(44),n(43),n(42),n(47),n(96),n(5),n(49),n(30),n(61),n(7),n(4),n(12),n(3),n(11)],void 0===(o=function(e,t,n,r,o,i,a,s,u,c,l,f,p,d,h,v,g,m,y){"use strict";var x=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,b=/\s*$/g;function T(t,n){return y(t,"table")&&y(11!==n.nodeType?n:n.firstChild,"tr")&&e(t).children("tbody")[0]||t}function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function S(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function E(t,n){var r,o,i,a,s,u,c,l;if(1===n.nodeType){if(h.hasData(t)&&(a=h.access(t),s=h.set(n,a),l=a.events))for(i in delete s.handle,s.events={},l)for(r=0,o=l[i].length;r1&&"string"==typeof E&&!d.checkClone&&w.test(E))return t.each(function(e){var n=t.eq(e);N&&(o[0]=E.call(this,e,n.html())),A(n,o,i,a)});if(b&&(c=(s=p(o,t[0].ownerDocument,!1,t,a)).firstChild,1===s.childNodes.length&&(s=c),c||a)){for(v=(f=e.map(l(s,"script"),k)).length;x")},clone:function(n,r,o){var i,a,s,u,c=n.cloneNode(!0),p=t(n);if(!(d.noCloneChecked||1!==n.nodeType&&11!==n.nodeType||e.isXMLDoc(n)))for(u=l(c),i=0,a=(s=l(n)).length;i0&&f(u,!p&&l(n,"script")),c},cleanData:function(t){for(var n,r,o,i=e.event.special,a=0;void 0!==(r=t[a]);a++)if(g(r)){if(n=r[h.expando]){if(n.events)for(o in n.events)i[o]?e.event.remove(r,o):e.removeEvent(r,o,n.handle);r[h.expando]=void 0}r[v.expando]&&(r[v.expando]=void 0)}}}),e.fn.extend({detach:function(e){return j(this,e,!0)},remove:function(e){return j(this,e)},text:function(t){return a(this,function(t){return void 0===t?e.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return A(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||T(this,e).appendChild(e)})},prepend:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=T(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var t,n=0;null!=(t=this[n]);n++)1===t.nodeType&&(e.cleanData(l(t,!1)),t.textContent="");return this},clone:function(t,n){return t=null!=t&&t,n=null==n?t:n,this.map(function(){return e.clone(this,t,n)})},html:function(t){return a(this,function(t){var n=this[0]||{},r=0,o=this.length;if(void 0===t&&1===n.nodeType)return n.innerHTML;if("string"==typeof t&&!b.test(t)&&!c[(s.exec(t)||["",""])[1].toLowerCase()]){t=e.htmlPrefilter(t);try{for(;r-1&&(C=(T=C.split(".")).shift(),T.sort()),m=C.indexOf(":")<0&&"on"+C,(c=c[e.expando]?c:new e.Event(C,"object"==typeof c&&c)).isTrigger=p?2:3,c.namespace=T.join("."),c.rnamespace=c.namespace?new RegExp("(^|\\.)"+T.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,c.result=void 0,c.target||(c.target=f),l=null==l?[c]:e.makeArray(l,[c]),x=e.event.special[C]||{},p||!x.trigger||!1!==x.trigger.apply(f,l))){if(!p&&!x.noBubble&&!a(f)){for(g=x.delegateType||C,s.test(g+C)||(h=h.parentNode);h;h=h.parentNode)w.push(h),v=h;v===(f.ownerDocument||t)&&w.push(v.defaultView||v.parentWindow||window)}for(d=0;(h=w[d++])&&!c.isPropagationStopped();)b=h,c.type=d>1?g:x.bindType||C,(y=(n.get(h,"events")||{})[c.type]&&n.get(h,"handle"))&&y.apply(h,l),(y=m&&h[m])&&y.apply&&r(h)&&(c.result=y.apply(h,l),!1===c.result&&c.preventDefault());return c.type=C,p||c.isDefaultPrevented()||x._default&&!1!==x._default.apply(w.pop(),l)||!r(f)||m&&i(f[C])&&!a(f)&&((v=f[m])&&(f[m]=null),e.event.triggered=C,c.isPropagationStopped()&&b.addEventListener(C,u),f[C](),c.isPropagationStopped()&&b.removeEventListener(C,u),e.event.triggered=void 0,v&&(f[m]=v)),c.result}},simulate:function(t,n,r){var o=e.extend(new e.Event,r,{type:t,isSimulated:!0});e.event.trigger(o,null,n)}}),e.fn.extend({trigger:function(t,n){return this.each(function(){e.event.trigger(t,n,this)})},triggerHandler:function(t,n){var r=this[0];if(r)return e.event.trigger(t,n,r,!0)}}),e}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(6)],void 0===(o=function(e){"use strict";return function(t){return(t.match(e)||[]).join(" ")}}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(2),n(9)],void 0===(o=function(e,t){"use strict";return function(){var n=e.createElement("input"),r=e.createElement("select").appendChild(e.createElement("option"));n.type="checkbox",t.checkOn=""!==n.value,t.optSelected=r.selected,(n=e.createElement("input")).value="t",n.type="radio",t.radioValue="t"===n.value}(),t}.apply(t,r))||(e.exports=o)},function(e,t,n){var r;void 0===(r=function(){"use strict";return/^(?:checkbox|radio)$/i}.call(t,n,t,e))||(e.exports=r)},function(e,t,n){var r,o;r=[n(0),n(15),n(2),n(1),n(32),n(6),n(35),n(48),n(58),n(57),n(5),n(97),n(4),n(29),n(13),n(12),n(19),n(18),n(95)],void 0===(o=function(e,t,n,r,o,i,a,s,u,c,l,f){"use strict";var p,d,h=/^(?:toggle|show|hide)$/,v=/queueHooks$/;function g(){d&&(!1===n.hidden&&window.requestAnimationFrame?window.requestAnimationFrame(g):window.setTimeout(g,e.fx.interval),e.fx.tick())}function m(){return window.setTimeout(function(){p=void 0}),p=Date.now()}function y(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)o["margin"+(n=a[r])]=o["padding"+n]=e;return t&&(o.opacity=o.width=e),o}function x(e,t,n){for(var r,o=(b.tweeners[t]||[]).concat(b.tweeners["*"]),i=0,a=o.length;i-1;)c.splice(r,1),r<=f&&f--}),this},has:function(t){return t?e.inArray(t,c)>-1:c.length>0},empty:function(){return c&&(c=[]),this},disable:function(){return u=l=[],c=a="",this},disabled:function(){return!c},lock:function(){return u=l=[],a||i||(c=a=""),this},locked:function(){return!!u},fireWith:function(e,t){return u||(t=[e,(t=t||[]).slice?t.slice():t],l.push(t),i||p()),this},fire:function(){return d.fireWith(this,arguments),this},fired:function(){return!!s}};return d},e}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(60)],void 0===(o=function(e){"use strict";return new RegExp("^(?:([+-])=|)("+e+")([a-z%]*)$","i")}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(2),n(20),n(9)],void 0===(o=function(e,t,n,r){"use strict";return function(){function o(){if(p){f.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",p.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",n.appendChild(f).appendChild(p);var e=window.getComputedStyle(p);a="1%"!==e.top,l=12===i(e.marginLeft),p.style.right="60%",c=36===i(e.right),s=36===i(e.width),p.style.position="absolute",u=12===i(p.offsetWidth/3),n.removeChild(f),p=null}}function i(e){return Math.round(parseFloat(e))}var a,s,u,c,l,f=t.createElement("div"),p=t.createElement("div");p.style&&(p.style.backgroundClip="content-box",p.cloneNode(!0).style.backgroundClip="",r.clearCloneStyle="content-box"===p.style.backgroundClip,e.extend(r,{boxSizingReliable:function(){return o(),s},pixelBoxStyles:function(){return o(),c},pixelPosition:function(){return o(),a},reliableMarginLeft:function(){return o(),l},scrollboxSize:function(){return o(),u}}))}(),r}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(60)],void 0===(o=function(e){"use strict";return new RegExp("^("+e+")(?!px)[a-z%]+$","i")}.apply(t,r))||(e.exports=o)},function(e,t,n){var r;void 0===(r=function(){"use strict";return["Top","Right","Bottom","Left"]}.call(t,n,t,e))||(e.exports=r)},function(e,t,n){var r,o;r=[n(17)],void 0===(o=function(e){"use strict";return e.indexOf}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(23)],void 0===(o=function(e){"use strict";return e.hasOwnProperty}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(14),n(27),n(1),n(4),n(12),n(41)],void 0===(o=function(e,t,n,r){"use strict";var o=/\[\]$/,i=/\r?\n/g,a=/^(?:submit|button|image|reset|file)$/i,s=/^(?:input|select|textarea|keygen)/i;function u(n,r,i,a){var s;if(Array.isArray(r))e.each(r,function(e,t){i||o.test(n)?a(n,t):u(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,i,a)});else if(i||"object"!==t(r))a(n,r);else for(s in r)u(n+"["+s+"]",r[s],i,a)}return e.param=function(t,n){var o,i=[],a=function(e,t){var n=r(t)?t():t;i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==t)return"";if(Array.isArray(t)||t.jquery&&!e.isPlainObject(t))e.each(t,function(){a(this.name,this.value)});else for(o in t)u(o,t[o],n,a);return i.join("&")},e.fn.extend({serialize:function(){return e.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=e.prop(this,"elements");return t?e.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!e(this).is(":disabled")&&s.test(this.nodeName)&&!a.test(t)&&(this.checked||!n.test(t))}).map(function(t,n){var r=e(this).val();return null==r?null:Array.isArray(r)?e.map(r,function(e){return{name:n.name,value:e.replace(i,"\r\n")}}):{name:n.name,value:r.replace(i,"\r\n")}}).get()}}),e}.apply(t,r))||(e.exports=o)},function(e,t,n){var r;void 0===(r=function(){"use strict";return Date.now()}.call(t,n,t,e))||(e.exports=r)},function(e,t,n){var r;void 0===(r=function(){"use strict";return/\?/}.call(t,n,t,e))||(e.exports=r)},function(e,t,n){var r,o;r=[n(0),n(8),n(26),n(3)],void 0===(o=function(e,t,n){"use strict";var r=/^(?:input|select|textarea|button)$/i,o=/^(?:a|area)$/i;e.fn.extend({prop:function(n,r){return t(this,e.prop,n,r,arguments.length>1)},removeProp:function(t){return this.each(function(){delete this[e.propFix[t]||t]})}}),e.extend({prop:function(t,n,r){var o,i,a=t.nodeType;if(3!==a&&8!==a&&2!==a)return 1===a&&e.isXMLDoc(t)||(n=e.propFix[n]||n,i=e.propHooks[n]),void 0!==r?i&&"set"in i&&void 0!==(o=i.set(t,r,n))?o:t[n]=r:i&&"get"in i&&null!==(o=i.get(t,n))?o:t[n]},propHooks:{tabIndex:{get:function(t){var n=e.find.attr(t,"tabindex");return n?parseInt(n,10):r.test(t.nodeName)||o.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),n.optSelected||(e.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),e.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){e.propFix[this.toLowerCase()]=this})}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(5)],void 0===(o=function(e){"use strict";return function(t,n){for(var r=0,o=t.length;r",""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};return e.optgroup=e.option,e.tbody=e.tfoot=e.colgroup=e.caption=e.thead,e.th=e.td,e}.call(t,n,t,e))||(e.exports=r)},function(e,t,n){var r;void 0===(r=function(){"use strict";return/^$|^module$|\/(?:java|ecma)script/i}.call(t,n,t,e))||(e.exports=r)},function(e,t,n){var r;void 0===(r=function(){"use strict";return/<([a-z][^\/\0>\x20\t\r\n\f]*)/i}.call(t,n,t,e))||(e.exports=r)},function(e,t,n){var r,o;r=[n(0),n(14),n(21),n(46),n(45),n(44),n(43),n(42)],void 0===(o=function(e,t,n,r,o,i,a,s){"use strict";var u=/<|&#?\w+;/;return function(c,l,f,p,d){for(var h,v,g,m,y,x,b=l.createDocumentFragment(),w=[],C=0,T=c.length;C-1)d&&d.push(h);else if(y=n(h),v=a(b.appendChild(h),"script"),y&&s(v),f)for(x=0;h=v[x++];)o.test(h.type||"")&&f.push(h);return b}}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(21)],void 0===(o=function(e,t){"use strict";return function(n,r){return"none"===(n=r||n).style.display||""===n.style.display&&t(n)&&"none"===e.css(n,"display")}}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(50)],void 0===(o=function(e){"use strict";return new e}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(15),n(6),n(30)],void 0===(o=function(e,t,n,r){"use strict";function o(){this.expando=e.expando+o.uid++}return o.uid=1,o.prototype={cache:function(e){var t=e[this.expando];return t||(t={},r(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,n,r){var o,i=this.cache(e);if("string"==typeof n)i[t(n)]=r;else for(o in n)i[t(o)]=n[o];return i},get:function(e,n){return void 0===n?this.cache(e):e[this.expando]&&e[this.expando][t(n)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(r,o){var i,a=r[this.expando];if(void 0!==a){if(void 0!==o){i=(o=Array.isArray(o)?o.map(t):(o=t(o))in a?[o]:o.match(n)||[]).length;for(;i--;)delete a[o[i]]}(void 0===o||e.isEmptyObject(a))&&(r.nodeType?r[this.expando]=void 0:delete r[this.expando])}},hasData:function(t){var n=t[this.expando];return void 0!==n&&!e.isEmptyObject(n)}},o}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(2),n(103),n(13)],void 0===(o=function(e,t){"use strict";var n=e.Deferred();function r(){t.removeEventListener("DOMContentLoaded",r),window.removeEventListener("load",r),e.ready()}e.fn.ready=function(t){return n.then(t).catch(function(t){e.readyException(t)}),this},e.extend({isReady:!1,readyWait:1,ready:function(r){(!0===r?--e.readyWait:e.isReady)||(e.isReady=!0,!0!==r&&--e.readyWait>0||n.resolveWith(t,[e]))}}),e.ready.then=n.then,"complete"===t.readyState||"loading"!==t.readyState&&!t.documentElement.doScroll?window.setTimeout(e.ready):(t.addEventListener("DOMContentLoaded",r),window.addEventListener("load",r))}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(3)],void 0===(o=function(e){"use strict";return e.expr.match.needsContext}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(36),n(1),n(52),n(3)],void 0===(o=function(e,t,n,r){"use strict";function o(r,o,i){return n(o)?e.grep(r,function(e,t){return!!o.call(e,t,e)!==i}):o.nodeType?e.grep(r,function(e){return e===o!==i}):"string"!=typeof o?e.grep(r,function(e){return t.call(o,e)>-1!==i}):e.filter(o,r,i)}e.filter=function(t,n,r){var o=n[0];return r&&(t=":not("+t+")"),1===n.length&&1===o.nodeType?e.find.matchesSelector(o,t)?[o]:[]:e.find.matches(t,e.grep(n,function(e){return 1===e.nodeType}))},e.fn.extend({find:function(t){var n,r,o=this.length,i=this;if("string"!=typeof t)return this.pushStack(e(t).filter(function(){for(n=0;n1?e.uniqueSort(r):r},filter:function(e){return this.pushStack(o(this,e||[],!1))},not:function(e){return this.pushStack(o(this,e||[],!0))},is:function(t){return!!o(this,"string"==typeof t&&r.test(t)?e(t):t||[],!1).length}})}.apply(t,r))||(e.exports=o)},function(e,t,n){var r;void 0===(r=function(){"use strict";return/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i}.call(t,n,t,e))||(e.exports=r)},function(e,t,n){var r,o;r=[n(2),n(0)],void 0===(o=function(e,t){"use strict";var n=["Webkit","Moz","ms"],r=e.createElement("div").style,o={};return function(e){var i=t.cssProps[e]||o[e];return i||(e in r?e:o[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),o=n.length;o--;)if((e=n[o]+t)in r)return e}(e)||e)}}.apply(t,r))||(e.exports=o)},function(e,t,n){var r;void 0===(r=function(){"use strict";return function(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}}.call(t,n,t,e))||(e.exports=r)},function(e,t,n){var r,o;r=[n(0),n(32)],void 0===(o=function(e,t){"use strict";return function(n,r,o,i){var a,s,u=20,c=i?function(){return i.cur()}:function(){return e.css(n,r,"")},l=c(),f=o&&o[3]||(e.cssNumber[r]?"":"px"),p=n.nodeType&&(e.cssNumber[r]||"px"!==f&&+l)&&t.exec(e.css(n,r));if(p&&p[3]!==f){for(l/=2,f=f||p[3],p=+l||1;u--;)e.style(n,r,p+f),(1-s)*(1-(s=c()/l||.5))<=0&&(u=0),p/=s;p*=2,e.style(n,r,p+f),o=o||[]}return o&&(p=+p||+l||0,a=o[1]?p+(o[1]+1)*o[2]:+o[2],i&&(i.unit=f,i.start=p,i.end=a)),a}}.apply(t,r))||(e.exports=o)},function(e,t,n){var r;void 0===(r=function(){"use strict";return function(e,t,n,r){var o,i,a={};for(i in t)a[i]=e.style[i],e.style[i]=t[i];for(i in o=n.apply(e,r||[]),t)e.style[i]=a[i];return o}}.call(t,n,t,e))||(e.exports=r)},function(e,t,n){var r;void 0===(r=function(){"use strict";return function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=window),t.getComputedStyle(e)}}.call(t,n,t,e))||(e.exports=r)},function(e,t,n){var r;void 0===(r=function(){"use strict";return/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source}.call(t,n,t,e))||(e.exports=r)},function(e,t,n){var r,o;r=[n(2)],void 0===(o=function(e){"use strict";var t={type:!0,src:!0,nonce:!0,noModule:!0};return function(n,r,o){var i,a,s=(o=o||e).createElement("script");if(s.text=n,r)for(i in t)(a=r[i]||r.getAttribute&&r.getAttribute(i))&&s.setAttribute(i,a);o.head.appendChild(s).parentNode.removeChild(s)}}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(37)],void 0===(o=function(e){"use strict";return e.toString}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(23)],void 0===(o=function(e){"use strict";return e.toString}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(17)],void 0===(o=function(e){"use strict";return e.push}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(17)],void 0===(o=function(e){"use strict";return e.concat}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(21),n(104),n(34),n(59),n(33)],void 0===(o=function(e,t,n,r,o,i){"use strict";return function(a,s,u){var c,l,f,p,d=a.style;return(u=u||o(a))&&(""!==(p=u.getPropertyValue(s)||u[s])||t(a)||(p=e.style(a,s)),!i.pixelBoxStyles()&&r.test(p)&&n.test(s)&&(c=d.width,l=d.minWidth,f=d.maxWidth,d.minWidth=d.maxWidth=d.width=p,p=u.width,d.width=c,d.minWidth=l,d.maxWidth=f)),void 0!==p?p+"":p}}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(3),n(12),n(31),n(13),n(100),n(51),n(99),n(29),n(98),n(94),n(11),n(90),n(19),n(88),n(85),n(18),n(84),n(38),n(10),n(83),n(82),n(81),n(80),n(77),n(28),n(76),n(75),n(74),n(73),n(71),n(70)],void 0===(o=function(e){"use strict";return e}.apply(t,r))||(e.exports=o)},function(e,t,n){"use strict";var r=function(e,t,n,r){var o;if(o=r?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e),n){Array.isArray(n)||(n=[n]);for(var i=0;i6&&n<10)return(0|(t=e/1e6))===t||0===Math.round(e%1e6/1e5)?(0|t)+"M":(0|t)+"."+Math.round(e%1e6/1e5)+"M";if(n>5)return(0|(t=e/1e3))===t||0===Math.round(e%1e3/100)?(0|t)+"K":(0|t)+"."+Math.round(e%1e3/100)+"K";if(n>3){var r=e%1e3|0;return r<10?r="00"+r:r<100&&(r="0"+r),(e/1e3|0)+","+r}return(0|e)+""},Animate:{show:function(e,t){"undefined"===t&&(t=0),e.style.display="block",e.style.opacity=0,setTimeout(function(){e.style.opacity=1},t)},hide:function(e,t){window.getComputedStyle(e).opacity>0&&(void 0===t&&(t=500),e.style.opacity=0,setTimeout(function(){e.style.display="none"},t))}},ComponentProto:{attach:function(e){return this.node?(e.appendChild(this.node),this):null},remove:function(){return this.node&&this.node.parentNode?(this.node.parentNode.removeChild(this.node),this):null}}};e.exports=o},function(e,t,n){"use strict";var r,o,i,a,s,u=window,c={},l=function(){},f=function(e,t){if(function(e){return null===e.offsetParent}(e))return!1;var n=e.getBoundingClientRect();return n.right>=t.l&&n.bottom>=t.t&&n.left<=t.r&&n.top<=t.b},p=function(){!a&&o||(clearTimeout(o),o=setTimeout(function(){c.render(),o=null},i))};c.init=function(e){var t=(e=e||{}).offset||0,n=e.offsetVertical||t,o=e.offsetHorizontal||t,f=function(e,t){return parseInt(e||t,10)};r={t:f(e.offsetTop,n),b:f(e.offsetBottom,n),l:f(e.offsetLeft,o),r:f(e.offsetRight,o)},i=f(e.throttle,250),a=!1!==e.debounce,s=!!e.unload,l=e.callback||l,c.render(),document.addEventListener?(u.addEventListener("scroll",p,!1),u.addEventListener("load",p,!1)):(u.attachEvent("onscroll",p),u.attachEvent("onload",p))},c.render=function(e){for(var t,n,o=(e||document).querySelectorAll("[data-echo], [data-echo-background]"),i=o.length,a={l:0-r.l,t:0-r.t,b:(u.innerHeight||document.documentElement.clientHeight)+r.b,r:(u.innerWidth||document.documentElement.clientWidth)+r.r},p=0;p0?this.on(n,null,e,t):this.trigger(n)}}),e.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}})}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(7),n(15),n(14),n(1),n(16),n(22),n(72)],void 0===(o=function(e,t,n,r,o,i,a){"use strict";e.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),e.proxy=function(t,n){var r,i,s;if("string"==typeof n&&(r=t[n],n=t,t=r),o(t))return i=a.call(arguments,2),(s=function(){return t.apply(n||this,i.concat(a.call(arguments)))}).guid=t.guid=t.guid||e.guid++,s},e.holdReady=function(t){t?e.readyWait++:e.ready(!0)},e.isArray=Array.isArray,e.parseJSON=JSON.parse,e.nodeName=t,e.isFunction=o,e.isWindow=i,e.camelCase=n,e.type=r,e.now=Date.now,e.isNumeric=function(t){var n=e.type(t);return("number"===n||"string"===n)&&!isNaN(t-parseFloat(t))}}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(8),n(16),n(18)],void 0===(o=function(e,t,n){"use strict";return e.each({Height:"height",Width:"width"},function(r,o){e.each({padding:"inner"+r,content:o,"":"outer"+r},function(i,a){e.fn[a]=function(s,u){var c=arguments.length&&(i||"boolean"!=typeof s),l=i||(!0===s||!0===u?"margin":"border");return t(this,function(t,o,i){var s;return n(t)?0===a.indexOf("outer")?t["inner"+r]:t.document.documentElement["client"+r]:9===t.nodeType?(s=t.documentElement,Math.max(t.body["scroll"+r],s["scroll"+r],t.body["offset"+r],s["offset"+r],s["client"+r])):void 0===i?e.css(t,o,l):e.style(t,o,i,l)},o,c?s:void 0,c)}})}),e}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(8),n(2),n(20),n(1),n(34),n(66),n(56),n(33),n(16),n(4),n(18),n(3)],void 0===(o=function(e,t,n,r,o,i,a,s,u,c){"use strict";return e.offset={setOffset:function(t,n,r){var i,a,s,u,c,l,f=e.css(t,"position"),p=e(t),d={};"static"===f&&(t.style.position="relative"),c=p.offset(),s=e.css(t,"top"),l=e.css(t,"left"),("absolute"===f||"fixed"===f)&&(s+l).indexOf("auto")>-1?(u=(i=p.position()).top,a=i.left):(u=parseFloat(s)||0,a=parseFloat(l)||0),o(n)&&(n=n.call(t,r,e.extend({},c))),null!=n.top&&(d.top=n.top-c.top+u),null!=n.left&&(d.left=n.left-c.left+a),"using"in n?n.using.call(t,d):p.css(d)}},e.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(n){e.offset.setOffset(this,t,n)});var n,r,o=this[0];return o?o.getClientRects().length?(n=o.getBoundingClientRect(),r=o.ownerDocument.defaultView,{top:n.top+r.pageYOffset,left:n.left+r.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var t,n,r,o=this[0],i={top:0,left:0};if("fixed"===e.css(o,"position"))n=o.getBoundingClientRect();else{for(n=this.offset(),r=o.ownerDocument,t=o.offsetParent||r.documentElement;t&&(t===r.body||t===r.documentElement)&&"static"===e.css(t,"position");)t=t.parentNode;t&&t!==o&&1===t.nodeType&&((i=e(t).offset()).top+=e.css(t,"borderTopWidth",!0),i.left+=e.css(t,"borderLeftWidth",!0))}return{top:n.top-i.top-e.css(o,"marginTop",!0),left:n.left-i.left-e.css(o,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent;t&&"static"===e.css(t,"position");)t=t.offsetParent;return t||r})}}),e.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(n,r){var o="pageYOffset"===r;e.fn[n]=function(e){return t(this,function(e,t,n){var i;if(c(e)?i=e:9===e.nodeType&&(i=e.defaultView),void 0===n)return i?i[r]:e[t];i?i.scrollTo(o?i.pageXOffset:n,o?n:i.pageYOffset):e[t]=n},n,e,arguments.length)}}),e.each(["top","left"],function(t,n){e.cssHooks[n]=s(u.pixelPosition,function(t,r){if(r)return r=a(t,n),i.test(r)?e(t).position()[n]+"px":r})}),e}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(3),n(28)],void 0===(o=function(e){"use strict";e.expr.pseudos.animated=function(t){return e.grep(e.timers,function(e){return t===e.elem}).length}}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(11)],void 0===(o=function(e){"use strict";e.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,n){e.fn[n]=function(e){return this.on(n,e)}})}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(2),n(9)],void 0===(o=function(e,t){"use strict";return t.createHTMLDocument=function(){var t=e.implementation.createHTMLDocument("").body;return t.innerHTML="
",2===t.childNodes.length}(),t}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(2),n(54),n(47),n(78)],void 0===(o=function(e,t,n,r,o){"use strict";return e.parseHTML=function(i,a,s){return"string"!=typeof i?[]:("boolean"==typeof a&&(s=a,a=!1),a||(o.createHTMLDocument?((u=(a=t.implementation.createHTMLDocument("")).createElement("base")).href=t.location.href,a.head.appendChild(u)):a=t),c=n.exec(i),l=!s&&[],c?[a.createElement(c[1])]:(c=r([i],a,l),l&&l.length&&e(l).remove(),e.merge([],c.childNodes)));var u,c,l},e.parseHTML}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(25),n(1),n(79),n(10),n(12),n(19),n(3)],void 0===(o=function(e,t,n){"use strict";e.fn.load=function(r,o,i){var a,s,u,c=this,l=r.indexOf(" ");return l>-1&&(a=t(r.slice(l)),r=r.slice(0,l)),n(o)?(i=o,o=void 0):o&&"object"==typeof o&&(s="POST"),c.length>0&&e.ajax({url:r,type:s||"GET",dataType:"html",data:o}).done(function(t){u=arguments,c.html(a?e("
").append(e.parseHTML(t)).find(a):t)}).always(i&&function(e,t){c.each(function(){i.apply(this,u||[e.responseText,t,e])})}),this}}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(1),n(39),n(40),n(10)],void 0===(o=function(e,t,n,r){"use strict";var o=[],i=/(=)\?(?=&|$)|\?\?/;e.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=o.pop()||e.expando+"_"+n++;return this[t]=!0,t}}),e.ajaxPrefilter("json jsonp",function(n,a,s){var u,c,l,f=!1!==n.jsonp&&(i.test(n.url)?"url":"string"==typeof n.data&&0===(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&i.test(n.data)&&"data");if(f||"jsonp"===n.dataTypes[0])return u=n.jsonpCallback=t(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,f?n[f]=n[f].replace(i,"$1"+u):!1!==n.jsonp&&(n.url+=(r.test(n.url)?"&":"?")+n.jsonp+"="+u),n.converters["script json"]=function(){return l||e.error(u+" was not called"),l[0]},n.dataTypes[0]="json",c=window[u],window[u]=function(){l=arguments},s.always(function(){void 0===c?e(window).removeProp(u):window[u]=c,n[u]&&(n.jsonpCallback=a.jsonpCallback,o.push(u)),l&&t(c)&&c(l[0]),l=c=void 0}),"script"})}.apply(t,r))||(e.exports=o)},function(e,t,n){var r,o;r=[n(0),n(2),n(10)],void 0===(o=function(e,t){"use strict";e.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),e.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return e.globalEval(t),t}}}),e.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),e.ajaxTransport("script",function(n){var r,o;if(n.crossDomain||n.scriptAttrs)return{send:function(i,a){r=e("