From 6f334da0e947703df30b9d25352cec5c3433edeb Mon Sep 17 00:00:00 2001 From: peppelinux Date: Wed, 12 Jul 2023 18:43:53 +0200 Subject: [PATCH] chore: cleanup --- _images/Eo_circle_green_checkmark.svg | 2 - _images/Eo_circle_red_letter-x.svg | 1 - _images/High-Level-Flow-EUDIW-PID-Issuing.svg | 4 - _images/Low-Level-Flow-EUDIW-PID-Issuing.svg | 1 - _images/cross_device_auth_seq_diagram.svg | 2 - ...w_sequence_wallet_instance_attestation.svg | 1 - ...tatic_view_wallet_instance_attestation.svg | 1 - _images/trust-roles.svg | 426 - _images/verifier_qr_code.svg | 10 - _sources/algorithms.rst.txt | 98 - _sources/backup-restore.rst.txt | 57 - _sources/contribute.rst.txt | 8 - _sources/defined-terms.rst.txt | 63 - _sources/index.rst.txt | 79 - _sources/issuance.rst.txt | 57 - _sources/pid-data-model.rst.txt | 400 - _sources/pid-eaa-data.rst.txt | 57 - _sources/pid-eaa-mdoc-cbor.rst.txt | 57 - _sources/pid-eaa-sd-jwt.rst.txt | 57 - _sources/pid-issuance.rst.txt | 887 -- _sources/pseudonyms.rst.txt | 57 - _sources/relying-party-solution.rst.txt | 741 -- _sources/revocation-lists.rst.txt | 57 - _sources/ssi-introduction.rst.txt | 42 - _sources/standards.rst.txt | 8 - _sources/trust.rst.txt | 640 - _sources/wallet-instance-attestation.rst.txt | 547 - _sources/wallet-solution.rst.txt | 76 - .../_sphinx_javascript_frameworks_compat.js | 134 - _static/basic.css | 932 -- _static/css/theme.css | 1 - _static/data/glossary.json | 1 - _static/doctools.js | 264 - _static/documentation_options.js | 14 - _static/file.png | Bin 286 -> 0 bytes _static/font/docs-italia.eot | Bin 11192 -> 0 bytes _static/font/docs-italia.svg | 68 - _static/font/docs-italia.ttf | Bin 11012 -> 0 bytes _static/font/docs-italia.woff | Bin 11092 -> 0 bytes _static/font/italia-icon-font.eot | Bin 23672 -> 0 bytes _static/font/italia-icon-font.svg | 134 - _static/font/italia-icon-font.ttf | Bin 23472 -> 0 bytes _static/font/italia-icon-font.woff | Bin 13888 -> 0 bytes _static/font/italia-icon-font.woff2 | Bin 11952 -> 0 bytes _static/images/agid-logo.svg | 25 - _static/images/may.svg | 37 - _static/images/must.svg | 71 - _static/images/must_not.svg | 65 - _static/images/should.svg | 52 - _static/images/should_not.svg | 52 - _static/images/team-digitale-logo.svg | 15 - _static/jquery-3.6.0.js | 10881 ---------------- _static/jquery.js | 2 - _static/js/theme.js | 1 - _static/language_data.js | 199 - _static/minus.png | Bin 90 -> 0 bytes _static/pkce.py | 21 - _static/plus.png | Bin 90 -> 0 bytes _static/pygments.css | 74 - _static/searchtools.js | 531 - _static/underscore-1.13.1.js | 2042 --- _static/underscore.js | 6 - 62 files changed, 20058 deletions(-) delete mode 100644 _images/Eo_circle_green_checkmark.svg delete mode 100644 _images/Eo_circle_red_letter-x.svg delete mode 100644 _images/High-Level-Flow-EUDIW-PID-Issuing.svg delete mode 100644 _images/Low-Level-Flow-EUDIW-PID-Issuing.svg delete mode 100644 _images/cross_device_auth_seq_diagram.svg delete mode 100644 _images/dynamic_view_sequence_wallet_instance_attestation.svg delete mode 100644 _images/static_view_wallet_instance_attestation.svg delete mode 100644 _images/trust-roles.svg delete mode 100644 _images/verifier_qr_code.svg delete mode 100644 _sources/algorithms.rst.txt delete mode 100644 _sources/backup-restore.rst.txt delete mode 100644 _sources/contribute.rst.txt delete mode 100644 _sources/defined-terms.rst.txt delete mode 100644 _sources/index.rst.txt delete mode 100644 _sources/issuance.rst.txt delete mode 100644 _sources/pid-data-model.rst.txt delete mode 100644 _sources/pid-eaa-data.rst.txt delete mode 100644 _sources/pid-eaa-mdoc-cbor.rst.txt delete mode 100644 _sources/pid-eaa-sd-jwt.rst.txt delete mode 100644 _sources/pid-issuance.rst.txt delete mode 100644 _sources/pseudonyms.rst.txt delete mode 100644 _sources/relying-party-solution.rst.txt delete mode 100644 _sources/revocation-lists.rst.txt delete mode 100644 _sources/ssi-introduction.rst.txt delete mode 100644 _sources/standards.rst.txt delete mode 100644 _sources/trust.rst.txt delete mode 100644 _sources/wallet-instance-attestation.rst.txt delete mode 100644 _sources/wallet-solution.rst.txt delete mode 100644 _static/_sphinx_javascript_frameworks_compat.js delete mode 100644 _static/basic.css delete mode 100644 _static/css/theme.css delete mode 100644 _static/data/glossary.json delete mode 100644 _static/doctools.js delete mode 100644 _static/documentation_options.js delete mode 100644 _static/file.png delete mode 100644 _static/font/docs-italia.eot delete mode 100644 _static/font/docs-italia.svg delete mode 100644 _static/font/docs-italia.ttf delete mode 100644 _static/font/docs-italia.woff delete mode 100644 _static/font/italia-icon-font.eot delete mode 100644 _static/font/italia-icon-font.svg delete mode 100644 _static/font/italia-icon-font.ttf delete mode 100644 _static/font/italia-icon-font.woff delete mode 100644 _static/font/italia-icon-font.woff2 delete mode 100644 _static/images/agid-logo.svg delete mode 100644 _static/images/may.svg delete mode 100644 _static/images/must.svg delete mode 100644 _static/images/must_not.svg delete mode 100644 _static/images/should.svg delete mode 100644 _static/images/should_not.svg delete mode 100644 _static/images/team-digitale-logo.svg delete mode 100644 _static/jquery-3.6.0.js delete mode 100644 _static/jquery.js delete mode 100644 _static/js/theme.js delete mode 100644 _static/language_data.js delete mode 100644 _static/minus.png delete mode 100644 _static/pkce.py delete mode 100644 _static/plus.png delete mode 100644 _static/pygments.css delete mode 100644 _static/searchtools.js delete mode 100644 _static/underscore-1.13.1.js delete mode 100644 _static/underscore.js diff --git a/_images/Eo_circle_green_checkmark.svg b/_images/Eo_circle_green_checkmark.svg deleted file mode 100644 index 19e0bd7f0..000000000 --- a/_images/Eo_circle_green_checkmark.svg +++ /dev/null @@ -1,2 +0,0 @@ - diff --git a/_images/Eo_circle_red_letter-x.svg b/_images/Eo_circle_red_letter-x.svg deleted file mode 100644 index 4c3c8e785..000000000 --- a/_images/Eo_circle_red_letter-x.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/_images/High-Level-Flow-EUDIW-PID-Issuing.svg b/_images/High-Level-Flow-EUDIW-PID-Issuing.svg deleted file mode 100644 index 470e7c733..000000000 --- a/_images/High-Level-Flow-EUDIW-PID-Issuing.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - -
PID Provider
PID Provider
Wallet Solution
Wallet Solution
Wallet Instance
Wallet Instance
OIDC VCI Component
OIDC VCI Component
Issues PID
Issues PID
National eID Component
 (e.g. OIDC, SAML)
National eID Component...
Wallet Provider
Wallet Provider
Attestation Service
Attestation Service
Issues
Wallet Verifiable Attestation
Issues...
Authenticates the User
Authenticates the User
Requests PID
Requests PID
Develop and Maintains
Develop and Maintains
Federation API Services
Federation API Services
Federation API Services
Federation API Serv...
National IdP
National IdP
0
0
3
3
4
4
5
5
Trust Anchor - Accreditation Body
Trust Anchor - Accreditation Body
Federation API Services
Federation API Services
Requests for PID Provider identifier
Requests for PID Provider identifier
1
1
2
2
Requests for PID Provider Metadata
Requests for PID Provider Metadata
Text is not SVG - cannot display
\ No newline at end of file diff --git a/_images/Low-Level-Flow-EUDIW-PID-Issuing.svg b/_images/Low-Level-Flow-EUDIW-PID-Issuing.svg deleted file mode 100644 index 34bfe6965..000000000 --- a/_images/Low-Level-Flow-EUDIW-PID-Issuing.svg +++ /dev/null @@ -1 +0,0 @@ -User's smartphoneUserUserBrowserBrowserWallet InstanceWallet InstanceWallet ProviderWallet ProviderPID ProviderPID Provider1obtain your PID2yesobtain a list of Trusted PID Provider3confirm the selection of PID Provider4okWallet Instance checks that the PID Provider is part of the Federation and obtain its metadata5create PKCE code verifier6PAR Request (response_type, client_id, code_challenge, code_challenge_method, request, client_assertion_type, client_assertion=$WalletInstanceAttestation$)PID Provider checks that the Wallet Provider is part of the FederationPID Provider checks that the signature of the Wallet Attestation and its validity7PAR Response (request_uri, expires_in)8Authorization Request (client_id, request_uri)9Authorization Request (client_id, request_uri)user authentication with eIDAS High and consent10Authorization Response (code, state)11Authorization Response (code, state)12generate DPoP key13generate DPoP proof for PID Provider token endpoint14Token Request with DPoP proof (client_id, grant_type, code, code_verifier, client_assertion_type, client_assertion, redirect_uri)15Token Response (access_token, token_type, expires_in, c_nonce, c_nonce_expires_in)16generate fresh key for credential17create proof of possession (c_nonce)18create DPoP proof for PID Provider credential endpoint19Credential Request with DPoP access_token and DPoP proof (credential_definition, format, proof)Register all the credential-relatedinformation for verification/revocation20Credential Response (format, credential, c_nonce, c_nonce_expires_in)21PID validity and status check22store credential \ No newline at end of file diff --git a/_images/cross_device_auth_seq_diagram.svg b/_images/cross_device_auth_seq_diagram.svg deleted file mode 100644 index 2ac670e5a..000000000 --- a/_images/cross_device_auth_seq_diagram.svg +++ /dev/null @@ -1,2 +0,0 @@ - -UserUserWallet InstanceWallet InstanceRelying PartyRelying PartyAuthentication1Request Protected Resource2Create Authorization Request3Create QR Code4Show QRCode5Scan QR Code6Extract Request URIfrom QR Code7GET Request Objectby Request URIwith Wallet Instance Attestationas DPoP token8Attest Wallet Instance Trust9Request Object10Attest Relying Party Trust11Verify Relying Party Metadata12Validate JWT Signature13Validate Requested VP(s)14Request for consent15Confirmed16POST Authorization Responsewith vp_token17Attest Credential Issuer Trust18Validate JWT Signature19Process the credential20Process Authorization ResponseProcess phase requires to:- validate integrity, authenticity, and holder binding of VP(s)- ensure all VP(s) are linked with Verifier- ensure all VP(s) are linked with current session nonce- ensure all VC(s) requested is present21OK \ No newline at end of file diff --git a/_images/dynamic_view_sequence_wallet_instance_attestation.svg b/_images/dynamic_view_sequence_wallet_instance_attestation.svg deleted file mode 100644 index 9bf0d7706..000000000 --- a/_images/dynamic_view_sequence_wallet_instance_attestation.svg +++ /dev/null @@ -1 +0,0 @@ -UserWallet InstanceWallet ProviderUserWallet InstanceWallet Provider1Initialize wallet instanceor request/present credentials2Get wallet provider metadata3Metadata containing credential types, key requirements, endpoints4Validate wallet provider trust list5Generate key pairs6Request nonce7nonce8Create Wallet Instance Assertion Request JWT9Get assertion (Wallet Instance Assertion Request)10Validate wallet instance genuineness11Validate signature12generate and sign wallet instance assertion13Wallet Instance Assertion14Validate wallet instance assertion15Wallet instance initializedready to obtain new credentials \ No newline at end of file diff --git a/_images/static_view_wallet_instance_attestation.svg b/_images/static_view_wallet_instance_attestation.svg deleted file mode 100644 index aab862f78..000000000 --- a/_images/static_view_wallet_instance_attestation.svg +++ /dev/null @@ -1 +0,0 @@ -UserWallet providerWallet solutionWallet instanceWallet backendIs part ofProvides wallet assertionscontrol / activateIs an instance ofProvide \ No newline at end of file diff --git a/_images/trust-roles.svg b/_images/trust-roles.svg deleted file mode 100644 index a1e8dd823..000000000 --- a/_images/trust-roles.svg +++ /dev/null @@ -1,426 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/_images/verifier_qr_code.svg b/_images/verifier_qr_code.svg deleted file mode 100644 index f525432cc..000000000 --- a/_images/verifier_qr_code.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - QR Code - ZXVkaXc6Ly9hdXRob3JpemU/Y2xpZW50X2lkPWh0dHBzOi8vdmVyaWZpZXIuZXhhbXBsZS5vcmcmcmVxdWVzdF91cmk9aHR0cHM6Ly92ZXJpZmllci5leGFtcGxlLm9yZy9yZXF1ZXN0X3VyaQ== - - - - - diff --git a/_sources/algorithms.rst.txt b/_sources/algorithms.rst.txt deleted file mode 100644 index 7fae0ee7f..000000000 --- a/_sources/algorithms.rst.txt +++ /dev/null @@ -1,98 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _supported_algs: - -Cryptographic algorithms -++++++++++++++++++++++++ - -The following algorithms MUST be supported: - -.. list-table:: - :widths: 20 20 20 - :header-rows: 1 - - * - **Algorithm** - - **Operations** - - **References** - * - **RS256** - - Signature - - :rfc:`7518`. - * - **RS512** - - Signature - - :rfc:`7518`. - * - **RSA-OAEP** - - Key Encryption - - :rfc:`7518`. - * - **RSA-OAEP-256** - - Key Encryption - - :rfc:`7516`. - * - **A128CBC-HS256** - - Content Encryption - - :rfc:`7516`. - * - **A256CBC-HS512** - - Content Encryption - - :rfc:`7516`. - -The following algorithms are RECOMMENDED to be supported: - -.. list-table:: - :widths: 20 20 20 - :header-rows: 1 - - * - **Algorithm** - - **Operations** - - **References** - * - **ES256** - - Signature - - :rfc:`7518`. - * - **ES512** - - Signature - - :rfc:`7518`. - * - **PS256** - - Signature - - :rfc:`7518`. - * - **PS512** - - Signature - - :rfc:`7518`. - * - **ECDH-ES** - - Key Encryption - - :rfc:`7518`. - * - **ECDH-ES+A128KW** - - Key Encryption - - :rfc:`7518`. - * - **ECDH-ES+A256KW** - - Key Encryption - - :rfc:`7518`. - -The following algorithms MUST NOT be supported: - -.. list-table:: - :widths: 20 20 20 - :header-rows: 1 - - * - **Algorithm** - - **Operations** - - **References** - * - **none** - - Signature - - :rfc:`7518`. - * - **RSA_1_5** - - Key Encryption - - :rfc:`7516`. - * - **HS256** - - Signature - - :rfc:`7518`. - * - **HS384** - - Signature - - :rfc:`7518`. - * - **HS512** - - Signature - - :rfc:`7518`. - -.. warning:: - - The length of the RSA keys MUST be equal to or greater than 2048 bits. - A length of 4096 bits is RECOMMENDED. - - - diff --git a/_sources/backup-restore.rst.txt b/_sources/backup-restore.rst.txt deleted file mode 100644 index 186042348..000000000 --- a/_sources/backup-restore.rst.txt +++ /dev/null @@ -1,57 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _backup-restore.rst: - -backup-restore.rst -+++++++++++++++++++++++++++ - -[What is it] - -[What it is usefull for] - -[Example] - -General Properties ------------------- - -[TODO] - - -Requirements ------------- - - - req 1 - - req 2 - - -Attributes ----------- - -[Table with parameters/attributes] - -.. list-table:: - :widths: 20 60 - :header-rows: 1 - - * - **Claim** - - **Description** - * - key - - value - - -Implementation considerations ------------------------------ - -TODO - - -Libraries and code snippets ---------------------------- - -TODO - - -External references -------------------- - -TODO diff --git a/_sources/contribute.rst.txt b/_sources/contribute.rst.txt deleted file mode 100644 index 9d984dea8..000000000 --- a/_sources/contribute.rst.txt +++ /dev/null @@ -1,8 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _contribute.rst: - -contribute.rst -+++++++++++++++++++++++++++ - -Instruction to join in the development here. diff --git a/_sources/defined-terms.rst.txt b/_sources/defined-terms.rst.txt deleted file mode 100644 index 2df421bfe..000000000 --- a/_sources/defined-terms.rst.txt +++ /dev/null @@ -1,63 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _defined-terms.rst: - -Defined Terms -+++++++++++++ - -The terms *User*, *Trust Service*, *Trust Model*, *Trusted List*, *Trust Framework*, *Attribute*, *Electronic Attestations of Attributes Provider* or *Trust Service Provider (TSP)*, *Person Identification Data (PID)*, *Revocation List*, *Qualified Electronic Attestations of Attributes Provider* or *Qualified Trust Service Provider (QTSP)*, *Electronic Attestation of Attributes (EAA)*, are defined in the `EIDAS-ARF`_. - -Below are the description of acronyms and definitions which are useful for further insights into topics that complement the it-wallet and the interacting components. - - -.. list-table:: - :widths: 20 60 - :header-rows: 1 - - * - **Claim** - - **Description** - * - Accreditation Body - - An entity accredited by the Federation Authority, responsible for managing the process of verification and certification of accreditation requirements for ecosystem roles. - * - Digital Identity Provider - - An entity, recognized and accredited by the State, responsible for identifying citizens for the issuance of an Electronic Identity Certificate. - * - Electronic Attestation of Identity - - Electronic attestation of attributes referring to master data already present in Italian digital identity systems. - * - Federation Authority - - A public governance entity that issues guidelines and technical rules, and administers - directly or through its intermediary - Trusted Lists, services, and accreditation processes, the status of participants, and their eligibility evaluation. It also performs oversight functions. - * - Wallet Instance - - An instance of the Wallet Solution, installed on a personal mobile device and controlled by a specific User who is its sole owner. It is the application that enables citizens to fully and autonomously manage their digital identity and EAAs. - * - Wallet Provider - - All public and/or private entities, conforming to a technical profile and accredited by the Federation Authority, that provide citizens with an IT Wallet Instance. - * - Wallet Instance Attestation - - Verifiable Attestation, issued by the Wallet Provider, that proves the security compliace of the Wallet Instance. - * - Qualified Electronic Attestation of Attributes (QEAA) - - A digitally verifiable attestation in electronic form, issued by a QTSP, that substantiates a person's possession of attributes. - * - Qualified Electronic Signature Provider - - The Electronic Trust Service Provider responsible for the issuing of Qualified Electronic Signature certificates to the User. - * - Relying Party - - A natural or legal person that implements an authentication system requiring electronic attribute attestation submissions as an authentication mechanism. - * - Trust Attestation - - Electronic attestation of an entity's compliance with the national regulatory framework, which is cryptographically verifiable and cannot be repudiated over time by the entity that issued it. A Trust Attestation is always related to a particular Trust Framework. - * - Trust Layer - - An architectural component that enables IT Wallet system participants to establish trust, in terms of reliability and compliance of all participants with the regulatory framework governing the digital identity system. - -Acronyms --------- - -.. list-table:: - :widths: 20 80 - :header-rows: 1 - - * - **Acronym** - - **Description** - * - **OID4VP** - - OpenID for Verifiable Presentation - * - **PID** - - Person Identification Data - * - **VC** - - Verifiable Credential - * - **VP** - - Verifiable Presentation - * - **API** - - Application Programming Interface - diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt deleted file mode 100644 index ad326c8d7..000000000 --- a/_sources/index.rst.txt +++ /dev/null @@ -1,79 +0,0 @@ -.. include:: ../common/common_definitions.rst - -============================================= -Italian EUDI Wallet Technical Specifications -============================================= - -Introduction ------------- - -**What is eIDAS** - -eIDAS stands for "electronic IDentification, Authentication and trust Services" and is the commonly used name for the EU Regulation, 910/2014, on electronic identification and trust services for electronic transactions in the internal market, repealing the old signature Directive 1999/93/EC. - -The new eIDAS project establishes the European Digital Identity Wallet (EUDI Wallet) and proposes to overcome the dissimilarities, both in technological and user experience terms, that exist among the 21 digital identities (eIDs) currently active within as many as 16 Member States. - -**What is IT Wallet** - -The IT Wallet project was created to improve the national digital identity governance experience and respond to the input received from the European community in the areas of innovation, decentralization and digital awareness. - -To date, three identity systems coexist in Italy for access to public and private web services, namely: - - - Electronic Identity Card (CIE); - - Public Digital Identity System (SPID); - - Health Card - National Service Card (TS-CNS). - -The result is a difficult, and thus costly, experience for citizens and service providers who must implement and maintain multiple authentication systems to ensure citizens' access to their digital services. - -Therefore, the IT Wallet proposes to: - - - Streamline the digital identity ecosystem in Italy, optimizing the allocation of public resources; - - Simplify the digital access experience for citizens, the Public Administration and businesses; - - Integrate new functions related to certified attributes, strengthening the digital identity model and promoting the inclusion of public and private entities; - - Consolidate best practices in digital identities in Italy by maximizing deployment, quality of use and infrastructure provision; - - Adequately accommodate the European Digital Identity Wallet on the basis of the experience acquired by developing the national Wallet in full compliance with the European model. - -In order to achieve these objectives and enhance the already active and eIDAS-notified digital identity schemes, the IT Wallet project proposes a technological and governance evolution that envisages, in a progressive way, the migration of the digital identification component of CIE and SPID to IT Wallet. - -**Purpose of these technical rules** - -The purpose of the following technical rules is to define the technical architecture and reference framework to be used as a guideline by all the parties involved in the development of the IT Wallet project. - -In this documentation you can find the technical specification -for implementing the following components: - - - Entities of the ecosystem according to `EIDAS-ARF`_. - - Infrastructure of trust attesting realiability and eligibility of the participants. - - PID and EAAs data schemes and attribute sets. - - PID/EAA in MDL CBOR format. - - PID/EAA in `SD-JWT`_ format. - - Wallet Solution general architecture. - - Wallet Instance Attestation data model in `JWS`_ format. - - Issuance of PID/EAA according to `OpenID4VCI`_. - - Presentation of PID/EAA according to `OpenID4VP`_. - - Presentation of pseudonyms according to `SIOPv2`_. - - PID/EAA backup and restore mechanisms. - - PID/EAA revocation lists. - - -Index of content ----------------- - -.. toctree:: - :maxdepth: 2 - - ssi-introduction.rst - defined-terms.rst - trust.rst - pid-data-model.rst - pid-issuance.rst - wallet-solution.rst - wallet-instance-attestation.rst - relying-party-solution.rst - pseudonyms.rst - backup-restore.rst - revocation-lists.rst - algorithms.rst - contribute.rst - standards.rst - diff --git a/_sources/issuance.rst.txt b/_sources/issuance.rst.txt deleted file mode 100644 index 1effd9399..000000000 --- a/_sources/issuance.rst.txt +++ /dev/null @@ -1,57 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _issuance.rst: - -issuance.rst -+++++++++++++++++++++++++++ - -[What is it] - -[What it is usefull for] - -[Example] - -General Properties ------------------- - -[TODO] - - -Requirements ------------- - - - req 1 - - req 2 - - -Attributes ----------- - -[Table with parameters/attributes] - -.. list-table:: - :widths: 20 60 - :header-rows: 1 - - * - **Claim** - - **Description** - * - key - - value - - -Implementation considerations ------------------------------ - -TODO - - -Libraries and code snippets ---------------------------- - -TODO - - -External references -------------------- - -TODO diff --git a/_sources/pid-data-model.rst.txt b/_sources/pid-data-model.rst.txt deleted file mode 100644 index cc59a0a78..000000000 --- a/_sources/pid-data-model.rst.txt +++ /dev/null @@ -1,400 +0,0 @@ - -.. include:: ../common/common_definitions.rst - -.. _pid_data_model.rst: - -PID Data Model -++++++++++++++ - -The Person Identification Data (PID) is issued by the PID Provider following national laws and allows a natural person to be authenitcated and identified. - -The User attributes carried in the Italian PID are: - - - Current Family Name - - Current First Name - - Date of Birth - - Place of Birth - - Unique Identifier - - Taxpayer identification number - -The italian PID is extended according to the `OpenID Identity Assurance Profile [OIDC.IDA] `_, that enables the binding of the PID to a national trust framework, giving all the evidence of the identity proofing procedures underlying the PID issuing in both remote and proximity flows. - -The PID data format and the mechanism through which it is issued into the Wallet Instance and presented to a RP will be detailed in the next sections. - - - -SD-JWT -====== - -The PID is given as a Verifiable Credential with JSON payload based on the `Selective Disclosure JWT format `_ as specified in `[draft-terbu-sd-jwt-vc-latest] `__. - -An SD-JWT is a JWT that MUST be signed using the Issuer's private key. The SD-JWT payload of the MUST contain the **_sd_alg** claim described in `[SD-JWT]. Section 5.1.2. `_ and other claims specified in this section, some of them may be selectively disclosable claims. - -The claim **_sd_alg** indicates the hash algorithm used by the Issuer to generate the digests over the salts and the claim values. The **_sd_alg** claim MUST be set to one of the specified algorithms in Section :ref:`Cryptographic Algorithms `. - -Selectively disclosable claims are omitted from the SD-JWT. Instead, the digests of the respective disclosures and decoy digests are contained as an array in a new JWT claim, **_sd**. - -Each digest value ensures the integrity of, and maps to, the respective Disclosure. Digest values are calculated using a hash function over the disclosures, each of which contains - - - a random salt, - - the claim name (only when the claim is an object property), - - the claim value. - -The Disclosures are sent to the Holder together with the SD-JWT in the *Combined Format for Issuance* that MUST be an ordered series of base64url-encoded values, each separated from the next by a single tilde ('~') character as follows: - -.. code-block:: - - ~~~...~ - -See `[draft-terbu-sd-jwt-vc-latest] `_ and `[SD-JWT] `__ for more details. - - - -The JOSE header contains the following mandatory parameters: - -.. _pid_jose_header: - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **typ** - - MUST be set to ``vc+sd-jwt`` as defined in `[draft-terbu-sd-jwt-vc-latest] `__. - - `[RFC7515, Section 4.1.9] `_. - * - **alg** - - Signature Algorithm. - - `[RFC7515, Section 4.1.1] `_. - * - **kid** - - Unique identifier of the public key. - - `[RFC7515, Section 4.1.8] `_. - * - **trust_chain** - - JSON array containing the trust chain that proves the reliability of the issuer of the JWT. - - `[OIDC-FED, Section 3.2.1] `_. - -The following claims MUST be in the JWT payload and MUST NOT be included in the disclosures, i.e. cannot be selectively disclosed. - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **iss** - - The PID Provider identifier as URL string (the issuer of this JWT) - - `[RFC7519, Section 4.1.1] `_. - * - **sub** - - Thumbprint of the JWK in the ``cnf`` parameter - - `[RFC7519, Section 4.1.2] `_. - * - **jti** - - Unique Token ID identifier of this JWT. It SHOULD be a String in *uuid4* format. - - `[RFC7519, Section 4.1.7] `_. - * - **iat** - - UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in :rfc:`7519`. - - `[RFC7519, Section 4.1.6] `_. - * - **exp** - - UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated in :rfc:`7519`. - - `[RFC7519, Section 4.1.4] `_. - * - **status** - - HTTPS URL where the credential validity status is available - - `[SD-JWT-VC. Section 4.2.2.2] `_. - * - **cnf** - - JSON object containing the proof-of-possession key materials. By including a **cnf** (confirmation) claim in a JWT, the issuer of the JWT declares that the presenter is in control of the private key related to the public one defined in the **cnf** parameter. The recipient MUST cryptographically verify that the presenter is in control of that key. - - `[RFC7800, Section 3.1] `_. - * - **type** - - Credential type as a string, MUST be set to ``eu.eudiw.pid.it``. - - `[draft-terbu-sd-jwt-vc-latest. Section 4.2.2.2] `__. - * - **verified_claims** - - JSON object containing the following sub-elements: - - - **verification**; - - **claims**. - - `[OIDC.IDA. Section 5] `_. - -The ``verification`` claim contain the information as sub claims regarding the identity proofing evidence during the issuing phase of the PID. The ``claims`` parameter contains the user attributes claims. Some of these additional claims MAY be included in the Disclosures and MAY be selectively disclosed and they are given in the following tables that also specify whether a claim is selectively disclosable (SD) or not (NSD). - -The ``verification`` claim is a JSON structure with all the following mandatory sub-claims. - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **trust_framework** - - [NSD]. MUST be set to eidas - - `[OID.IDA. Section 5.1] `_ - * - **assurance_level** - - [NSD]. MUST be set to high - - `[OID.IDA. Section 5.1] `_ - * - **evidence** - - [SD]. JSON Array. Each element is the electronic evidence of the user identification during the PID issuing phase. It MUST contain at least the following claims: - - - **type**: MUST be set to ``electronic_record`` - - **record**: JSON object (see the table below) - - `[OID.IDA. Section 5.1] `_ - - -The ``record`` MUST have at least the following sub parameters: - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **type** - - identification of the national eID framework used by the User. For example ``eidas.it.cie`` means that the CIE id identification scheme is used by the User. - - `[OID.IDA. Section 5.1.1.2] `_ - * - **source** - - JSON Object cointaining the follwoing mandatory claims: - - - **organization_name**: Name of the Organization handling the eID used by the User - - **organization_id**: Identification code for the Organization. It MUST be set to the *IPA Code* of the Organization - - **country_code**: String representing country in `[ISO3166-1] Alpha-2 (e.g., IT) or [ISO3166-3] syntax `_. - - `[OID.IDA. Section 5.1.1.2] `_ - -.. warning:: - Note that the sub-claims of the **evidence** parameter are not selectively disclosable separately, thus, for example, the User cannot give only the *record type* without disclosure the *record source* (organization name, identifier and country that hendles the User identity proofing). - -Finally, the ``claims`` parameter contains the following mandatory claims: - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **given_name** - - [SD]. Current First Name - - `[OpenID Connect Core 1.0, Section 5.1] `_ - * - **family_name** - - [SD]. Current Family Name - - `[OpenID Connect Core 1.0, Section 5.1] `_ - * - **birthdate** - - [SD]. Date of Birth - - `[OpenID Connect Core 1.0, Section 5.1] `_ - * - **place_of_birth** - - [SD]. Place of Birth. JSON Object with the following subclaims: - - - **country** - - **locality** - - `[OpenID Connect for Identity Assurance 1.0, Section 4] `_ - * - **unique_id** - - [SD]. Unique citizen identifier (ID ANPR) given by the National Register of the Resident Population (ANPR). It MUST be set according to `ANPR rules `_ - - This specification - * - **tax_id_code** - - [SD]. National tax identification code of natural person as a String format. It MUST be set according to ETSI EN 319 412-1. For example ``TINIT-`` - - This specification - - - -Non-normative examples ----------------------- - -In the following, we provide a non-normative example of PID VC in JSON. - -.. code-block:: JSON - - { - "verified_claims": { - "verification": { - "trust_framework": "eidas", - "assurance_level": "high", - "evidence": [ - { - "type": "electronic_record", - "record": { - "type": "eidas.it.cie", - "source": { - "organization_name": "Ministero dell'Interno", - "organization_id": "m_it", - "country_code": "IT" - } - } - } - ] - }, - "claims": { - "unique_id": - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", - "given_name": "Mario", - "family_name": "Rossi", - "birthdate": "1980-01-10", - "place_of_birth": { - "country": "IT", - "locality": "Rome" - }, - "tax_id_code": "TINIT-XXXXXXXXXXXXXXXX" - } - } - } - -The corresponding SD-JWT verson for PID is given by - -.. code-block:: JSON - - { - "typ":"vc+sd-jwt", - "alg":"RS512", - "kid":"dB67gL7ck3TFiIAf7N6_7SHvqk0MDYMEQcoGGlkUAAw", - "trust_chain" : [ - "NEhRdERpYnlHY3M5WldWTWZ2aUhm ...", - "eyJhbGciOiJSUzI1NiIsImtpZCI6 ...", - "IkJYdmZybG5oQU11SFIwN2FqVW1B ..." - ] - } - -.. code-block:: JSON - - { - "iss": "https://pidprovider.example.org", - "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs...", - "jti": "urn:uuid:6c5c0a49-b589-431d-bae7-219122a9ec2c", - "iat": 1541493724, - "exp": 1541493724, - "status": "https://pidprovider.example.org/status", - "cnf": { - "jwk": { - "kty": "RSA", - "use": "sig", - "n": "1Ta-sE …", - "e": "AQAB", - "kid": "YhNFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs" - } - }, - "type": "PersonIdentificationData", - "verified_claims": { - "verification": { - "_sd": [ - "OGm7ryXgt5Xzlevp-Hu-UTk0a-TxAaPAobqv1pIWMfw" - ], - "trust_framework": "eidas", - "assurance_level": "high" - }, - "claims": { - "_sd": [ - "8JjozBfovMNvQ3HflmPWy4O19Gpxs61FWHjZebU589E", - "BoMGktW1rbikntw8Fzx_BeL4YbAndr6AHsdgpatFCig", - "CFLGzentGNRFngnLVVQVcoAFi05r6RJUX-rdbLdEfew", - "JU_sTaHCngS32X-0ajHrd1-HCLCkpT5YqgcfQme168w", - "VQI-S1mT1Kxfq2o8J9io7xMMX2MIxaG9M9PeJVqrMcA", - "zVdghcmClMVWlUgGsGpSkCPkEHZ4u9oWj1SlIBlCc1o" - ] - } - }, - "_sd_alg": "sha-256" - } - -In the following the disclosure list is given - -Claim **evidence**: - -- SHA-256 Hash: ``OGm7ryXgt5Xzlevp-Hu-UTk0a-TxAaPAobqv1pIWMfw`` -- Disclosure: - ``WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImV2aWRlbmNlIiwgW3sidHlw`` - ``ZSI6ICJlbGVjdHJvbmljX3JlY29yZCIsICJyZWNvcmQiOiB7InR5cGUiOiAi`` - ``ZWlkYXMuaXQuY2llIiwgInNvdXJjZSI6IHsib3JnYW5pemF0aW9uX25hbWUi`` - ``OiAiTWluaXN0ZXJvIGRlbGwnSW50ZXJubyIsICJvcmdhbml6YXRpb25faWQi`` - ``OiAibV9pdCIsICJjb3VudHJ5X2NvZGUiOiAiSVQifX19XV0`` -- Contents: ``["2GLC42sKQveCfGfryNRN9w", "evidence", [{"type":`` - ``"electronic_record", "record": {"type": "eidas.it.cie",`` - ``"source": {"organization_name": "Ministero dell'Interno",`` - ``"organization_id": "m_it", "country_code": "IT"}}}]]`` - -Claim **unique_id**: - -- SHA-256 Hash: ``BoMGktW1rbikntw8Fzx_BeL4YbAndr6AHsdgpatFCig`` -- Disclosure: - ``WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgInVuaXF1ZV9pZCIsICJ4eHh4`` - ``eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4eHh4eHgiXQ`` -- Contents: ``["eluV5Og3gSNII8EYnsxA_A", "unique_id",`` - ``"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]`` - -Claim **given_name**: - -- SHA-256 Hash: ``zVdghcmClMVWlUgGsGpSkCPkEHZ4u9oWj1SlIBlCc1o`` -- Disclosure: - ``WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgImdpdmVuX25hbWUiLCAiTWFy`` - ``aW8iXQ`` -- Contents: ``["6Ij7tM-a5iVPGboS5tmvVA", "given_name", "Mario"]`` - -Claim **family_name**: - -- SHA-256 Hash: ``VQI-S1mT1Kxfq2o8J9io7xMMX2MIxaG9M9PeJVqrMcA`` -- Disclosure: - ``WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgImZhbWlseV9uYW1lIiwgIlJv`` - ``c3NpIl0`` -- Contents: ``["eI8ZWm9QnKPpNPeNenHdhQ", "family_name", "Rossi"]`` - -Claim **birthdate**: - -- SHA-256 Hash: ``CFLGzentGNRFngnLVVQVcoAFi05r6RJUX-rdbLdEfew`` -- Disclosure: - ``WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9BIiwgImJpcnRoZGF0ZSIsICIxOTgw`` - ``LTAxLTEwIl0`` -- Contents: ``["Qg_O64zqAxe412a108iroA", "birthdate", "1980-01-10"]`` - -Claim **place_of_birth**: - -- SHA-256 Hash: ``JU_sTaHCngS32X-0ajHrd1-HCLCkpT5YqgcfQme168w`` -- Disclosure: - ``WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgInBsYWNlX29mX2JpcnRoIiwg`` - ``eyJjb3VudHJ5IjogIklUIiwgImxvY2FsaXR5IjogIlJvbWUifV0`` -- Contents: - ``["AJx-095VPrpTtN4QMOqROA", "place_of_birth", {"country":`` - ``"IT", "locality": "Rome"}]`` - -Claim **tax_id_code**: - -- SHA-256 Hash: ``8JjozBfovMNvQ3HflmPWy4O19Gpxs61FWHjZebU589E`` -- Disclosure: - ``WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgInRheF9pZF9jb2RlIiwgIlRJ`` - ``TklULVhYWFhYWFhYWFhYWFhYWFgiXQ`` -- Contents: ``["Pc33JM2LchcU_lHggv_ufQ", "tax_id_code",`` - ``"TINIT-XXXXXXXXXXXXXXXX"]`` - -The combined format for the PID issuance is given by - -.. code-block:: - - eyJhbGciOiAiRVMyNTYifQ.eyJpc3MiOiAiaHR0cHM6Ly9waWRwcm92aWRlci5pdCIsI - CJpYXQiOiAxNjgzMDAwMDAwLCAiZXhwIjogMTg4MzAwMDAwMCwgInZlcmlmaWVkX2NsY - WltcyI6IHsidmVyaWZpY2F0aW9uIjogeyJfc2QiOiBbIk9HbTdyeVhndDVYemxldnAtS - HUtVVRrMGEtVHhBYVBBb2JxdjFwSVdNZnciXSwgInRydXN0X2ZyYW1ld29yayI6ICJla - WRhcyIsICJhc3N1cmFuY2VfbGV2ZWwiOiAiaGlnaCJ9LCAiY2xhaW1zIjogeyJfc2QiO - iBbIjhKam96QmZvdk1OdlEzSGZsbVBXeTRPMTlHcHhzNjFGV0hqWmViVTU4OUUiLCAiQ - m9NR2t0VzFyYmlrbnR3OEZ6eF9CZUw0WWJBbmRyNkFIc2RncGF0RkNpZyIsICJDRkxHe - mVudEdOUkZuZ25MVlZRVmNvQUZpMDVyNlJKVVgtcmRiTGRFZmV3IiwgIkpVX3NUYUhDb - mdTMzJYLTBhakhyZDEtSENMQ2twVDVZcWdjZlFtZTE2OHciLCAiVlFJLVMxbVQxS3hmc - TJvOEo5aW83eE1NWDJNSXhhRzlNOVBlSlZxck1jQSIsICJ6VmRnaGNtQ2xNVldsVWdHc - 0dwU2tDUGtFSFo0dTlvV2oxU2xJQmxDYzFvIl19fSwgIl9zZF9hbGciOiAic2hhLTI1N - iJ9.gsvYGCpWbnx8Dkd5ofKq-MtZplFFV49uY42Yf9S3rZe_SPTjg_AWdpm4bvSOhNbe - P0aMzFGtftSk3-3sufXBdw~WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImV2aWRlb - mNlIiwgW3sidHlwZSI6ICJlbGVjdHJvbmljX3JlY29yZCIsICJyZWNvcmQiOiB7InR5c - GUiOiAiZWlkYXMuaXQuY2llIiwgInNvdXJjZSI6IHsib3JnYW5pemF0aW9uX25hbWUiO - iAiTWluaXN0ZXJvIGRlbGwnSW50ZXJubyIsICJvcmdhbml6YXRpb25faWQiOiAibV9pd - CIsICJjb3VudHJ5X2NvZGUiOiAiSVQifX19XV0~WyJlbHVWNU9nM2dTTklJOEVZbnN4Q - V9BIiwgInVuaXF1ZV9pZCIsICJ4eHh4eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4e - Hh4eHgiXQ~WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgImdpdmVuX25hbWUiLCAiTW - FyaW8iXQ~WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgImZhbWlseV9uYW1lIiwgIlJ - vc3NpIl0~WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9BIiwgImJpcnRoZGF0ZSIsICIxOTg - wLTAxLTEwIl0~WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgInBsYWNlX29mX2JpcnR - oIiwgeyJjb3VudHJ5IjogIklUIiwgImxvY2FsaXR5IjogIlJvbWUifV0~WyJQYzMzSk0 - yTGNoY1VfbEhnZ3ZfdWZRIiwgInRheF9pZF9jb2RlIiwgIlRJTklULVhYWFhYWFhYWFh - YWFhYWFgiXQ - - - -MDOC-CBOR -========= - -[TODO] - - diff --git a/_sources/pid-eaa-data.rst.txt b/_sources/pid-eaa-data.rst.txt deleted file mode 100644 index 8ab0305c9..000000000 --- a/_sources/pid-eaa-data.rst.txt +++ /dev/null @@ -1,57 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _pid-eaa-data.rst: - -pid-eaa-data.rst -+++++++++++++++++++++++++++ - -[What is it] - -[What it is usefull for] - -[Example] - -General Properties ------------------- - -[TODO] - - -Requirements ------------- - - - req 1 - - req 2 - - -Attributes ----------- - -[Table with parameters/attributes] - -.. list-table:: - :widths: 20 60 - :header-rows: 1 - - * - **Claim** - - **Description** - * - key - - value - - -Implementation considerations ------------------------------ - -TODO - - -Libraries and code snippets ---------------------------- - -TODO - - -External references -------------------- - -TODO diff --git a/_sources/pid-eaa-mdoc-cbor.rst.txt b/_sources/pid-eaa-mdoc-cbor.rst.txt deleted file mode 100644 index d96df2fff..000000000 --- a/_sources/pid-eaa-mdoc-cbor.rst.txt +++ /dev/null @@ -1,57 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _pid-eaa-mdoc-cbor.rst: - -pid-eaa-mdoc-cbor.rst -+++++++++++++++++++++++++++ - -[What is it] - -[What it is usefull for] - -[Example] - -General Properties ------------------- - -[TODO] - - -Requirements ------------- - - - req 1 - - req 2 - - -Attributes ----------- - -[Table with parameters/attributes] - -.. list-table:: - :widths: 20 60 - :header-rows: 1 - - * - **Claim** - - **Description** - * - key - - value - - -Implementation considerations ------------------------------ - -TODO - - -Libraries and code snippets ---------------------------- - -TODO - - -External references -------------------- - -TODO diff --git a/_sources/pid-eaa-sd-jwt.rst.txt b/_sources/pid-eaa-sd-jwt.rst.txt deleted file mode 100644 index b4daf4770..000000000 --- a/_sources/pid-eaa-sd-jwt.rst.txt +++ /dev/null @@ -1,57 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _pid-eaa-sd-jwt.rst: - -pid-eaa-sd-jwt.rst -+++++++++++++++++++++++++++ - -[What is it] - -[What it is usefull for] - -[Example] - -General Properties ------------------- - -[TODO] - - -Requirements ------------- - - - req 1 - - req 2 - - -Attributes ----------- - -[Table with parameters/attributes] - -.. list-table:: - :widths: 20 60 - :header-rows: 1 - - * - **Claim** - - **Description** - * - key - - value - - -Implementation considerations ------------------------------ - -TODO - - -Libraries and code snippets ---------------------------- - -TODO - - -External references -------------------- - -TODO diff --git a/_sources/pid-issuance.rst.txt b/_sources/pid-issuance.rst.txt deleted file mode 100644 index 3174acc25..000000000 --- a/_sources/pid-issuance.rst.txt +++ /dev/null @@ -1,887 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _pid_issuance.rst: - -PID Issuance -+++++++++++++ - -The relevant entities and interfaces involved in the issuance flow are: - - - *Wallet Provider*: It represents an organization (public or private) that is responsible for the release of an eIDAS-compliant EUDI Wallet Solution. It also issues thes Wallet Instance Attestation to its Wallet Instances by means of an Attestation Service. The Wallet Attestation certifies the genuinity and authenticity of the Wallet Instance and its compliance with a Trust Framework in compliance to the security and privacy requirements. - - *Wallet Solution*: It represents the entire product and service owned by a Wallet Provider, offered to all Users of that solution. A Wallet Solution must be certified as being EUDI-compliant by a Conformity Assessment Body (CAB). - - *Wallet Instance*: instance of a Wallet Solution, installed on User's device. It provides interfaces for User interaction with the Wallet Provider, Relying Parties, PID and (Q)EAA Providers. - - *PID Provider*: It represents the issuer of eIDAS Person Identification Data (PID). It is composed of: - - - OpenID4VCI Component: based on the “OpenID for Verifiable Credential Issuance” specification `[OIDC4VCI. Draft 13] `_ to release PID credentials. - - National eID Relying Party (OpenID Connect or SAML2): It represents the component to authenticate the End-User with the national Digital Identity Providers. - - National IdP: It represents preexisting identity systems based on SAML2 or OpenID Connect, already in production in each Member State (for Italy SPID and CIE id authentication schemed notified eIDAS with *LoA* **High**, see `SPID/CIE OpenID Connect Specifications `_). - -.. _fig_High-Level-Flow-EUDIW-PID-Issuing: -.. figure:: ../../images/High-Level-Flow-EUDIW-PID-Issuing.svg - :figwidth: 100% - :align: center - - PID Issuance - General architecture and high level flow - -The :numref:`fig_High-Level-Flow-EUDIW-PID-Issuing` shows a general architecture and highlights the main operations involved in the issuance of a PID, in particular: - - 0. **Wallet Instance Setup**: the first time the Wallet Instance is started a preliminary setup phase MUST be carried out. It consists of the release of a verifiable proof issued by the Attestation Service provided by the Wallet Provider that asserts the genuineness, the authenticity and the compliance with a trust framework of the Wallet Instance. The verifiable proof binds a public key corresponding to a local private key generated by the Wallet Instance. - 1. **Obtaining the trusted PID Provider**: the Wallet Instance queries the Trust Anchor to fetch the trusted PID Provider. - 2. **Obtaining of PID Provider metadata**: the Wallet Instance establishes the trust to the PID Provider according to the Trust Model, obtaining the Metadata that discloses the formats of the PID, the algorithms supported, and any other parameter required for interoperability needs. - 3. **PID request**: following the Authorization Code Flow in `[OIDC4VCI. Draft 13] `_ the Wallet Instance requests a PID to the PID Provider. A fresh key pairs is generated by the Wallet Instance, the public key is used by PID Provider for the key binding of the PID. - 4. **End-user authentication**: the PID Provider authenticates the End-User with LoA High, acting as an IAM Proxy to the National eID system. - 5. **PID issuance**: once the User authentication with LoA High happens, the User gives their consent, the PID Provider checks the Wallet Instance by means of the Wallet Attestation and the Trust Chain related to the Wallet Provider. Finally, the PID Provider releases a PID bound to the key material held by the requesting Wallet instance. - -The Wallet Instance Setup phase is described in Section [...]. In the following Section the steps from 1 to 5 are further expanded into more technical detailed steps. - -Detailed Flow -------------- - -The PID Issuance phase is based on the **Authorization Code Flow** with **Pushed Authorization Requests** (PAR) [:rfc:`9126`] and **PKCE** (Proof Key for Code Exchange, :rfc:`7636`) as recommended in `[OIDC4VCI. Draft 13. Section 3.4] `_. A *Wallet Initiated Flow* is considered and the User receives the PID directly in response to the Credential Request (*Immediate Flow*). - -.. _fig_Low-Level-Flow-EUDIW-PID-Issuing: -.. figure:: ../../images/Low-Level-Flow-EUDIW-PID-Issuing.svg - :figwidth: 100% - :align: center - :target: https://www.plantuml.com/plantuml/svg/bLHTJ-iu47tthnW1qb8frRuZBQ905wf5gwfRn6Fa9jDcrDJE-gEbzzVVSQm4ft1HB-AXySoSENEEntVMIUFyhXRIEwtyReL6Y8RFgA16AWSNhnRD1KWBNeYLVey7VrYmEyvgAgtm0YvVQ5Ev-zhZiFRUw4DVBeUnDrdNw62cc88giCqv25GbS1VnPUxSw3sL4GzM9pdpsUCmWGJ_7M1y2_u6zCf9Kd3KtW1d2WzZ3Xnku8XM2AEqGz1xD720oxVdsN8gOWL8gCawq6jO6cyTbf0s2dpROkuqlkK-XLPhCZjm5OB56Wj7Md7ri4fuxixDzNROEoEMSlRql7nQJAV_YXE9eAYms5h6bgvja682MGXwSAyszZVoeMoxIrLsyvEpi4CdI-baoXs26C3q3Kh7mFyyJ7cK4e5fqPhGn1mWpfbF5h30_psoBDS6RQELnTmT6yoWg0cLowdCslAygC88QeEdtpcpg3IdcOZKbqfhqGJQAM9o_DTLLAKJPU8SbxU3NeqWLPEorK3DLArFKaRGSzJy7iVIHadd3N9b2fpGX618wyHUrbIIEq9YXQ1uCtkXexwiT1GgzuOomFU6MFgSr2XUSYxnyWOcdbKrz2CswbrAR4bWHiBBjf9-kr0CXVRTqdZBtvAnk8gA27OWLm7E7YV_mJC_4-tqHPX9kMHkWZW3d71950WtA8EW8lRK3sVc9tTyWofuYV0urtFOul6NiSPeTd6jpN3JdDwY0gRUQE8PajLOSgHNBmwU0ALgRenKhhlYkkpserktizSX-5AImQ8pXk8eaKkgXYmAj3PloMTnXeYPN2R6pvLM1VO_ye_WbngkELO54LkP2YOJd9VrvpSbQi3_ZMRorWQlhcENQ4-I_xq3QP_UXiI5XpxwXHM93F5b71ZKL-ObhabHb9ZxxwJBOjOelVhTUtt_yZeL2zoGTNmgwphiVa9pRB3ceKeGf28Q0xTpHSVZglnfSA_ZJqZUXDxJPBB4s8xTHxUpRMHH-qSeYD4kYxVnLKlohDC6KtVlc9pVrJy1 - - PID Issuance - Detailed flow - -**Steps 1-4:** The User has selected a PID Provider, and the Wallet Instance obtains the metadata for the selected PID Provider. - -.. note:: - - **Federation Check:** The Wallet Instance needs to check if the PID Provider is part of Federation and then it can consume its Metadata. A non-normative example of a response from the endpoint **.well-known/openid-federation** with the **Entity Configuration** and the **Metadata** of the PID Provider is represented within the section `Entity Configuration Credential Issuer`_. - - -**Steps 5-6:** The Wallet Instance creates a PKCE code verifier that sends in a *pushed authorization request*, using the request parameter (see :rfc:`9126` Section 3) to the PID Provider authorization endpoint. The Wallet Instance signs the request using its private key. A OAuth2 client authentication method must be involved, since in this flow the pushed authorization endpoint is a protected endpoint. The client authentication should be based on the model defined in [:rfc:`7521`] using the Wallet Instance Attestation JWS inside the **client_assertion** parameter. The authorization_details [RAR :rfc:`9396`] parameter is extended to allow Wallet Instance to specify the types of the credentials when requesting authorization for the PID issuance. - -Below a non-normative example of the PAR. - -.. code-block:: http - - POST /as/par HTTP/1.1 - Host: pid-provider.example.org - Content-Type: application/x-www-form-urlencoded - - response_type=code - &client_id=$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$ - &code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM - &code_challenge_method=S256 - &request=eyJhbGciOiJSUzI1NiIsImtpZCI6ImsyYmRjIn0.ew0KIC Jpc3MiOiAiczZCaGRSa3F0MyIsDQogImF1ZCI6ICJodHRwczovL3NlcnZlci5leGFtcGxlLmNvbSIsDQo gInJlc3BvbnNlX3R5cGUiOiAiY29kZSBpZF90b2tlbiIsDQogImNsaWVudF9pZCI6ICJzNkJoZFJrcXQz IiwNCiAicmVkaXJlY3RfdXJpIjogImh0dHBzOi8vY2xpZW50LmV4YW1... - &client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-key-attestation - &client_assertion=$WalletInstanceAttestation$ - -The JWS header of request object is represented below: - -.. code-block:: JSON - - { - "alg": "ES256", - "kid": "FifYx03bnosD8m6gYQIfNHNP9cM_Sam9Tc5nLloIIrc", - } - - -The JWS payload of the request object is represented below: - -.. code-block:: JSON - - { - "response_type":"code", - "client_id":"$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$", - "state":"fyZiOL9Lf2CeKuNT2JzxiLRDink0uPcd", - "code_challenge":"E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM", - "code_challenge_method":"S256", - "authorization_details":[ - { - "type":"openid_credential", - "format": "vc+sd-jwt", - "credential_definition": { - "type": ["eu.eudiw.pid.it"] - } - } - ], - "redirect_uri":"eudiw://start.wallet.example.org", - "client_assertion_type":"urn:ietf:params:oauth:client-assertion-type:jwt-key-attestation", - -**Step 7:** The PID Provider creates a new request URI representing this new authorization request to be returned to the Wallet Instance. - } - - -.. note:: - - **Federation Check:** PID Provider MUST check that the Wallet Provider is part of the federation and in addition it MUST verify the Wallet Instance Attestation validity by checking its signature and data. - -**Step 7:** The PID Provider creates a new request URI representing a new authorization request and returns it to the Wallet Instance. A non-normative example of the authorization request is represented below: - -.. code-block:: http - - HTTP/1.1 201 Created - Cache-Control: no-cache, no-store - Content-Type: application/json - - { - "request_uri":"urn:ietf:params:oauth:request_uri:bwc4JK-ESC0w8acc191e-Y1LTC2", - "expires_in": 60 - } - - - -**Steps 8-9:** The Wallet Instance sends an authorization request to the PID Provider authorization endpoint. - -.. code-block:: http - - GET /authorize?client_id=$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$&request_uri=urn%3Aietf%3Aparams%3Aoauth%3Arequest_uri%3Abwc4JK-ESC0w8acc191e-Y1LTC2 HTTP/1.1 - Host: pid-provider.example.org - - -.. note:: - - **User Authentication and Consent:** The PID Provider performs the User authentication based on the requirements of eIDAS LoA High and asks the User consent for the PID issuance. - -**Steps 10-11:** The PID Provider sends an authorization code to the Wallet Instance. - -.. note:: - - The Wallet Instance redirect URI is a universal or app link registered with the local operating system, so this latter will resolve it and pass the response to the Wallet Instance. - -.. code-block:: http - - HTTP/1.1 302 Found - Location: eudiw://start.wallet.example.org?code=SplxlOBeZQQYbYS6WxSbIA&state=fyZiOL9Lf2CeKuNT2JzxiLRDink0uPcd&iss=https%3A%2F%2Fpid-provider.example.org - - -**Step 14:** The Wallet Instance sends a token request to the PID Provider token endpoint using the authorization *code*, *code_verifier*, *DPoP proof* and *private_key_jwt*. - -.. code-block:: http - - POST /token HTTP/1.1 - Host: pid-provider.example.org - Content-Type: application/x-www-form-urlencoded - DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik - VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR - nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R1JE - QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiItQndDM0VTYzZhY2MybFRjIiwiaHRtIj - oiUE9TVCIsImh0dSI6Imh0dHBzOi8vc2VydmVyLmV4YW1wbGUuY29tL3Rva2VuIiwia - WF0IjoxNTYyMjYyNjE2fQ.2-GxA6T8lP4vfrg8v-FdWP0A0zdrj8igiMLvqRMUvwnQg - 4PtFLbdLXiOSsX0x7NVY-FNyJK70nfbV37xRZT3Lg - - client_id=$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$ - &grant_type=authorization_code - &code=SplxlOBeZQQYbYS6WxSbIA - &redirect_uri=eudiw://start.wallet.example.org - &code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk - &client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer - &client_assertion=eyJhbGciOiJIUzI1NiI - - -**Step 15:** The PID Provider validates the request and if it is successful, it issues an *access token* (bound to the DPoP key) and a fresh *c_nonce*. - -.. code-block:: http - - HTTP/1.1 200 OK - Content-Type: application/json - Cache-Control: no-store - - { - "access_token": "Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU", - "token_type": "DPoP", - "expires_in": 2677, - "c_nonce": "tZign[...]snFbp", - "c_nonce_expires_in": 86400 - } - - -**Steps 16-18:** The Wallet Instance creates a new key pair to which the new credential shall be bound. Then, it creates a proof of possession with the new key and the *c_nonce* obtained in **Step 15** and it creates a DPoP proof for the request to the PID credential issuance endpoint. - -**Step 19:** The Wallet Instance sends a PID issuance request to the PID Provider credential endpoint. It contains the *access token*, the *DPoP proof*, the *credential type*, the *proof* (proof of possession of the key) and the *format*. - -.. note:: - - **PID Credential Schema and Status registration:** The PID Provider MUST register all the issued PIDs for their later revocation, if needed. - -.. code-block:: http - - POST /credential HTTP/1.1 - Host: pid-provider.example.org - Content-Type: application/x-www-form-urlencoded - Authorization: DPoP Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU - DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik - VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR - nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R - 1JEQSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiJlMWozVl9iS2ljOC1MQUVCIiwiaHRtIj - oiR0VUIiwiaHR1IjoiaHR0cHM6Ly9yZXNvdXJjZS5leGFtcGxlLm9yZy9wcm90ZWN0Z - WRyZXNvdXJjZSIsImlhdCI6MTU2MjI2MjYxOCwiYXRoIjoiZlVIeU8ycjJaM0RaNTNF - c05yV0JiMHhXWG9hTnk1OUlpS0NBcWtzbVFFbyJ9.2oW9RP35yRqzhrtNP86L-Ey71E - OptxRimPPToA1plemAgR6pxHF8y6-yqyVnmcw6Fy1dqd-jfxSYoMxhAJpLjA - - credential_definition=%7B%22type%22:%5B%22eu.eudiw.pid.it%22%5D%7D - &format=vc+sd-jwt - &proof=%7B%22proof_type%22:%22...-ace0-9c5210e16c32%22%7D - - - -A non-normative example of proof parameter is given below: - -.. code-block:: JSON - - { - "proof_type": "jwt", - "jwt": "eyJraWQiOiJkaWQ6ZXhhbXBsZTplYm …" - } - - -Where the decoded content of the JWT is represented below: - -.. code-block:: JSON - - { - "alg": "ES256", - "typ": "openid4vci-proof+jwt", - "kid": "dB67gL7ck3TFiIAf7N6_7SHvqk0MDYMEQcoGGlkUAAw" - } - -.. code-block:: JSON - - { - "iss": "0b434530-e151-4c40-98b7-74c75a5ef760", - "aud": "https://pid-provider.example.org", - "iat": 1504699136, - "nonce": "tZign...snFbp" - } - - - -**Steps 20-22:** The PID Provider checks the *DPoP proof* and whether the *access token* is valid and suitable for the requested PID. It also checks the proof of possession for the key material the new credential shall be bound to. If all checks succeed, the PID Provider creates a new credential bound to the key material and sends it to the Wallet Instance. The Wallet Instance MUST perform the PID integrity and authenticity checks and if it is successful can proceed with secure storage of the PID credential. - -.. code-block:: http - - HTTP/1.1 200 OK - Content-Type: application/json - Cache-Control: no-store - Pragma: no-cache - - { - "format": "vc+sd-jwt" - "credential" : "LUpixVCWJk0eOt4CXQe1NXK[...]WZwmhmn9OQp6YxX0a2L", - "c_nonce": "fGFF7[...]UkhLa", - "c_nonce_expires_in": 86400 - } - -Pushed Authorization Request Endpoint -------------------------------------- - -Pushed Authorization Request (PAR) Request -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The requests to the PID Provider authorization endpoint MUST be HTTP with method POST, with the following mandatory parameters in the HTTP request message body, encoded in ``application/x-www-form-urlencoded`` format. - -.. _table_http_request_claim: -.. list-table:: PAR http request parameters - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **response_type** - - MUST be set to ``code``. - - :rfc:`6749` - * - **client_id** - - MUST be set to the thumbprint of the ``jwk`` value in the ``cnf`` parameter inside the Wallet Instance Attestation. - - :rfc:`6749` - * - **code_challenge** - - A challenge derived from the **code verifier** that is sent in the authorization request - - :rfc:`7636#section-4.2`. - * - **code_challenge_method** - - A method that was used to derive **code challenge**. It MUST be set to ``S256``. - - :rfc:`7636#section-4.3`. - * - **request** - - It MUST be a signed JWT. The private key corresponding to the public one in the ``cnf`` parameter inside the Wallet Instance Attestation MUST be used for signing the request object. - - `OpenID Connect Core. Section 6 `_ - * - **client_assertion_type** - - It MUST be set to ``urn:ietf:params:oauth:client-assertion-type:jwt-key-attestation``. - - `Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants `_ - * - **client_assertion** - - It MUST be the Wallet Instance Attestation signed JWT. - - `Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants `_ - -The JWT Request Object has the following JOSE header parameters: - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **JOSE header** - - **Description** - - **Reference** - * - **alg** - - A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section `Cryptographic Algorithms `_ and MUST NOT be none or an identifier for a symmetric algorithm (MAC). - - :rfc:`7516#section-4.1.1`. - * - **kid** - - Unique identifier of the JWK as base64url-encoded JWK Thumbprint value. - - :rfc:`7638#section_3`. - -.. note:: - The parameter **typ**, if omitted, assumes the implicit value **JWT**. - - -The JWT payload is given by the following parameters: - -.. _table_jwt_request: -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **response_type** - - It MUST be set as in the :ref:`Table of the HTTP parameters `. - - See :ref:`Table of the HTTP parameters `. - * - **client_id** - - It MUST be set as in the :ref:`Table of the HTTP parameters `. - - See :ref:`Table of the HTTP parameters `. - * - **state** - - Unique session identifier at the client side. This value will be returned to the client in the response, at the end of the authentication. It MUST be a random string with at least 32 alphanumeric characters. - - See `OpenID.Core#AuthRequest `_. - * - **code_challenge** - - It MUST be set as in the :ref:`Table of the HTTP parameters `. - - See :ref:`Table of the HTTP parameters `. - * - **code_challenge_method** - - It MUST be set as in the :ref:`Table of the HTTP parameters `. - - See :ref:`Table of the HTTP parameters `. - * - **authorization_details** - - JSON Object. It MUST include the following claims: - - - **type**: it MUST be set to ``openid_credential``, - - **format**: it MUST be set to ``vc+sd-jwt``, - - **credential_definition**: JSON Object. It MUST have the **type** claim which MUST be set to ``eu.eudiw.pid.it`` - - See [RAR :rfc:`9396`] and `[OIDC4VCI. Draft 13] `_. - * - **redirect_uri** - - Redirection URI to which the response will be sent. It MUST be an universal or app link registered with the local operating system, so this latter will resolve it and pass the response to the Wallet Instance. - - See `OpenID.Core#AuthRequest `_. - * - **client_assertion_type** - - It MUST be set as in the :ref:`Table of the HTTP parameters `. - - See :ref:`Table of the HTTP parameters `. - * - **client_assertion** - - It MUST be set as in the :ref:`Table of the HTTP parameters `. - - See :ref:`Table of the HTTP parameters `. - - -Pushed Authorization Request (PAR) Response -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -If the verification is successful, the PID Provider MUST provide the response with a *201 HTTP status code*. The following parameters are included as top-level members in the HTTP response message body, using the ``application/json`` media type as defined in [:rfc:`8259`]. - -.. _table_http_response_claim: -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **request_uri** - - The request URI corresponding to the authorization request posted. This URI MUST be a single-use reference to the respective authorization request. It MUST contain some part generated using a cryptographically strong pseudorandom algorithm. The value format MUST be ``urn:ietf:params:oauth:request_uri:`` with ```` as the random part of the URI that references the respective authorization request data. - - [:rfc:`9126`]. - * - **expires_in** - - A JSON number that represents the lifetime of the request URI in seconds as a positive integer. - - [:rfc:`9126`]. - - -Authorization endpoint ----------------------- - -The authorization endpoint is used to interact with the Credential Issuer and obtain an authorization grant. -The authorization server MUST first verify the identity of the resource owner (the User that own it's credentials) -as defined in the :rfc:`6749`. - -Authorization Request -^^^^^^^^^^^^^^^^^^^^^^^ - -The Authorization request is issued by the Wallet Instance Browser, HTTP **POST** or **GET** methods MAY be used. When the method **POST** is used, the parameters MUST be sent using the *Form Serialization*. When the method **GET** is used, the parameters MUST be sent using the *Query String Serialization*. For more details see `OpenID.Core#Serializations `_. - -The mandatory parameters in the HTTP authentication request are specified in the following table. - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **client_id** - - It MUST be set as in the :ref:`Table of the HTTP parameters `. - - See :ref:`Table of the HTTP parameters `. - * - **request_uri** - - It MUST be set to the same value as obtained by PAR Response. See :ref:`Table of the HTTP PAR Response parameters `. - - [:rfc:`9126`]. - - -Authorization Response -^^^^^^^^^^^^^^^^^^^^^^^ - -The authentication response is returned by the PID Provider authorization endpoint at the end of the authentication flow. - -If the authentication is successful the PID Provider redirects the User by adding the following query parameters as required to the *redirect_uri*. The redirect URI MUST be an universal or app link registered with the local operating system, so this latter is able to resolve its value and delegates the Wallet Instance for the processing. - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **code** - - Unique *Authorization Code* that the client submits to the Token Endpoint. - - [:rfc:`6749#section-4.1.2`], `Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants `_ - * - **state** - - The client MUST check the correspondence with the state value in the request object. It is defined as in the :ref:`Table of the JWT Request parameters `. - - [:rfc:`6749#section-4.1.2`]. - * - **iss** - - Unique identifier of the PID PRovider who created the Authentication Response. The Wallet Instance MUST validate this parameter. - - `OAuth 2.0 Authorization Server Issuer Identifier in Authorization Response `_, `[RFC7519, Section 4.1.1] `_. - - - -Token endpoint --------------- - -The token endpoint is used by the Wallet Instance -to obtain an access token by presenting its authorization grant, as -defined in :rfc:`6749`. - -Token Request -^^^^^^^^^^^^^^^ - -The request to the PID Provider Token endpoint MUST be an HTTP request with method POST, where its body message is encoded in ``application/x-www-form-urlencoded`` format. The Wallet Instance sends the Token endpoint request with *private_key_jwt* authentication and a *DPoP proof* containing the mandatory parameters, defined in the table below. - -The Token endpoint MUST accept and validate the DPoP proof sent in the DPoP HTTP header. The Token endpoint MUST validate the DPoP proof based on the steps defined in Section 4.3 of the DPoP specifications `[DPoP-draft16] `_. Thus, this mitigates the misuse of leaked or stolen access tokens at the credential endpoint. If the DPoP proof is invalid, the Token endpoint returns an error response, according to Section 5.2 of [:rfc:`6749`] with ``invalid_dpop_proof`` as the value of the error parameter. - - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **client_id** - - It MUST be set as in the :ref:`Table of the HTTP parameters `. - - See :ref:`Table of the HTTP parameters `. - * - **grant_type** - - It MUST be set to ``authorization_code``. - - `Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants `_. - * - **code** - - Authorization code returned in the Authentication Response. - - `Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants `_. - * - **redirect_uri** - - It MUST be set as in the request object :ref:`Table of the JWT Request parameters `. - - `Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants `_. - * - **code_verifier** - - Verification code of the **code_challenge**. - - `Proof Key for Code Exchange by OAuth Public Clients `_. - * - **client_assertion_type** - - It MUST be set to ``urn:ietf:params:oauth:client-assertion-type:jwt-bearer``. - - `Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants `_. - * - **client_assertion** - - JWT signed with the Wallet Instance private key containing the following parameters: - - - **iss**: This MUST contain the client_id. - - **sub**: This MUST contain the iss. - - **aud**: URL of the PID Provider Token Endpoint. - - **iat**: UNIX Timestamp with the time of the JWT issuance, coded as NumericDate as indicated in RFC 7519. - - **exp**: UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated in RFC 7519. - - **jti**: Unique Identifier for this authentication request, generated by the client. E.g., uuid4 format. - - `Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants `_. - -A **DPoP proof** is included in an HTTP request using the ``DPoP`` header parameter containing a DPoP JWS. - -The JOSE header of a **DPoP JWT** MUST contain at least the following parameters: - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **JOSE header** - - **Description** - - **Reference** - * - **typ** - - It MUST be equal to ``dpop+jwt``. - - [:rfc:`7515`] and [:rfc:`8725`. Section 3.11]. - * - **alg** - - A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section :ref:`Cryptographic Algorithms ` and MUST NOT be none or an identifier for a symmetric algorithm (MAC). - - [:rfc:`7515`]. - * - **jwk** - - representing the public key chosen by the client, in JSON Web Key (JWK) [RFC7517] format, as defined in Section 4.1.3 of [RFC7515]. It MUST NOT contain a private key. - - [:rfc:`7517`] and [:rfc:`7515`]. - - -The payload of a **DPoP proof** MUST contain at least the following claims: - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **jti** - - Unique identifier for the DPoP proof JWT. The value MUST be assigned in a *UUID v4* string format according to [:rfc:`4122`]. - - [:rfc:`7519`. Section 4.1.7]. - * - **htm** - - The value of the HTTP method of the request to which the JWT is attached. - - [:rfc:`9110`. Section 9.1]. - * - **htu** - - The HTTP target URI, without query and fragment parts, of the request to which the JWT is attached. - - [:rfc:`9110`. Section 7.1]. - * - **iat** - - UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in :rfc:`7519`. - - [:rfc:`7519`. Section 4.1.6]. - - -Token Response -^^^^^^^^^^^^^^^ - -Token endpoint response MUST contain the following mandatory claims. - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **access_token** - - The *DPoP-bound Access Token*, in signed JWT format, allows accessing the Credential Endpoint for obtaining the PID. - - :rfc:`6749`. - * - **token_type** - - Type of *Access Token* returned. It MUST be equal to ``DPoP``. - - :rfc:`6749`. - * - **expires_in** - - Expiry time of the *Access Token* in seconds. - - :rfc:`6749`. - * - **c_nonce** - - JSON string containing a nonce to be used to create a *proof of possession* of key material when requesting a Credential. - - `[OIDC4VCI. Draft 13] `_. - * - **c_nonce_expires_in** - - JSON integer, it represents the lifetime in seconds of the **c_nonce**. - - `[OIDC4VCI. Draft 13] `_. - -Access Token -^^^^^^^^^^^^ - -A DPoP-bound Access Token is provided by the PID Provider Token endpoint as a result of a successful token request. The Access Token is encoded in JWT format, according to [:rfc:`7519`]. The Access Token MUST have at least the following mandatory claims and it MUST be bound to the public key that is provided by the DPoP proof. This binding can be accomplished based on the methodology defined in Section 6 of `[DPoP-draft16] `_. - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **iss** - - It MUST be an HTTPS URL that uniquely identifies the PID Provider. The client MUST verify that this value matches the PID Provider where it has requested the credential. - - [:rfc:`9068`], `[RFC7519, Section 4.1.1] `_. - * - **sub** - - It identifies the subject of the JWT. It MUST be of type *pairwise*. - - [:rfc:`9068`], [:rfc:`7519`] and [`OpenID.Core#SubjectIDTypes `_]. - * - **client_id** - - It MUST contain a HTTPS URL that uniquely identifies the RP. - - [:rfc:`9068`]. - * - **aud** - - It MUST match the value *client_id*. The RP MUST verify that this value matches its client ID. - - [:rfc:`9068`]. - * - **iat** - - UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in :rfc:`7519`. - - [:rfc:`9068`], [:rfc:`7519`. Section 4.1.6]. - * - **exp** - - UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated in :rfc:`7519`. - - [:rfc:`9068`], [:rfc:`7519`]. - * - **jti** - - It MUST be a String in *uuid4* format. Unique Token ID identifier that the RP MAY use to prevent reuse by rejecting the Token ID if already processed. - - [:rfc:`9068`], [:rfc:`7519`]. - * - **nonce** - - It MUST be a random string of at least 32 alphanumeric characters. The value type of this claim MUST be a string, where the value is a **c_nonce** provided by the PID Provider. - - [`OpenID.Core#AuthRequest `_]. - * - **jkt** - - JWK SHA-256 Thumbprint Confirmation Method. The value of the jkt member MUST be the base64url encoding (as defined in [RFC7515]) of the JWK SHA-256 Thumbprint of the DPoP public key (in JWK format) to which the access token is bound. - - [`DPoP-draft16 `_. Section 6.1] and [:rfc:`7638`]. - - - -Credential endpoint -------------------- - -The Credential Endpoint issues a Credential as approved by the End-User upon presentation of a valid Access Token representing this approval, as defined in `OPENID4VCI`_. - -Credential Request -^^^^^^^^^^^^^^^^^^^ - -The Wallet Instance may request a PID to the PID Provider Credential endpoint with a HTTP POST request encoded in *application/json* format, where the following parameters in the message body MUST be present. - -The Credential endpoint MUST accept and validate the DPoP proof sent in the DPoP HTTP header based on the steps defined in Section 4.3 of `[DPoP-draft16] `_. If the DPoP proof is invalid, the Credential endpoint returns an error response per Section 5.2 of [:rfc:`6749`] with `invalid_dpop_proof` as the value of the error parameter. - -.. warning:: - The Wallet Instance MUST create a **new DPoP proof** for the Credential request and MUST NOT use the previously created proof for the Token Endpoint. - - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **credential_definition** - - JSON object containing the detailed description of the credential type. It MUST have at least the **type** sub claims which is a JSON array containing the type values the Wallet shall request in the subsequent Credential Request. It MUST be `eu.eudiw.pid.it`. - - `[OIDC4VCI. Draft 13] `_. - * - **format** - - Format of the Credential to be issued. This MUST be `vc+sd-jwt`. - - `[OIDC4VCI. Draft 13] `_. - * - **proof** - - JSON object containing proof of possession of the key material the issued Credential shall be bound to. The proof object MUST contain the following mandatory claims: - - - **proof_type**: JSON string denoting the proof type. It MUST be `jwt`. - - **jwt**: the JWT used as proof of possession. - - `[OIDC4VCI. Draft 13] `_. - -.. note:: - - If the **format** value is `mso_mdoc`, the credential request MUST contain the doctype claim which is a JSON string identifying the PID type according to `EIDAS-ARF`_ . See Appendix E.2. of `[OIDC4VCI. Draft 13] `_ for more details. - - -The JWT proof type MUST contain the following parameters for the JOSE header and the JWT body: - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **JOSE Header** - - **Description** - - **Reference** - * - **alg** - - A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section :ref:`Cryptographic Algorithms ` and MUST NOT be ``none`` or an identifier for a symmetric algorithm (MAC). - - `[OIDC4VCI. Draft 13] `_, [:rfc:`7515`], [:rfc:`7517`]. - * - **typ** - - MUST be `openid4vci-proof+jwt`. - - `[OIDC4VCI. Draft 13] `_, [:rfc:`7515`], [:rfc:`7517`]. - * - **kid** - - It MUST contain the identifier of the key material the PID shall be bound to. - - `[OIDC4VCI. Draft 13] `_, [:rfc:`7515`], [:rfc:`7517`]. - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **iss** - - The value of this claim MUST be the **client_id** of the Wallet Instance. - - `[OIDC4VCI. Draft 13] `_, `[RFC7519, Section 4.1.1] `_. - * - **aud** - - The value of this claim MUST be the identifier URL of the PID Provider. - - `[OIDC4VCI. Draft 13] `_. - * - **iat** - - UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in :rfc:`7519`. - - `[OIDC4VCI. Draft 13] `_, [:rfc:`7519`. Section 4.1.6]. - * - **nonce** - - The value type of this claim MUST be a string, where the value is a **c_nonce** provided by the PID Provider in the Token response. - - `[OIDC4VCI. Draft 13] `_. - - - -Credential Response -^^^^^^^^^^^^^^^^^^^^ - -Credential Response to the Wallet Instance MUST be sent using `application/json` media type. The response MUST contain the following mandatory claims: - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **format** - - Format of the Credential to be issued. This MUST be `vc+sd-jwt`. - - `[OIDC4VCI. Draft 13] `_. - * - **credential** - - Contains the issued PID. It MUST be an SD-JWT JSON Object (see Section :ref:`PID Data Model `). - - Appendix E in `[OIDC4VCI. Draft 13] `_. - * - **c_nonce** - - JSON string containing a nonce to be used to create a *proof of possession* of key material when requesting a further credential or for renewal credential. - - `[OIDC4VCI. Draft 13] `_. - * - **c_nonce_expires_in** - - JSON integer corresponding to the **c_nonce** lifetime in seconds. - - `[OIDC4VCI. Draft 13] `_. - -.. note:: - - If the **format** value is `mso_mdoc`, the **credential** value MUST be a base64url-encoded JSON string according to Appendix E of `[OIDC4VCI. Draft 13] `_. - - -.. _Entity Configuration Credential Issuer: - -Entity Configuration Credential Issuer -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Below a non-normative example of an Entity Configuration containing an `openid_credential_issuer` metadata. - -.. code-block:: http - - HTTP/1.1 200 OK - Content-Type: application/entity-statement+jwt - - { - - "alg": "RS256", - "kid": "FANFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs", - "typ": "entity-statement+jwt" - - } - . - { - "exp": "1649610249", - "iat": "1649437449", - "iss": "https://pid-provider.example.org", - "sub": "https://pid-provider.example.org", - "jwks": { - "keys": [{ - "kty": "RSA", - "use": "sig", - "n": "1Ta-sE …", - "e": "AQAB", - "kid": "FANFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs" - }] - }, - "metadata": { - "openid_credential_issuer": { - "credential_issuer": "https://pid-provider.example.org", - "authorization_endpoint": "https://pid-provider.example.org/connect/authorize", - "token_endpoint": "https://pid-provider.example.org/connect/token", - "pushed_authorization_request_endpoint": "https://pid-provider.example.org/connect/par", - "dpop_signing_alg_values_supported": ["RS256", "RS512", "ES256", "ES512"], - "credential_endpoint": "https://pid-provider.example.org/credential", - "credentials_supported": { - "eu.eudiw.pid.it": { - "format": "vc+sd-jwt", - "cryptographic_binding_methods_supported": ["jwk"], - "cryptographic_suites_supported": ["RS256", "RS512", "ES256", "ES512"], - "display": [{ - "name": "PID Provider Italiano di esempio", - "locale": "it-IT", - "logo": { - "url": "https://pid-provider example.org/public/logo.svg", - "alt_text": "logo di questo PID Provider" - }, - "background_color": "#12107c", - "text_color": "#FFFFFF" - }, - { - "name": "Example Italian PID Provider", - "locale": "en-US", - "logo": { - "url": "https://pid-provider.example.org/public/logo.svg", - "alt_text": "The logo of this PID Provider" - }, - "background_color": "#12107c", - "text_color": "#FFFFFF" - } - ], - "credential_definition": { - "type": ["PIDCredential"], - "credentialSubject": { - "given_name": { - "mandatory": true, - "display": [{ - "name": "Current First Name", - "locale": "en-US" - }, - { - "name": "Nome", - "locale": "it-IT" - } - ] - }, - "family_name": { - "mandatory": true, - "display": [{ - "name": "Current Family Name", - "locale": "en-US" - }, - { - "name": "Cognome", - "locale": "it-IT" - } - ] - }, - "birthdate": { - "mandatory": true, - "display": [{ - "name": "Date of Birth", - "locale": "en-US" - }, - { - "name": "Data di Nascita", - "locale": "it-IT" - } - ] - }, - "place_of_birth": { - "mandatory": true, - "display": [{ - "name": "Place of Birth", - "locale": "en-US" - }, - { - "name": "Luogo di Nascita", - "locale": "it-IT" - } - ] - }, - "unique_id": { - "mandatory": true, - "display": [{ - "name": "Unique Identifier", - "locale": "en-US" - }, - { - "name": "Identificativo univoco", - "locale": "it-IT" - } - ] - }, - "tax_id_code": { - "mandatory": true, - "display": [{ - "name": "Tax Id Number", - "locale": "en-US" - }, - { - "name": "Codice Fiscale", - "locale": "it-IT" - } - ] - } - } - } - } - } - }, - - "federation_entity": { - "organization_name": "Pid Provider Organization Example", - "homepage_uri": "https://pid-provider.example.org", - "policy_uri": "https://pid-provider.example.org/privacy_policy", - "tos_uri": "https://pid-provider.example.org/info_policy", - "logo_uri": "https://pid-provider.example.org/logo.svg" - }, - - "openid_relying_party": { - - } - } - } diff --git a/_sources/pseudonyms.rst.txt b/_sources/pseudonyms.rst.txt deleted file mode 100644 index 7b20567f9..000000000 --- a/_sources/pseudonyms.rst.txt +++ /dev/null @@ -1,57 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _pseudonyms.rst: - -pseudonyms.rst -+++++++++++++++++++++++++++ - -[What is it] - -[What it is usefull for] - -[Example] - -General Properties ------------------- - -[TODO] - - -Requirements ------------- - - - req 1 - - req 2 - - -Attributes ----------- - -[Table with parameters/attributes] - -.. list-table:: - :widths: 20 60 - :header-rows: 1 - - * - **Claim** - - **Description** - * - key - - value - - -Implementation considerations ------------------------------ - -TODO - - -Libraries and code snippets ---------------------------- - -TODO - - -External references -------------------- - -TODO diff --git a/_sources/relying-party-solution.rst.txt b/_sources/relying-party-solution.rst.txt deleted file mode 100644 index 42d398975..000000000 --- a/_sources/relying-party-solution.rst.txt +++ /dev/null @@ -1,741 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _Wallet Instance Attestation: wallet-instance-attestation.html -.. _Trust Model: trust.html - -.. _relying-party-solution: - -Relying Party Solution -+++++++++++++++++++++++ - -This section describes how a Relying Party may ask to a Wallet Instance the presentation of the PID and the (Q)EAAs, according the following specifications: - -- `OpenID for Verifiable Presentations - draft 19 `_. -- `Draft: OAuth 2.0 Demonstrating Proof-of-Possession at the Application Layer (DPoP) `_. - - -In this section the following flows are described: - -- **Same Device Flow**, where the Verifier and the Wallet Instance acts in the same device. -- **Remote Cross Device Flow**, where the Verifier and the Wallet Instance acts in different devices and the Verifier is a remote Relying Party. - -The flows are analyzed in this chapter, taking into account security and privacy considerations. - -.. note:: - Relying Party and Verifier are the same entity. - - -Same Device Flow ----------------- -In the **Same Device Authorization Flow**, the User interacts with a Verifier that resides in the same device of the Wallet Instance. -This scenario utilizes HTTP redirects to finalize the authorization phase and obtain Verifiable Presentation(s). - -.. note:: - - This flow will be described more in detail in future releases of this documentation. - - -Remote Cross Device Flow ---------------------------- -In the **Cross Device Authorization Flow**, the User interacts with a remote Relying Party. -This scenario requests the Verifier to show a QR Code which the User frames with their Wallet Instance. - -Once the Relying Party authentication is performed by the Wallet Instance, the User gives the consent for the release of the personal data, in the form of a Verifiable Presentation. - - -.. image:: ../../images/cross_device_auth_seq_diagram.svg - :align: center - :target: //www.plantuml.com/plantuml/png/ZPF1Rjf048Rl-nIZd5gfUG4agaGqgcXLuG99Bf6gnJlWRSmidPsrIv--QpjhOn1IRlZtDpyp_upll6YMi2-L3k8ex3V8IXsYPdDxq2Hmy-YHRq1x26FzMPSb2imfMb2EBLAFaIMMHqixoA9uR84AbPfEuJv8WHH1BTOHm7Ig0jn-ZgydiCG_0Rr0naum5pHHyIvmZahdOYijsDXKc0fcZ55hFHtRVwrbShd4VYvXvaoghoUmAbmTrLOqUFeN_UzQgJhHkQRaqOiFVuKZtBV-k9o_q9RTVY1J5ryVrZsssFp6MFL2c-DfQHHgAmMS1Gpt8f5enuk8zl0bSnc8UqMwaanNSM6qvl2MJDV-k9zn26d6v3LQQUVK8q_8TdiyGtwWQAD53vGkRHGGlZslOMLtf2KmNhnENQ61f-o3_zW1OUXswnXoHnv9Xl632ccgcQEjvJsQqu72i8biiLfV78q_D8unNcXNK1r-lIFV6QD14gjBc7iVa5F22Rmsym1ax7Bq7gH0o7kxI-1AmugS8BWAUGGV2kqHE0Pc6QEvcyJ9Rg5AtLWItB6LuoVGwOlidiX0uKg331jBfjccstPxQ0oGV624U5QT1Ze-bPPUqRIvTPTWaTy5vu4PIS2ZzyrGv2Z7yyfPKydzITWu7AD7EhtZnNTbyFIZFJlbEoGJzkL_ - -.. list-table:: - :widths: 50 50 - :header-rows: 1 - - * - **Id** - - **Description** - * - **1** - - The User asks for access to a protected resource, the Relying Party redirects the User to a discovery page in which the User selects the *Login with the Wallet* button. The Authorization flow starts. - * - **2** - - The Relying Party creates an Authorization Request which contains the scopes of the request. - * - **3** - - The Relying Party inserts the reference URI of the *request_uri* into a QR Code. - * - **4** - - The QR Code is shown to the User that frames it. - * - **5** and **6** - - The Wallet Instance decodes the QR Code and extracts the Request URI from the payload of the QR Code. - * - **7** - - The Wallet Instance requests the content of the Authorization Request by invoking the Request URI, passing an Authorization DPoP HTTP Header containing the Wallet Instance Attestation and the DPoP proof HTTP Header. - * - **8** - - The Relying Party attests the trust to the Wallet Instance using the Wallet Instance Attestation and verifies its capabilities. - * - **9** - - The Relying Party issues a signed Request Object, returning it as response. - * - **10** - - The Wallet Instance verifies Request Object JWS. - * - **11** - - The Wallet Instance attests the trust to the Relying Party by verifying the ``trust_chain``. - * - **12** and **13** - - The Wallet Instance verifies the signature of the request and processes the Relying Party metadata to attests its capabilities and allowed scopes, attesting which Verifiable Credentials and personal attributes the Relying Party is granted to request. - * - **14** - - The Wallet Instance requests the User's consent for the release of the credentials. - * - **15** - - The User authorizes and consents the presentation of their credentials, by selecting/deselecting the personal data to release. - * - **16** - - The Wallet Instance provides the Authorization Response to the Relying Party. - * - **17** - - The Relying Party attests the Credential Issuer trust. - * - **18** - - The Relying Party verifies the signature of the Authorization Response JWS. - * - **19** - - The Relying Party verifies the Authorization Response, performs checks for integrity, revocation and proof of possession of the presented credentials. - * - **20** - - The Relying Party notifies the Wallet Instance that the operation ends successfully. - -Authorization Request Details ------------------------------ -In a Cross Device Flow, a QR Code is shown by the Relying Party to the User in order to issue the Authorization Request. - -The User frames the QR Code using the Wallet Instance, then grants the consent to release their attributes to the RP. - -The payload of the QR Code is a **Base64 encoded string** based on the following format: - -.. code-block:: javascript - - eudiw://authorize?client_id=`$client_id`&request_uri=`$request_uri` - - -Where: - -.. list-table:: - :widths: 25 50 - :header-rows: 1 - - * - **Name** - - **Description** - * - **client_id** - - Client unique identifier of the Verifier. - * - **request_uri** - - The Verifier request URI used by the Wallet Instance to retrieve the Request Object. - -.. note:: - The *error correction level* chosen for the QR Code MUST be Q (Quartily - up to 25%), since it offers a good balance between error correction capability and data density/space. This level of quality and error correction allow the QR Code to remain readable even if it is damaged or partially obscured. - - -Below is a non-normative example of a QR Code issued by the Relying Party: - -.. image:: ../../images/verifier_qr_code.svg - :align: center - - -Below is a non-normative example of the QR Code raw payload: - -.. code-block:: text - - ZXVkaXc6Ly9hdXRob3JpemU/Y2xpZW50X2lkPWh0dHBzOi8vdmVyaWZpZXIuZXhhbXBsZS5vcmcmcmVxdWVzdF91cmk9aHR0cHM6Ly92ZXJpZmllci5leGFtcGxlLm9yZy9yZXF1ZXN0X3VyaQ== - -Below follows its Base64 decoded content: - -.. code-block:: text - - eudiw://authorize?client_id=https://verifier.example.org&request_uri=https://verifier.example.org/request_uri - - - -Request Object Details ----------------------- -The following actions are made by the Wallet Instance: - -- scan the QR Code; -- extract from the payload the ``request_uri`` parameter; -- invoke the retrieved URI; -- provide in the request its Wallet instance Attestation, using `DPOP`_ to proof the legitimate possession of it; -- obtain the signed request object from the Relying Party. - -Below a non-normative example of HTTP request made by the Wallet Instance to the Relying Party to provide the Wallet Instance Attestion and retrieve the signed request object: - -.. code-block:: javascript - - GET /request_uri HTTP/1.1 - HOST: verifier.example.org - Authorization: DPoP $WalletInstanceAttestation - DPoP: $WalletInstanceAttestationProofOfPossession - - -More detailed information about the `Wallet Instance Attestation`_ is available in its dedicated section of this technical specification. - -To attest an high level of security, the Wallet Instance submits its Wallet Instance Attestation to the Relying Party, disclosing its capabilities and the security level attested by its Wallet Provider. - -Herein the description of the parameters defined in *OAuth 2.0 Demonstration of Proof-of-Possession at the Application Layer (DPoP)*. - -.. note:: - The use of DPoP doesn't represent any breaking changes to Wallet Instances that do not support DPoP to a *request_uri* endpoint, since it is assumed to use it as an additional security mechanisms for the attestation of the status of the Wallet Instance. - - If the DPoP HTTP Header is missing, the Relying Party would assume the lowest attestable level of security to the Wallet Instance it is interacting with. - -DPoP HTTP Header -^^^^^^^^^^^^^^^^ - -A **DPoP proof** is included in the request using the HTTP Header ``DPoP`` and containing a JWS. The JWS MUST be signed with the public key made available in the Wallet Instance Attestation (``Authorization: DPoP``). - - -The JOSE header of the **DPoP JWS** MUST contain at least the following parameters: - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **JOSE header** - - **Description** - - **Reference** - * - **typ** - - It MUST be equal to ``dpop+jwt``. - - [:rfc:`7515`] and [:rfc:`8725`. Section 3.11]. - * - **alg** - - A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section *Cryptographic Algorithms* `* and MUST NOT be none or an identifier for a symmetric algorithm (MAC). - - [:rfc:`7515`] - * - **jwk** - - representing the public key chosen by the client, in JSON Web Key (JWK) [RFC7517] format, as defined in Section 4.1.3 of [RFC7515]. It MUST NOT contain a private key. - - [:rfc:`7517`] and [:rfc:`7515`] - - -The payload of a **DPoP proof** MUST contain at least the following claims: - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Reference** - * - **jti** - - Unique identifier for the DPoP proof JWT. The value MUST be assigned in a *UUID v4* string format according to [:rfc:`4122`]. - - [:rfc:`7519`. Section 4.1.7]. - * - **htm** - - The value of the HTTP method of the request to which the JWT is attached. - - [:rfc:`9110`. Section 9.1]. - * - **htu** - - The HTTP target URI, without query and fragment parts, of the request to which the JWS is attached. - - [:rfc:`9110`. Section 7.1]. - * - **iat** - - UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in :rfc:`7519`. - - [:rfc:`7519`. Section 4.1.6]. - * - **ath** - - Hash of the Wallet Instance Attestation. - - [`DPOP`_. Section 4.2]. - - -Therein a non-normative example of the DPoP decoded content: - -.. code-block:: text - - { - "typ": "dpop+jwt", - "alg": "ES256", - "jwk": { - "kty": "EC", - "x": "l8tFrhx-34tV3hRICRDY9zCkDlpBhF42UQUfWVAWBFs", - "y": "9VE4jf_Ok_o64zbTTlcuNJajHmt6v9TDVrU0CdvGRDA", - "crv": "P-256" - } - } - . - { - "jti": "f47c96a1-f928-4768-aa30-ef32dc78aa69", - "htm": "GET", - "htu": "https://verifier.example.org/request_uri", - "iat": 1562262616, - "ath": "fUHyO2r2Z3DZ53EsNrWBb0xWXoaNy59IiKCAqksmQEo" - } - - -Request URI response --------------------- - -The Relying Party issues a signed request object, where a non-normative example in the form of decoded header and payload is shown below: - -.. code-block:: text - - { - "alg": "ES256", - "typ": "JWT", - "kid": "e0bbf2f1-8c3a-4eab-a8ac-2e8f34db8a47", - "trust_chain": [ - "MIICajCCAdOgAwIBAgIC...awz", - "MIICajCCAdOgAwIBAgIC...2w3", - "MIICajCCAdOgAwIBAgIC...sf2" - ] - } - . - { - "scope": "eu.europa.ec.eudiw.pid.it.1 pid-sd-jwt:unique_id+given_name+family_name", - "client_id_scheme": "entity_id", - "client_id": "https://verifier.example.org", - "response_mode": "direct_post.jwt", - "response_type": "vp_token", - "response_uri": "https://verifier.example.org/callback", - "nonce": "2c128e4d-fc91-4cd3-86b8-18bdea0988cb", - "state": "3be39b69-6ac1-41aa-921b-3e6c07ddcb03", - "iss": "https://verifier.example.org", - "iat": 1672418465, - "exp": 1672422065 - } - -The JWS header parameters are described herein: - -.. list-table:: - :widths: 25 50 - :header-rows: 1 - - * - **Name** - - **Description** - * - **alg** - - Algorithm used to sign the JWT, according to [:rfc:`7516#section-4.1.1`]. It MUST be one of the supported algorithms in Section *Cryptographic Algorithms* and MUST NOT be none or an identifier for a symmetric algorithm (MAC). - * - **typ** - - Media Type of the JWT, as defined in [:rfc:`7519`]. - * - **kid** - - Key ID of the public key needed to verify the JWS signature, as defined in [:rfc:`7517`]. Required if ``trust_chain`` is used. - * - **trust_chain** - - Sequence of Entity Statements that composes a Trust Chain related to the Relying Party, as defined in `OIDC-FED`_ Section *3.2.1. Trust Chain Header Parameter*. - - -The JWS payload parameters are described herein: - -.. list-table:: - :widths: 25 50 - :header-rows: 1 - - * - **Name** - - **Description** - * - **scope** - - Aliases for well-defined Presentation Definitions IDs. It will be used to identify which required credentials and User attributes are requested by the Relying Party. - * - **client_id_scheme** - - String identifying the scheme of the value in the ``client_id``. It MUST be ``entity_id``. - * - **client_id** - - Unique Identifier of the Relying Party. - * - **response_mode** - - Used to ask the Wallet Instance in which way it has to send the response. It MUST be ``direct_post.jwt`` - * - **response_type** - - The supported response type, MUST be set to``vp_token``. - * - **response_uri** - - The Response URI to which the Wallet Instance MUST send the Authorization Response using an HTTPs POST. - * - **nonce** - - Fresh cryptographically random number with sufficient entropy used for security reason, which length MUST be at least 32 digits. - * - **state** - - Unique identifier of the Authorization Request. - * - **iss** - - The entity that issued the JWT. It will be populated with the Verifier URI - * - **iat** - - The NumericDate representing the time at which the JWT was issued - * - **exp** - - The NumericDate representing the expiration time on or after which the JWT MUST NOT be accepted for processing. - - -.. warning:: - - The usage of ``scope`` instead of ``presentation_definition`` is still under discussion and needs better refinements. - -Here a non-normative example of ``presentation_definition``: - - -.. code-block:: JSON - - { - "presentation_definition": { - "id": "pid-sd-jwt:unique_id+given_name+family_name", - "input_descriptors": [ - { - "id": "eu.europa.ec.eudiw.pid.it.1", - "name": "Person Identification Data", - "purpose": "User authentication", - "format": "vc+sd-jwt", - "constraints": { - "fields": [ - { - "path": [ - "$.credentialSubject.unique_id", - "$.credentialSubject.given_name", - "$.credentialSubject.family_name", - ] - } - ], - "limit_discolusre": "preferred" - } - } - ] - } - } - - - -.. note:: - - The following parameters, even if defined in [OID4VP], are not mentioned in the previous non-normative example, since their usage is conditional and may change in future release of this documentation. - - - ``presentation_definition``: JSON object according to `Presentation Exchange `_. This parameter MUST not be present when ``presentation_definition_uri`` or ``scope`` are present. - - ``presentation_definition_uri``: string containing an HTTPS URL pointing to a resource where a Presentation Definition JSON object can be retrieved. This parameter MUST be present when ``presentation_definition parameter`` or a ``scope`` value representing a Presentation Definition is not present. - - ``client_metadata``: A JSON object containing the Verifier metadata values. The ``client_metadata`` parameter MUST NOT be present when ``client_id_scheme`` is ``entity_id``. The ``client_metadata`` is taken from ``trust_chain``. - - ``client_metadata_uri``: string containing an HTTPS URL pointing to a resource where a JSON object with the Verifier metadata can be retrieved. The ``client_metadata_uri`` parameter MUST NOT be present when ``client_id_scheme`` is ``entity_id``. - - ``redirect_uri``: the redirect URI to which the Wallet Instance MUST redirect the Authorization Response. This parameter MUST not be present when ``response_uri`` is present. - - -Authorization Response Details ------------------------------- -After getting the User authorization and consent for the presentation of the credentials, the Wallet sends the Authorization Response to the Relying Party ``response_uri`` endpoint, the content should be encrypted according `OPENID4VP`_ Section 6.3, using the Relying Party public key. - -.. note:: - **Why the response is encrypted?** - - The response sent from the Wallet Instance to the Relying Party is encrypted - to prevent a technique called `SSL split attack `_, that could be enabled by malicious app installed locally by Users,that intecepts the network traffic, or be present by-design in network environments where a next-generation firewalls or other security devices may reduce the privacy of the Users. - -Below a non-normative example of the request: - -.. code-block:: http - - POST /callback HTTP/1.1 - HOST: verifier.example.org - Content-Type: application/x-www-form-urlencoded - - response=eyJhbGciOiJFUzI1NiIs...9t2LQ - - -Below is a non-normative example of the decrypted JSON ``response`` content: - -.. code-block:: JSON - - { - "state": "3be39b69-6ac1-41aa-921b-3e6c07ddcb03", - "vp_token": "eyJhbGciOiJFUzI1NiIs...PT0iXX0", - "presentation_submission": { - "definition_id": "32f54163-7166-48f1-93d8-ff217bdb0653", - "id": "04a98be3-7fb0-4cf5-af9a-31579c8b0e7d", - "descriptor_map": [ - { - "id": "eu.europa.ec.eudiw.pid.it.1:unique_id", - "path": "$.vp_token.verified_claims.claims._sd[0]", - "format": "vc+sd-jwt" - }, - { - "id": "eu.europa.ec.eudiw.pid.it.1:given_name", - "path": "$.vp_token.verified_claims.claims._sd[1]", - "format": "vc+sd-jwt" - } - ] - } - } - -Where the following parameters are used: - -.. list-table:: - :widths: 25 50 - :header-rows: 1 - - * - **Name** - - **Description** - * - **vp_token** - - JWS containing a single (or an array) of Verifiable Presentation(s) in the form of JWS. - * - **presentation_submission** - - JSON Object contains mappings between the requested Verifiable Credentials and where to find them within the returned VP Token. - * - **state** - - Unique identifier provided by the Verifier inside the Authorization Request - - -Below is a non-normative example of the ``vp_token`` decoded content, represented in the form of JWS header and payload, separated by a period: - -.. code-block:: text - - { - "alg": "ES256", - "typ": "JWT", - "kid": "e0bbf2f1-8c3a-4eab-a8ac-2e8f34db8a47" - } - . - { - "iss": "https://wallet-provider.example.org/instance/vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c", - "jti": "3978344f-8596-4c3a-a978-8fcaba3903c5", - "aud": "https://verifier.example.org/callback", - "iat": 1541493724, - "exp": 1573029723, - "nonce": "n-0S6_WzA2Mj", - "vp": "~~~...~" - } - -Relying Party Entity Configuration ---------------------------------------------- -According to the `Trust Model`_ section, the Verifier is a Federation Entity and MUST expose a .well-known endpoint containing its Entity Configuration. - -Below a non-normative example of the request made by the Wallet Instance to the *openid-federation* .well-known endpoint to obtain the Relying Party Entity Configuration: - -.. code-block:: http - - GET /.well-known/openid-federation HTTP/1.1 - HOST: verifier.example.org - - -Below is a non-normative response example: - -.. code-block:: text - - { - "alg": "RS256", - "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs", - "typ": "entity-statement+jwt" - } - . - { - "exp": 1649590602, - "iat": 1649417862, - "iss": "https://rp.example.it", - "sub": "https://rp.example.it", - "jwks": { - "keys": [ - { - "kty": "RSA", - "n": "5s4qi …", - "e": "AQAB", - "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs" - } - ] - }, - "metadata": { - "wallet_relying_party": { - "application_type": "web", - "client_id": "https://rp.example.it", - "client_name": "Name of an example organization", - "jwks": { - "keys": [ - { - "kty": "RSA", - "use": "sig", - "n": "1Ta-sE …", - "e": "AQAB", - "kid": "YhNFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs", - "x5c": [ "..." ] - } - ] - }, - - "contacts": [ - "ops@verifier.example.org" - ], - - "request_uris": [ - "https://verifier.example.org/request_uri" - ], - "redirect_uris": [ - "https://verifier.example.org/callback" - ], - - "default_acr_values": [ - "https://www.spid.gov.it/SpidL2", - "https://www.spid.gov.it/SpidL3" - ], - - "vp_formats": { - "jwt_vp_json": { - "alg": [ - "EdDSA", - "ES256K" - ] - } - }, - "presentation_definitions": [ - { - "id": "pid-sd-jwt:unique_id+given_name+family_name", - "input_descriptors": [ - { - "id": "sd-jwt", - "format": { - "jwt": { - "alg": [ - "EdDSA", - "ES256" - ] - }, - "constraints": { - "limit_disclosure": "required", - "fields": [ - { - "path": [ - "$.sd-jwt.type" - ], - "filter": { - "type": "string", - "const": "PersonIdentificationData" - } - }, - { - "path": [ - "$.sd-jwt.cnf" - ], - "filter": { - "type": "object", - } - }, - { - "path": [ - "$.sd-jwt.family_name" - ], - "intent_to_retain": "true" - }, - { - "path": [ - "$.sd-jwt.given_name" - ], - "intent_to_retain": "true" - }, - { - "path": [ - "$.sd-jwt.unique_id" - ], - "intent_to_retain": "true" - } - ] - } - } - } - ] - }, - { - "id": "mDL-sample-req", - "input_descriptors": [ - { - "id": "mDL", - "format": { - "mso_mdoc": { - "alg": [ - "EdDSA", - "ES256" - ] - }, - "constraints": { - "limit_disclosure": "required", - "fields": [ - { - "path": [ - "$.mdoc.doctype" - ], - "filter": { - "type": "string", - "const": "org.iso.18013.5.1.mDL" - } - }, - { - "path": [ - "$.mdoc.namespace" - ], - "filter": { - "type": "string", - "const": "org.iso.18013.5.1" - } - }, - { - "path": [ - "$.mdoc.family_name" - ], - "intent_to_retain": "false" - }, - { - "path": [ - "$.mdoc.portrait" - ], - "intent_to_retain": "false" - }, - { - "path": [ - "$.mdoc.driving_privileges" - ], - "intent_to_retain": "false" - } - ] - } - } - } - ] - } - ], - - "default_max_age": 1111, - - // JARM related - "authorization_signed_response_alg": [[ - "RS256", - "ES256" - ], - "authorization_encrypted_response_alg": [ - "RSA-OAEP", - "RSA-OAEP-256" - ], - "authorization_encrypted_response_enc": [ - "A128CBC-HS256", - "A192CBC-HS384", - "A256CBC-HS512", - "A128GCM", - "A192GCM", - "A256GCM" - ], - - // SIOPv2 related - "subject_type": "pairwise", - "require_auth_time": true, - "id_token_signed_response_alg": [ - "RS256", - "ES256" - ], - "id_token_encrypted_response_alg": [ - "RSA-OAEP", - "RSA-OAEP-256" - ], - "id_token_encrypted_response_enc": [ - "A128CBC-HS256", - "A192CBC-HS384", - "A256CBC-HS512", - "A128GCM", - "A192GCM", - "A256GCM" - ], - }, - "federation_entity": { - "organization_name": "OpenID Wallet Verifier example", - "homepage_uri": "https://verifier.example.org/home", - "policy_uri": "https://verifier.example.org/policy", - "logo_uri": "https://verifier.example.org/static/logo.svg", - "contacts": [ - "tech@verifier.example.org" - ] - } - }, - "authority_hints": [ - "https://registry.eudi-wallet.example.it" - ] - } - } - - -The Entity Configuration is a JWS, where its header parameters are defined below: - -.. list-table:: - :widths: 25 50 - :header-rows: 1 - - * - **Name** - - **Description** - * - **alg** - - Algorithm used to sign the JWT - * - **typ** - - Media Type of the JWT - * - **kid** - - Key ID used identifying the key used to sign the JWS - -While each metadata specific parameter is defined below: - -.. list-table:: - :widths: 25 50 25 - :header-rows: 1 - - * - **Name** - - **Description** - - **Specs** - * - TBD - - TBD - - TBD - diff --git a/_sources/revocation-lists.rst.txt b/_sources/revocation-lists.rst.txt deleted file mode 100644 index 49cc7b174..000000000 --- a/_sources/revocation-lists.rst.txt +++ /dev/null @@ -1,57 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _revocation-lists.rst: - -revocation-lists.rst -+++++++++++++++++++++++++++ - -[What is it] - -[What it is usefull for] - -[Example] - -General Properties ------------------- - -[TODO] - - -Requirements ------------- - - - req 1 - - req 2 - - -Attributes ----------- - -[Table with parameters/attributes] - -.. list-table:: - :widths: 20 60 - :header-rows: 1 - - * - **Claim** - - **Description** - * - key - - value - - -Implementation considerations ------------------------------ - -TODO - - -Libraries and code snippets ---------------------------- - -TODO - - -External references -------------------- - -TODO diff --git a/_sources/ssi-introduction.rst.txt b/_sources/ssi-introduction.rst.txt deleted file mode 100644 index f456ca268..000000000 --- a/_sources/ssi-introduction.rst.txt +++ /dev/null @@ -1,42 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _ssi-introduction.rst: - -Self Sovereign Identity -+++++++++++++++++++++++ - -Introduction to SSI -------------------- - -**Definition** - -Self-Sovereign Identity (SSI) refers to a new paradigm in Identity and Access Management (IAM) that improves the privacy and grants complete control and ownership over the personal data by their owner, the citizens. -Users possess their digital documents and determine to which actors they present these documents, with the ability to revoke the use of said documents, all while maintaining a history of their activities. - -The main difference between this new approach and the traditional IAM infrastructure is that during the presentation phase there are no intermediates between the Wallet (Holder of the credentials) and the Relying Party, while in the SAML2 or OIDC based infrastructure an Identity Provider is always involved, knowing which services a citizen is accessing to. - -SSI is also significant in the field of data exchange and data governance. This is relevant at both national and European levels, including the new eIDAS Regulation. In fact, it envisions a login option designed for European Users - be they citizens, public administrations, or companies - who want to access another Member State's services using their national authentication systems. - -The main roles in an SSI ecosystem are are listed as follow: - - - Issuers: parties who can issue attributes or "credentials" about a person; - - Verifiers: parties who request Holders' attributes because they want to know something about them; - - Holders: individuals who own a Wallet and have control over the attributes they can acquire, store, and present to Verifiers; - - Verifiable Data Registries: Authorities that publish certificates, attestations, metadata, and schemes needed for trust establishment between the parties. - -**What it is useful for** - -In the SSI model, the data source (e.g., an educational institution) provides credentials to the User, who can store them in their digital Wallet. -A secure Self-Sovereign Identity Wallet is crucial, as it allows people to carry their credentials on their digital devices. The Wallet typically comes in the form of an application on the User's mobile phone. Portability is, therefore, one of the principles of SSI. - -Other key elements that characterize an SSI system include: - - **Privacy and control**: SSI enables individuals to maintain control over their personal data. They can choose what information to release, to whom, and for what purpose. This reduces the risk of personal data being collected, stored, or misused; - - **Security**: SSI leverages advanced cryptographic techniques to ensure the integrity and security of identity information. It avoids the risk of identity theft, fraud, and unauthorized access since the data remains under the individual's control and is not stored in a single vulnerable location; - - **Interoperability**: SSI promotes interoperability by enabling different systems and organizations to recognize and verify identities without relying on a central authority. This allows for seamless and trusted interactions between individuals, organizations, and even across borders; - - **Efficiency and cost reduction**: individuals can manage their own identities with SSI, eliminating the need for multiple identity credentials and repetitive identity verification processes. This can streamline administrative procedures, reduce costs, and enhance the user experience. - -**Example** - -When a User wants to purchase a good or access to a service, the service provider asks the User for specific proof. Instead of presenting physical identification documents or disclosing their full data, the individual can use their SSI system. -An example of SSI in action could be a scenario where an individual needs to prove their age to access a restricted service, such as purchasing age-restricted items. They would release only the necessary information, such as a digitally signed proof of being above the legal age, without revealing any other personal details. The verifier can then cryptographically validate the proof. - diff --git a/_sources/standards.rst.txt b/_sources/standards.rst.txt deleted file mode 100644 index 924e882fc..000000000 --- a/_sources/standards.rst.txt +++ /dev/null @@ -1,8 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _standards.rst: - -Standards -+++++++++ - -TODO diff --git a/_sources/trust.rst.txt b/_sources/trust.rst.txt deleted file mode 100644 index 8fa149c8c..000000000 --- a/_sources/trust.rst.txt +++ /dev/null @@ -1,640 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _trust.rst: - -The Infrastructure of Trust -+++++++++++++++++++++++++++ - -The EUDI Wallet Architecture Reference Framework (`EIDAS-ARF`_) defines the Trust Model as a *"collection of rules that ensure the legitimacy of the components and the entities involved in the EUDI Wallet ecosystem."*. - -This section defines how the Trust Model is implemented in an infrastructure of Trust in fully compliace with OpenID Connect Federation 1.0 `OIDC-FED`_, where its Federation API is used for the distribution of metadata, metadata policies, trust marks, public keys, X.509 certificates, and the revocation status of the participants (Federation Entities). - -The infrastructure of Trust enables the trust assessment mechanism to be applied between the parties defined in the `EIDAS-ARF`_. - -.. figure:: ../../images/trust-roles.svg - :alt: federation portrait - :width: 100% - - The roles of the Federation infrastructure, where a Trust Anchor has as subordinates - one or more Intermediates and Leafs and where Intermediates has Leafs as subordinates. In this - representation both Trust Anchor and Intermediates play the role of an Accreditation Body. - - -Federation Roles ------------------- - -All the participants are Federation Entities that must be accredited by an Accreditation Body, -except the Wallet Instances which are personal devices and are certified by their Wallet Provider. - -.. note:: - The Wallet Instance, as a personal device, is certified as trusted through a verifiable attestation issued and signed by its Wallet Provider. - - This is called *Wallet Instance Attestation* and is documented in `the dedicated section `_. - - -Therein a table with the summary of the Federation Entity roles mapped on the corresponding EUDI roles, as defined in the `EIDAS-ARF`_. - -+-----------------------------------------+----------------+-----------------------------------+ -| EUDI Role | Federation Role| Notes | -+=========================================+================+===================================+ -| Public Key Infrastructure (PKI) | Trust Anchor | The Federation has PKI | -| | Intermediates | capabilities and the | -| | | Entity that configures | -| | | the entire infrastructure | -| | | is the Trust Anchor. | -| | | | -+-----------------------------------------+----------------+-----------------------------------+ -| Qualified Trust Service Provider (QTSP)| Leaf | | -+-----------------------------------------+----------------+-----------------------------------+ -| Person Identification Data Provider | Leaf | | -+-----------------------------------------+----------------+-----------------------------------+ -| Qualified Electronic Attestations | Leaf | | -| of Attributes Provider | | | -+-----------------------------------------+----------------+-----------------------------------+ -| Electronic Attestations of | Leaf | | -| Attributes Provider | | | -+-----------------------------------------+----------------+-----------------------------------+ -| Relying Party | Leaf | | -+-----------------------------------------+----------------+-----------------------------------+ -| Trust Service Provider (TSP) | Leaf | | -+-----------------------------------------+----------------+-----------------------------------+ -| Trusted List | Trust Anchor | The listing endpoint, the | -| | Intermediates | trust mark status endpoint | -| | | and the fetch endpoint must | -| | | be exposed by both Trust Anchors | -| | | and their Intermediates, making | -| | | the Trusted List distributed | -| | | over multiple Federation Entities,| -| | | where each of these is responsible| -| | | for their accredited subordinates.| -| | | | -+-----------------------------------------+----------------+-----------------------------------+ -| EUDI Wallet Provider | Leaf | | -+-----------------------------------------+----------------+-----------------------------------+ - - -General Properties ------------------- - -OpenID Federation facilitates the building of an infrastructure that is: - -- **Secure and Tamper-proof**, entities' attestations of metadata and keys are cryptographically signed in the chain of trust, comprised of attestations issued by multiple parties that cannot be forged or tampered with by an adversary; -- **Privacy-preserving**, the infrastructure is public and exposes public data such as public keys and metadata of the participants. It does not require authentication of the requesters and therefore does not track who is assessing trust against whom; -- **Guarantor of the non-repudiation of long-lived attestations**, historical keys endpoints and historical Trust Chains are saved for years according to data retention policies. This enables the certification of the validity of historical compliance, even in cases of revocation, expiration, or rotation of the keys used for signature verification; -- **Dynamic and flexible**, allowing any participant to modify parts of their metadata autonomously, as these are published within their domains and verified through the Trust Chain. Simultaneously, the Trust Anchor or its Intermediate may publish a metadata policy to dynamically modify the metadata of all participants—such as disabling a vulnerable signature algorithm—and obtain certainty of propagation within a configured period of time to all participants; -- **Efficient**, as JWT and JSON formats have been adopted on the web for years. They are cost-effective in terms of storage and processing and have a wide range of solutions available, such as libraries and software development kits, which enable rapid implementation of the solution; -- **Scalable**, the Trust Model can accommodate more than a single organization by using Intermediates. - -Trust Model Requirements ------------------------- - -In the table below there’s the map of the components that the ARF defines within the Trust Model and their coverage in `OIDC-FED`_. - -+----------------------------------------------------+--------------+----------------+ -| Component | Satisfied | how | -+====================================================+==============+================+ -| Issuers identification | |check-icon| | Trust Chain | -+----------------------------------------------------+--------------+----------------+ -| Issuers registration | |check-icon| | Trust Anchor | -| | | | -| | | Intermediate | -| | | OnBoarding | -| | | systems | -| | | | -+----------------------------------------------------+--------------+----------------+ -| Recognised data models and schemas | |check-icon| | Entity | -| | | Configuration | -| | | | -| | | | -| | | | -| | | Entity | -| | | Statements | -+----------------------------------------------------+--------------+----------------+ -| Relying Parties’ registration and authentication | |check-icon| | static | -| | | Trust Chains | -| | | | -| | | | -| | | | -| | | Federation | -| | | Entity | -| | | Discovery | -+----------------------------------------------------+--------------+----------------+ -| Trust mechanisms in a cross-domain scenario | |check-icon| | static | -| | | Trust Chains | -| | | | -| | | | -| | | | -| | | Federation | -| | | Entity | -| | | Discovery | -+----------------------------------------------------+--------------+----------------+ - - -Federation API endpoints ------------------------- - -OpenID Connect Federation is similar to a PKI in that it uses RESTful Web Services secured over -HTTPs. OpenID Connect Federation defines which are the web endpoints that the participants make -publicly available. The table below summarises the endpoints and their scopes. - -All the endpoints listed below are defined in the `OIDC-FED`_ specs. - -+---------------------------+----------------------------------------------+--------------------------------+-----------------+ -| endpoint name | http request | scope | required for | -+===========================+==============================================+================================+=================+ -| | | | Trust Anchor | -| | | | | -| federation metadata | **GET** .well-known/openid-federation |Metadata that an Entity | Intermediate | -| | |publishes about itself, | | -| | |verifiable with a trusted third | Wallet Provider| -| | |party (Superior Entity). It’s | | -| | |called Entity Configuration. | Relying Party | -| | | | | -| | | | | -+---------------------------+----------------------------------------------+--------------------------------+-----------------+ -| subordinate list endpoint | **GET** /list |Lists the Subordinates. | Trust Anchor | -| | | | | -| | | | Intermediate | -+---------------------------+----------------------------------------------+--------------------------------+-----------------+ -| fetch endpoint | **GET** /fetch?sub=https://rp.example.org | | Trust Anchor | -| | |Returns a document (JWS) | | -| | |about a specific subject, its | Intermediate | -| | |Subordinate. It’s called Entity | | -| | |Statement. | | -+---------------------------+----------------------------------------------+--------------------------------+-----------------+ -| trust mark status | **POST** /status?sub=...&trust_mark_id=... | | Trust Anchor | -| | |Returns the status of the | | -| | |issuance (validity) of a Trust | Intermediate | -| | |Mark related to a specific | | -| | |subject. | | -+---------------------------+----------------------------------------------+--------------------------------+-----------------+ -| historical keys | **GET** | | Trust Anchor | -| | |Lists its expired and revoked | | -| | |keys, with the motivation of the| Intermediate | -| | .well-known/openid-federation-historical-jwks|revocation. | | -| | | | | -+---------------------------+----------------------------------------------+--------------------------------+-----------------+ - -All the responses of the Federation endpoints are in the form of a JWS, with the exception of the **Subordinate Listing endpoint** and the **Trust Mark Status endpoint** that are served as plain JSON by default, however these may be signed if required. - - -Configuration of the Federation -------------------------------- - -The configuration of the Federation is published by the Trust Anchor within its Entity Configuration, available at a well-known web path corresponding to **.well-known/openid-federation**. - -All entities MUST obtain the Federation configuration before entering the operational phase, and they -MUST keep it up-to-date. The Federation configuration contains the Trust Anchor -public keys for signature operations and the maximum number of Intermediates allowed between a Leaf and the Trust Anchor (**max_path_length**). - -Below is a non-normative example of a Trust Anchor Entity Configuration, where each parameter is documented in the `OpenID Connect Federation `_ specifications, Section 3.1 for the Federation statements and Section 4 for the Metadata identifiers: - -.. code-block:: text - - { - "alg": "ES256", - "kid": "FifYx03bnosD8m6gYQIfNHNP9cM_Sam9Tc5nLloIIrc", - "typ": "entity-statement+jwt" - } - . - { - "exp": 1649375259, - "iat": 1649373279, - "iss": "https://registry.eidas.trust-anchor.example.eu/", - "sub": "https://registry.eidas.trust-anchor.example.eu/", - "jwks": { - "keys": [ - { - "kty": "RSA", - "n": "3i5vV-_ …", - "e": "AQAB", - "kid": "FifYx03bnosD8m6gYQIfNHNP9cM_Sam9Tc5nLloIIrc", - "x5c": [ ] - }, - { - "kty": "EC", - "kid": "X2ZOMHNGSDc4ZlBrcXhMT3MzRmRZOG9Jd3o2QjZDam51cUhhUFRuOWd0WQ", - "crv": "P-256", - "x": "1kNR9Ar3MzMokYTY8BRvRIue85NIXrYX4XD3K4JW7vI", - "y": "slT14644zbYXYF-xmw7aPdlbMuw3T1URwI4nafMtKrY", - "x5c": [ ] - } - ] - }, - "metadata": { - "federation_entity": { - "organization_name": "example TA", - "contacts":[ - "tech@eidas.trust-anchor.example.eu" - ], - "homepage_uri": "https://registry.eidas.trust-anchor.example.eu/", - "logo_uri":"https://registry.eidas.trust-anchor.example.eu/static/svg/logo.svg", - "federation_fetch_endpoint": "https://registry.eidas.trust-anchor.example.eu/fetch/", - "federation_resolve_endpoint": "https://registry.eidas.trust-anchor.example.eu/resolve/", - "federation_list_endpoint": "https://registry.eidas.trust-anchor.example.eu/list/", - "federation_trust_mark_status_endpoint": "https://registry.eidas.trust-anchor.example.eu/trust_mark_status/" - } - }, - "trust_marks_issuers": { - "https://registry.eidas.trust-anchor.example.eu/openid_relying_party/public/": [ - "https://registry.spid.eidas.trust-anchor.example.eu/", - "https://public.intermediary.spid.org/" - ], - "https://registry.eidas.trust-anchor.example.eu/openid_relying_party/private/": [ - "https://registry.spid.eidas.trust-anchor.example.eu/", - "https://private.other.intermediary.org/" - ] - }, - "constraints": { - "max_path_length": 1 - } - } - - -Entity Configuration --------------------- - -The Entity Configuration is the verifiable document that each Federation Entity must publish on its own behalf. -The Entity Configuration must be cryptographically signed. The public part of this key must be present in the -Entity Configuration and within the Entity Statement issued by a immediate superior concerning the Federation Entity. - -The Entity Configuration may also contain one or more Trust Marks. - -.. note:: - **Entity Configuration Signature** - - All the signature-check operations regarding the Entity Configurations, Entity Statements and Trust Marks, are carried out with the Federation public keys. For the supported algorithms refer to Section `Cryptografic Algorithm`. - -Entity Configurations Common Parameters -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The Entity Configurations of all the participants have in common the parameters listed below. - - -.. list-table:: - :widths: 20 60 - :header-rows: 1 - - * - **Claim** - - **Description** - * - **iss** - - String. Identifier of the issuing Entity. - * - **sub** - - String. Identifier of the Entity to which it is referred. - * - **iat** - - UNIX Timestamp with the time of generation of the JWT, coded as NumericDate as indicated at :rfc:`7519` - * - **exp** - - UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated at :rfc:`7519`. - * - **jwks** - - A JSON Web Key Set (JWKS) :rfc:`7517` that represents the public part of the signing keys of the Entity at issue. Each JWK in the JWK set MUST have a key ID (claim kid) and MAY have a `x5c` parameter, as defined in :rfc:`7517`. - * - **metadata** - - JSON Object. Each key of the JSON Object represents a metadata type identifier - containing JSON Object representing the Metadata, according to the Metadata - schema of that type. An Entity Configuration MAY contain more Metadata statements, but only one for each type of - Metadata (<**entity_type**>). the metadata types are defined in the section `Metadata Types `_. - -.. note:: - Inside the Entity Configuration the claims **iss** e **sub** contain the same value (URL). - -Entity Configuration Trust Anchor -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The Trust Anchor Entity Configuration, in addition of the common parameters listed above, also contains the followings parameters: - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Required** - * - **constraints** - - JSON Object that describes the Trust Chain bounds and MUST contain the attribute **max_path_length**. - It represents the maximum number of Intermediate between a Leaf and the Trust Anchor. - - |check-icon| - * - **trust_mark_issuers** - - JSON Array that indicates which Federation authorities are considered trustworthy - for issuing specific Trust Marks, assigned with their unique identifiers. - - |uncheck-icon| - * - **trust_mark_owners** - - JSON Array that lists which entities are considered to be the owners of - specific Trust Marks. - - |uncheck-icon| - - -Entity Configuration Leaves and Intermediates -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -In addition to the previously defined claims, the Entity Configuration of the Leaf and the Intermediate Entities, contain also the parameters listed below: - - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Required** - * - **authority_hints** - - Array of URLs (String). It contains a list of URLs of the immediate superior Entities, such as the Trust Anchor or - an Intermediate, that MAY issue an Entity Statement related to this subject. - - |check-icon| - * - **trust_marks** - - A JSON Array containing the Trust Marks. - - |uncheck-icon| - -Metadata Types -^^^^^^^^^^^^^^^^ - -In this section are defined the main metadata types mapped to the roles of the ecosystem, -giving the references of the metadata protocol for each of these. - - -.. note:: - - The entities that doesn't have any references to a known draft or standard are intended to be defined in this technical reference. - -+------------------+-----------------------------+--------------+ -| Entity | metadata type | references | -+==================+=============================+==============+ -| Trust Anchor | ``federation_entity`` | `OIDC-FED`_ | -+------------------+-----------------------------+--------------+ -| Intermediate | ``federation_entity`` | `OIDC-FED`_ | -+------------------+-----------------------------+--------------+ -| | | | -| Wallet Provider | ``federation_entity`` | -- | -| | | | -| | ``wallet_provider`` | | -| | | | -| | | | -+------------------+-----------------------------+--------------+ -| | | | -| Credential Issuer| ``federation_entity`` | | -| | | | -| | ``openid_credential_issuer``| `OPENID4VCI`_| -+------------------+-----------------------------+--------------+ -| | | | -| Relying Party | ``federation_entity`` | | -| | | | -| | ``wallet_relying_party`` | `OIDC-FED`_ | -| | | | -| | | `OpenID4VP`_ | -+------------------+-----------------------------+--------------+ - -.. note:: - Wallet Provider metadata is defined in the section below. - - `Wallet Solution section `_. - -Entity Statements ------------------ - -Trust Anchors and Intermediates publish an Entity Statement related to a Subordinate. -The Entity Statement MAY contain a metadata policy and the Trust Marks related to a Subordinate. - -The metadata policy, when applied, makes one or more changes to the final metadata of the Leaf. The final metadata of a Leaf is derived from the Trust Chain that contains all the statements, starting from the Entity Configuration up to the Trust Anchor. - -Trust Anchors and Intermediates must expose the Federation Fetch endpoint, where the Entity Statements are requested to validate the Leaf's Entity Configurations signature. - -.. note:: - The Federation Fetch endpoint may also issue X.509 certificates for each of the public keys of the Subordinate. Making the issuance of the X.509 certificates completely automatic. - -Below there is a non-normative example of an Entity Statement issued by an Accreditation Body (such as the Trust Anchor or its Intermediate) in relation to one of its Subordinates. - -.. code-block:: text - - { - "alg": "RS256", - "kid": "em3cmnZgHIYFsQ090N6B3Op7LAAqj8rghMhxGmJstqg", - "typ": "entity-statement+jwt" - } - . - { - "exp": 1649623546, - "iat": 1649450746, - "iss": "https://intermediate.eidas.example.org", - "sub": "https://rp.example.it", - "jwks": { - "keys": [ - { - "kty": "EC", - "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs", - "crv": "P-256", - "x": "1kNR9Ar3MzMokYTY8BRvRIue85NIXrYX4XD3K4JW7vI", - "y": "slT14644zbYXYF-xmw7aPdlbMuw3T1URwI4nafMtKrY", - "x5c": [ ] - } - ] - }, - "metadata_policy": { - "openid_relying_party": { - "scope": { - "subset_of": [ - "eu.europa.ec.eudiw.pid.1", - "eu.europa.ec.eudiw.pid.1:given_name", - "email" - ] - }, - "request_authentication_methods_supported": { - "one_of": ["request_object"] - }, - "request_authentication_signing_alg_values_supported": { - "subset_of": ["RS256", "RS512", "ES256", "ES512", "PS256", "PS512"] - } - }, - "client": { - "vp_formats": { - "jwt_vp": { - "alg": - "subset_of": [ - "EdDSA", - "ES256K" - ] - } - } - } - } - } - } - - -.. note:: - - **Entity Statement Signature** - - The same considerations and requirements made for the Entity Configuration must be applied for the Entity Statements. - - -Entity Statement -^^^^^^^^^^^^^^^^^^ - -The Entity Statement issued by Trust Anchors and Intermediates contain the following attributes: - - -.. list-table:: - :widths: 20 60 20 - :header-rows: 1 - - * - **Claim** - - **Description** - - **Required** - * - **iss** - - See `OIDC-FED`_ Section 3.1 for further details. - - |check-icon| - * - **sub** - - See `OIDC-FED`_ Section 3.1 for further details. - - |check-icon| - * - **iat** - - See `OIDC-FED`_ Section 3.1 for further details. - - |check-icon| - * - **exp** - - See `OIDC-FED`_ Section 3.1 for further details. - - |check-icon| - * - **jwks** - - Federation JWKS of the *sub* entity. See `OIDC-FED`_ Section 3.1 for further details. - - |check-icon| - * - **metadata_policy** - - JSON Object that describes the Metadata policy. Each key of the JSON Object represents an identifier of the type of Metadata and each value MUST be a JSON Object that represents the Metadata policy according to that Metadata type. Please refer to the `OIDC-FED`_ specifications, Section-5.1, for the implementation details. - - |uncheck-icon| - * - **trust_marks** - - JSON Array containing the Trust Marks issued by itself for the subordinate subject. - - |uncheck-icon| - * - **constraints** - - It MAY contain the **allowed_leaf_entity_types**, that restricts what types of metadata a subject is allowed to publish. - - |check-icon| - - -Trust Evaluation Mechanism --------------------------- - -The Trust Anchor publishes the list of its Intermediates (Federation Subordinate Listing endpoint) and the attestations of their metadata and public keys (Entity Statements). - -Each participant, including Trust Anchor, Intermediate, Credential Issuer, Wallet Provider, and Relying Party, publishes its own metadata and public keys (Entity Configuration endpoint) on the well-known web resource **.well-known/openid-federation**. - -Each of these can be verified using the Entity Statement issued by a superior, Trust Anchor, or Intermediate. - -Each Entity Statement is verifiable over time and has an expiration date. The revocation of each statement is verifiable in real time and online (only for remote flows) through the federation endpoints. - -.. note:: - The revocation of an Entity is made with the unavailability of the Entity Statement related to it. If the Trust Anchor or its Intermediates doesn't publish a valid Entity Statement, or if they publish an expired/invalid Entity Statement, the subject of the Entity Statement must be intended as not valid or revoked. - -The concatenation of the statements, through the combination of these signing mechanisms and the binding of claims and public keys, creates the Trust Chain. - -The Trust Chains can also be verified offline, using only the Trust Anchor's public keys. - -.. note:: - Since the Wallet Instance is not a Federation Entity, the Trust Evaluation Mechanism related to **it requires the presentation of the Wallet Instance Attestation during the credential issuance and presentation phases**. - - The Wallet Instance Attestation conveys all the required information pertaining to the instance, such as its public key and any other technical or administrative information, without any User's personal data. - - -Relying Party Attestation -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The Relying Party is accredited by a Trust Anchor or its Intermediate and obtains a Trust Mark to be included in its Entity Configuration. In its Entity Configuration the Relying Party publishes its specific metadata, including signature and encryption algorithms and any other necessary information for the interoperability requirements. - -Any requests for user attributes, such as PID or (Q)EAA, from the Relying Party to Wallet Instances are signed and contain the verifiable Trust Chain regarding the Relying Party. - -The Wallet Instance verifies that the Trust Chain related to the Relying Party is still active, proving that the Relying Party is still part of the Federation and not revoked. - -The Trust Chain should be contained within the signed request in the form of a JWS header parameter. - -In offline flows, Trust Chain verification enables the assessment of the reliability of Trust Marks and Attestations contained within. - - -Wallet Instance Attestation -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The Wallet Provider issues a Wallet Instance Attestation, certifying the operational status of its Wallet Instances, including one or more of their public keys. - -The Wallet Instance Attestation contains the Trust Chain that attests to the required public key's validity for itself and its issuer (Wallet Provider). - -The Wallet Instance presents its Wallet Instance Attestation within the signed request during the PID issuance phase, containing the Trust Chain related to the Wallet Provider. The PID Provider issues a PID for each public key contained in the Wallet Instance Attestation, producing the Holder key Binding within the issued PID. - -Trust Chain -^^^^^^^^^^^^^^^ - -The Trust Chain is a sequence of verified statements that validates a participant's compliance with the eIDAS Federation. It has an expiration date, beyond which it should be renewed to obtain updated metadata. The expiration date of the Trust Chain is determined by the earliest expiration date among all the expiration dates contained in the statements. No Entity can force the expiration date of the Trust Chain to be higher than the one configured by the Trust Anchor. - -Below is an abstract representation of a Trust Chain. - -.. code-block:: python - - [ - "EntityConfiguration-as-SignedJWT-selfissued-byLeaf", - "EntityStatement-as-SignedJWT-issued-byTrustAnchor" - ] - -Below is a non-normative example of a Trust Chain in its original format (JSON Array containing JWS as strings) with an Intermediate involved. - -.. code-block:: python - - [ - "eyJhbGciOiJFUzI1NiIsImtpZCI6ImVEUkNOSGhWYXpWd01VRlpjMVU0UlRremMxSjRNMGRVYUU4MWVVWk5VMVUyWkdSM1lqRmZTV2h1UVEiLCJ0eXAiOiJhcHBsaWNhdGlvbi9lbnRpdHktc3RhdGVtZW50K2p3dCJ9.eyJleHAiOjE2NDk1OTA2MDIsImlhdCI6MTY0OTQxNzg2MiwiaXNzIjoiaHR0cHM6Ly9ycC5leGFtcGxlLm9yZyIsInN1YiI6Imh0dHBzOi8vcnAuZXhhbXBsZS5vcmciLCJqd2tzIjp7ImtleXMiOlt7Imt0eSI6IkVDIiwia2lkIjoiZURSQ05IaFZhelZ3TVVGWmMxVTRSVGt6YzFKNE0wZFVhRTgxZVVaTlUxVTJaR1IzWWpGZlNXaHVRUSIsImNydiI6IlAtMjU2IiwieCI6Ik1wVlVHeUhlOGhQVHh5dklZRFd2NnJpZHN5aDFDUFB2TG94ZU0wUWhaN3ciLCJ5IjoidF95ZlBRd1Z1am5oS25fNVZnT05WcW93UzJvZGZwVWxfWnNvV1UzTDRHTSJ9XX0sIm1ldGFkYXRhIjp7Im9wZW5pZF9yZWx5aW5nX3BhcnR5Ijp7ImFwcGxpY2F0aW9uX3R5cGUiOiJ3ZWIiLCJjbGllbnRfaWQiOiJodHRwczovL3JwLmV4YW1wbGUub3JnLyIsImNsaWVudF9yZWdpc3RyYXRpb25fdHlwZXMiOlsiYXV0b21hdGljIl0sImp3a3MiOnsia2V5cyI6W3sia3R5IjoiRUMiLCJraWQiOiJlRFJDTkhoVmF6VndNVUZaYzFVNFJUa3pjMUo0TTBkVWFFODFlVVpOVTFVMlpHUjNZakZmU1dodVFRIiwiY3J2IjoiUC0yNTYiLCJ4IjoiTXBWVUd5SGU4aFBUeHl2SVlEV3Y2cmlkc3loMUNQUHZMb3hlTTBRaFo3dyIsInkiOiJ0X3lmUFF3VnVqbmhLbl81VmdPTlZxb3dTMm9kZnBVbF9ac29XVTNMNEdNIn1dfSwiY2xpZW50X25hbWUiOiJOYW1lIG9mIGFuIGV4YW1wbGUgb3JnYW5pemF0aW9uIiwiY29udGFjdHMiOlsib3BzQHJwLmV4YW1wbGUuaXQiXSwiZ3JhbnRfdHlwZXMiOlsicmVmcmVzaF90b2tlbiIsImF1dGhvcml6YXRpb25fY29kZSJdLCJyZWRpcmVjdF91cmlzIjpbImh0dHBzOi8vcnAuZXhhbXBsZS5vcmcvb2lkYy9ycC9jYWxsYmFjay8iXSwicmVzcG9uc2VfdHlwZXMiOlsiY29kZSJdLCJzY29wZXMiOiJldS5ldXJvcGEuZWMuZXVkaXcucGlkLjEgZXUuZXVyb3BhLmVjLmV1ZGl3LnBpZC5pdC4xIGVtYWlsIiwic3ViamVjdF90eXBlIjoicGFpcndpc2UifSwiZmVkZXJhdGlvbl9lbnRpdHkiOnsiZmVkZXJhdGlvbl9yZXNvbHZlX2VuZHBvaW50IjoiaHR0cHM6Ly9ycC5leGFtcGxlLm9yZy9yZXNvbHZlLyIsIm9yZ2FuaXphdGlvbl9uYW1lIjoiRXhhbXBsZSBSUCIsImhvbWVwYWdlX3VyaSI6Imh0dHBzOi8vcnAuZXhhbXBsZS5pdCIsInBvbGljeV91cmkiOiJodHRwczovL3JwLmV4YW1wbGUuaXQvcG9saWN5IiwibG9nb191cmkiOiJodHRwczovL3JwLmV4YW1wbGUuaXQvc3RhdGljL2xvZ28uc3ZnIiwiY29udGFjdHMiOlsidGVjaEBleGFtcGxlLml0Il19fSwidHJ1c3RfbWFya3MiOlt7ImlkIjoiaHR0cHM6Ly9yZWdpc3RyeS5laWRhcy50cnVzdC1hbmNob3IuZXhhbXBsZS5ldS9vcGVuaWRfcmVseWluZ19wYXJ0eS9wdWJsaWMvIiwidHJ1c3RfbWFyayI6ImV5SmggXHUyMDI2In1dLCJhdXRob3JpdHlfaGludHMiOlsiaHR0cHM6Ly9pbnRlcm1lZGlhdGUuZWlkYXMuZXhhbXBsZS5vcmciXX0.dIRBRyfEsmi_6oGrJAHaYUPCtXSvBZBMdokVZtjyYgzMKEP6eSLixa8nUU9BWBWP_ELNgdKbPquSbWIGx66D5w", - "eyJhbGciOiJFUzI1NiIsImtpZCI6IlFWUnVXSE5FWTJzMFdHNW5hSHB3VjJKVGRtd3hiRUpVY2pCdk9FeHNWMFExT0dnMFZWQnhhbTUyT0EiLCJ0eXAiOiJhcHBsaWNhdGlvbi9lbnRpdHktc3RhdGVtZW50K2p3dCJ9.eyJleHAiOjE2NDk2MjM1NDYsImlhdCI6MTY0OTQ1MDc0NiwiaXNzIjoiaHR0cHM6Ly9pbnRlcm1lZGlhdGUuZWlkYXMuZXhhbXBsZS5vcmciLCJzdWIiOiJodHRwczovL3JwLmV4YW1wbGUub3JnIiwiandrcyI6eyJrZXlzIjpbeyJrdHkiOiJFQyIsImtpZCI6ImVEUkNOSGhWYXpWd01VRlpjMVU0UlRremMxSjRNMGRVYUU4MWVVWk5VMVUyWkdSM1lqRmZTV2h1UVEiLCJjcnYiOiJQLTI1NiIsIngiOiJNcFZVR3lIZThoUFR4eXZJWURXdjZyaWRzeWgxQ1BQdkxveGVNMFFoWjd3IiwieSI6InRfeWZQUXdWdWpuaEtuXzVWZ09OVnFvd1Myb2RmcFVsX1pzb1dVM0w0R00ifV19LCJtZXRhZGF0YV9wb2xpY3kiOnsib3BlbmlkX3JlbHlpbmdfcGFydHkiOnsic2NvcGVzIjp7InN1YnNldF9vZiI6WyJldS5ldXJvcGEuZWMuZXVkaXcucGlkLjEsICBldS5ldXJvcGEuZWMuZXVkaXcucGlkLml0LjEiXX0sInJlcXVlc3RfYXV0aGVudGljYXRpb25fbWV0aG9kc19zdXBwb3J0ZWQiOnsib25lX29mIjpbInJlcXVlc3Rfb2JqZWN0Il19LCJyZXF1ZXN0X2F1dGhlbnRpY2F0aW9uX3NpZ25pbmdfYWxnX3ZhbHVlc19zdXBwb3J0ZWQiOnsic3Vic2V0X29mIjpbIlJTMjU2IiwiUlM1MTIiLCJFUzI1NiIsIkVTNTEyIiwiUFMyNTYiLCJQUzUxMiJdfX19LCJ0cnVzdF9tYXJrcyI6W3siaWQiOiJodHRwczovL3RydXN0LWFuY2hvci5leGFtcGxlLmV1L29wZW5pZF9yZWx5aW5nX3BhcnR5L3B1YmxpYy8iLCJ0cnVzdF9tYXJrIjoiZXlKaGIgXHUyMDI2In1dfQ.rIgdHa7CoaP3SO3ZNsjDWt7-8Tea41An3YBw-qaWFNdQMUzcTqRwcD4vtX6TZEEoRO3KEu8bJeaKlikHRHzoBg", - "eyJhbGciOiJFUzI1NiIsImtpZCI6ImVVRldSakJKYlhVeU5TMHRhV1JrYlhCMWVURlBjazV6UzBGRVFTMWFNVFpEYTNOWk1WUktURTR5Y3ciLCJ0eXAiOiJhcHBsaWNhdGlvbi9lbnRpdHktc3RhdGVtZW50K2p3dCJ9.eyJleHAiOjE2NDk2MjM1NDYsImlhdCI6MTY0OTQ1MDc0NiwiaXNzIjoiaHR0cHM6Ly90cnVzdC1hbmNob3IuZXhhbXBsZS5ldSIsInN1YiI6Imh0dHBzOi8vaW50ZXJtZWRpYXRlLmVpZGFzLmV4YW1wbGUub3JnIiwiandrcyI6eyJrZXlzIjpbeyJrdHkiOiJFQyIsImtpZCI6IlFWUnVXSE5FWTJzMFdHNW5hSHB3VjJKVGRtd3hiRUpVY2pCdk9FeHNWMFExT0dnMFZWQnhhbTUyT0EiLCJjcnYiOiJQLTI1NiIsIngiOiJCR1VOOXN6ZG0xT1RxVWhUQ3JkcWRmQjhtTUJqb2JCYk5Nd2JxZnd4c3pZIiwieSI6IkdnMUhCNGVJRWJhQjA4NEJiUW5QX0lseFJZYTNhVVRHSTF0aW5qTmVSdmMifV19LCJ0cnVzdF9tYXJrcyI6W3siaWQiOiJodHRwczovL3RydXN0LWFuY2hvci5leGFtcGxlLmV1L2ZlZGVyYXRpb25fZW50aXR5L3RoYXQtcHJvZmlsZSIsInRydXN0X21hcmsiOiJleUpoYiBcdTIwMjYifV19.KR2oBDMfqLGCZ2ZqN0FgOP7cWsW4ClxBaj4-j_c3HC-YEecK6SLlNk00bGqoEe2NCMy2lqk9dYQO1IauB_ZG7A" - ] - -.. note:: - - The entire Trust Chain is verifiable by possessing only the Trust Anchor’s public key. - - -Offline Trust Attestation Mechanisms -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -In this section, we describe the implementation requirements to enable -offline trust evaluation mechanisms. - -.. note:: - The offline flows do not allow for real-time evaluation of an Entity's status, such as its revocation. At the same time, using short-lived Trust Chains enables the attainment of trust attestations compatible with the required revocation administrative protocols (e.g., a revocation must be propagated in less than 24 hours, thus the Trust Chain must not be valid for more than that period). - - -Offline EUDI Wallet Trust Attestation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Given that a mobile device should not publish its metadata online at the *.well-known/openid-federation* endpoint, or in any other way, it is not mandatory for the Wallet Instance to publish its metadata if the User does not want this. As a result, the Wallet Instance does not need to publish its federation metadata online. - -However, the Wallet Instance should obtain a Wallet Attestation Instance issued by its Wallet Provider, which should contain a Trust Chain related to its issuer (Wallet Provider). - -Offline Relying Party Metadata -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Since the Federation Entity Discovery is only applicable in online scenarios, it is possible to include the Trust Chain in the presentation requests that a Relying Party may issue for a Wallet Instance. - -The Relying Party must sign the presentation request, which should include the `trust_chain` claim in its header parameter, containing the Federation Trust Chain related to itself. - -The Wallet Instance that verifies the request issued by the Relying Party can then use the Trust Anchor public keys to validate the entire Trust Chain related to the Relying Party and attest to its reliability. - -Furthermore, the Wallet Instance applies the metadata policy, if available, to filter out any User attributes not attested in the Relying Party metadata, as derived from the Trust Chain made available in the Relying Party's signed request. - -Non-repudiability of the Long Lived Attestations --------------------------------------------------- - -The Trust Anchor and its Intermediate MUST expose the Historical keys endpoint, where are published all the public keys that are no longer used, whether expired or revoked. - -The details of this endpoint are defined in the `OIDC-FED`_ Section 7.6. - -Each JWS containing a Trust Chain in the form of a JWS header parameter can be verified over time, since the entire Trust Chain is verifiable using the Trust Anchor's public key. - -Even if the Trust Anchor has changed its cryptographic keys for digital signature, the historical keys endpoint always makes the keys no longer used available for historical signature verifications. - - -Privacy Considerations ----------------------- - -- Wallet Instances do not publish their metadata through an online service. -- The trust infrastructure is public, with all endpoints publicly accessible without any client credentials that may disclose who is requesting access. -- When a Wallet Instance requests the Entity Statements to build the Trust Chain for a specific Relying Party or validates a Trust Mark online, issued for a specific Relying Party, the Trust Anchor or its Intermediate do not know that a particular Wallet Instance is inquiring about a specific Relying Party; instead, they only serve the statements related to that Relying Party as a public resource. -- The Wallet instance metadata must not contain information that may disclose technical information about the hardware used. -- Leaf entity, Intermediate, and Trust Anchor metadata may include the necessary amount of data as part of administrative, technical, and security contact information. It is generally not recommended to use personal contact details in such cases. From a legal perspective, the publication of such information is needed for operational support concerning technical and security matters and is in line with GDPR. - -Considerations about Decentralization -------------------------------------- - -- There should be more than one Trust Anchor. -- In some cases, a trust verifier may trust an Intermediate, especially when the Intermediate may represent itself as a Trust Anchor within a specific perimeter, such as cases where the Leafs are both in the same perimeter like a Member State jurisdiction (eg: Italian RP with an Italian Wallet Instance may consider the Italian Accreditation Body as Trust Anchor). -- Trust attestations (Trust Chain) should be included in the JWS issued by Credential Issuers, and the Presentation Requests of RPs should contain the Trust Chain related to them (issuers of the presentation requests). -- Since the credential presentation must be signed, saving the signed presentation requests and responses, which include the Trust Chain, the Wallet Instance has a snapshot of the federation configuration (Trust Anchor Entity Configuration in the Trust Chain) and the verifiable reliability of the Relying Party it has interacted with. This information must be stored on the Wallet Device and backed up in a remote and secure cloud storage, with the explicit permission of its User. -- Each signed attestation is long-lived since it can be cryptographically validated even when the federation configuration changes or the keys of its issuers are renewed. -- Each participant should be able to update its Entity Configuration without notifying the changes to any third party. The Metadata Policy of a Trust Chain must be applied to overload any information related to protocol metadata and allowed grants of the participants. diff --git a/_sources/wallet-instance-attestation.rst.txt b/_sources/wallet-instance-attestation.rst.txt deleted file mode 100644 index 899b1bf62..000000000 --- a/_sources/wallet-instance-attestation.rst.txt +++ /dev/null @@ -1,547 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _wallet-instance-attestation.rst: - -Wallet Instance Attestation -+++++++++++++++++++++++++++ - -The Wallet Instance Attestation is data containing details about the Wallet Provider, the Wallet Solution, the Wallet Instance, and the device's security level where the Wallet Instance is installed. It generally attests the **authenticity, integrity, security, privacy, and trust** of a specific Wallet Instance. The Wallet Instance Attestation MUST contain the Wallet Instance public key. - -General Properties ------------------- - -The objectives include: - -- Ensuring that the Wallet Instance maintains a level of **integrity** that is capable of preventing any manipulation or forgery attempts by unauthorized third parties. -- Having the Wallet Provider issue a certificate of conformity to assure that the previously mentioned security and trust objectives are fulfilled. - -To meet these requirements, it is necessary for each Wallet Instance to issue an attestation of conformity, guaranteeing its security and compliance with the Trust Model. - -This verifiable attestation, called **Wallet Instance Attestation**, must be electronically signed by its issuer. - -.. hint:: - Given that the Wallet Instance does not represent an accredited entity and does not belong to an organization but resides on the User's device, the Trust Model, based on sustainability and scalability criteria, must delegate the task of issuing the **Wallet Instance Attestation** to the **Wallet Provider**. - -Requirements ------------- - -The following requirements are assumed for the Wallet Instance Attestation: - -1. **Efficiency**: The Wallet Instance Attestation should use an efficient format like JSON Web Token (JWT) for light and fast data management, and compliance with various formats used for eudiw solutions. -2. **Simplicity**: The Wallet Provider should be based on a REST architecture for issuing Wallet Instance Attestations. -3. **Public key holder binding**: The Wallet Instance Attestation must be securely linked to the Wallet Instance public key. -4. **Issued and signed by an accredited Wallet Provider**: The Wallet Instance Attestation must be issued and signed by an accredited and reliable Wallet Provider, thereby providing integrity and authenticity to the attestation. -5. **Authenticity/Genuineness of the Wallet Instance**: The Wallet Instance Attestation must ensure the integrity and authenticity of the Wallet Instance, verifying that it was accurately created and provided by the Wallet Provider. ⚠️ -6. **Ability to request multiple claims for several public keys**: Each Wallet Instance should be able to request multiple attestations for different public keys associated with it. This requirement provides a privacy-preserving measure, as the public key could be used as a tracking tool in the credentials’ disclosure phase (also see point 10 below). -7. **Reusability**: The Wallet Instance Attestation should be usable multiple times during the validity period of the attestation, allowing for repeated authentication and authorization without the need to request new attestations with each interaction. -8. **Expiration**: The Wallet Instance Attestation should have a well-defined expiration date, after which it will no longer be considered valid, thereby ensuring the security and updating of attestations over time. -9. **Revocation in case of loss/deletion of the private key**: If the private key associated with the Wallet Instance is lost or deleted, the attestation automatically becomes invalid to prevent unauthorized use of the Wallet Instance. ⚠️ -10. **Pseudonymisation**: The attestations are designed to be pseudonymised (i.e., they do not contain direct references to the person, making it impossible to identify them in the absence of additional information - see art. 4(5) GDPR for a comprehensive definition). Without such a measure, the use of the attestation on multiple RPs would pose a significant risk, as it would theoretically allow the RPs to merge databases and track Users. This requirement enhances the measures adopted according to - - art. 32 GDPR. - -.. attention:: - ⚠️ Implementation of points no. 5 and 9 is still under discussion. This version assumes the authenticity and non-revocability of the Wallet Instance. - -High-end design ---------------- - -Static view of the components -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. figure:: ../../images/static_view_wallet_instance_attestation.svg - :name: Wallet Solution schema - :alt: The image shows how the Wallet Provider and the Wallet Instances are contained within the Wallet Solution, which is managed by the Wallet Provider. - :target: https://www.plantuml.com/plantuml/uml/XP4nJuSm44VtVehBdxbnPp2iRYx6qTHIjR7SaVQ0-EqzaICDgN4ZBxpqzTUXiCkyJCaupvJXzbH2le4hiCW7A7rsAGM6ETCQn-E7RMSloi0OJzDC691FeL1QE1BMWZBeraW2Mbv4wK8VQayPT5yX9TgCQPclpdy676lnGF0ZN93DyVs3xVsrhOU70hCi0_JshwHXFJp-Rg4dIuECo96moD7xeBQbUKBEbE0EPEwuEWx6N2zj_uXqU8wbhVMhD3tjbAX1BYIl_mq0 - -Dynamic view of the components -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This section describes the format of the Wallet Instance Attestation and how it is issued by the Wallet Provider. - -.. figure:: ../../images/dynamic_view_sequence_wallet_instance_attestation.svg - :name: sequence diagram for Wallet Instance Attestation request - :alt: The figure shows the sequence diagram for issuing a Wallet Instance Attestation. The steps will be described below. - :target: https://www.plantuml.com/plantuml/uml/XPB1RzKm3CRl-IlCJY3nn7s7QOZ3118IGi0kkxYDLLcqJd2SLMz_FLvV6r7AnDN-_Fi-ExajXcfr6iEhh3XC24Rf2Kmh1QoMf4uTQGZPLTnpHZ6u-bv8hm0Br7tz7iUH33wAGwMdHJBpFpLVD3roN35p5qA5qusBhtsQZN7a9uBvekMLzo19GUbNfMBlib8X1_PAaUHveeIPJpTpTmrtPDjiNdrW8iE8Xc7kJgvoeyzh1VeaXYmimnyqi7EcyXP-qddnPAN9EruXYJcnsEhdf1yUrqbqC3MjnM3aOgxT5hmZ8NNrWix8MhQcH_zwMGyaIK-U5KwNgRNGB3yeFIF-kZYyBuNKE4a3VRh_5h0tVbpoTRiROLE__Y_eZOTP9W_RyZOpa5GM4YhbA2uy25fLQgrXkmDANDe7OClN7ktbXO-FyJ8jqluYpguDtVJSFc9y42MCPx04gJDa0Q5vz_LkIMATnjy0 - -- - - **Message 1**: The User initializes the Wallet Instance. In particular, this process happens after the Wallet Instance installation and after the expiration of the Wallet Instance Attestation is launched and every time the User wants to request or present a credential. -- **Message 2-3**: The Wallet Instance obtains metadata about its Wallet Provider. Among these, we also find the list of supported algorithms, public keys, endpoints. -- **Message 4**: The Wallet Instance verifies that the Wallet Provider is trustworthy by resolving the provider's trust chain up to the Trust Anchor. -- **Message 5-7**: The Wallet Instance creates a new key pair and requests a ``nonce`` from the Wallet Provider (as a measure against replay attacks). -- **Message 8**: The Wallet Instance generates a Wallet Instance Attestation Request, in JWS format, signed with the private key associated with the public key for which it wants to obtain the attestation. -- **Message 9-13**: The Wallet Instance sends the Wallet Instance Attestation Request to the Wallet Provider which verifies its validity and issues the signed attestation. -- **Message 13-14**:The Wallet Instance receives the Wallet Instance Attestation signed by the Wallet Provider and proceeds with a formal verification. -- **Message 15**:The Wallet Instance Attestation is ready to be consumed. - -Detail design ---------------- - -We will go into the detail design below. - -Format of the Wallet Provider Entity Configuration -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Wallet Provider Entity Configuration is a JWS containing the public keys and the supported algorithms within the Wallet Provider metadata definition. It is defined according to `OpenID Connect Federation `_ and Section Trust Model of this specification. - -Header -^^^^^^ -+---------+-----------------------------------------------------------------+ -| **key** | **value** | -+---------+-----------------------------------------------------------------+ -| alg | Algorithm to verify the token signature (es. ES256). | -+---------+-----------------------------------------------------------------+ -| kid | Thumbprint of the public key used for signing. | -+---------+-----------------------------------------------------------------+ -| typ | Media type, in this case, we use the entity-statement+jwt value.| -+---------+-----------------------------------------------------------------+ - -Payload -^^^^^^^ -+-----------------------------------+-----------------------------------+ -| **key** | **value** | -+-----------------------------------+-----------------------------------+ -| iss | The public url of the Wallet | -| | Provider. | -+-----------------------------------+-----------------------------------+ -| sub | The public url of the Wallet | -| | Provider. | -+-----------------------------------+-----------------------------------+ -| iat | Configuration release timestamp. | -+-----------------------------------+-----------------------------------+ -| exp | Configuration expiration | -| | timestamp. | -+-----------------------------------+-----------------------------------+ -| jwks | Containing the keys attribute | -| | which is an array of all the | -| | public keys associated with the | -| | domain (they could also match | -| | those of the Wallet Provider). | -+-----------------------------------+-----------------------------------+ -| metadata | This attribute will contain for | -| | each entity its own | -| | metadata. In this case we | -| | will have the Wallet | -| | Provider metadata contained within| -| | the ``eudi_wallet_provider`` | -| | attribute and the more generic | -| | entity ``federation_entity``. | -+-----------------------------------+-----------------------------------+ - -Payload `eudi_wallet_provider` -'''''''''''''''''''''''''''''' -+------------------------------------+------------------------------------+ -| **key** | **value** | -+------------------------------------+------------------------------------+ -|| jwks || Containing the keys attribute | -|| || which is an array of all the | -|| || Wallet Provider's public keys. | -+------------------------------------+------------------------------------+ -|| token_endpoint || Endpoint for obtaining the Wallet | -|| || Instance Attestation. | -+------------------------------------+------------------------------------+ -|| asc_values_supported || List of supported values for | -|| || the certified security context. | -|| || These values define a level of | -|| || assurance about the security of | -|| || the app. In particular we will | -|| || mainly have 3 values associated | -|| || with low, medium and high | -|| || security. An attested security | -|| || context is defined according to | -|| || the proof that the Wallet | -|| || Instance is able to send to the | -|| || Wallet Provider. | -|| || ⚠️ This parameter is not standard | -|| || and is still under discussion. | -+------------------------------------+------------------------------------+ -|| grant_types_supported || The type of grants supported by | -|| || the endpoint token. Therefore, | -|| || for the Wallet Provider the token | -|| || is equivalent only to the Wallet | -|| || Instance attestation, therefore | -|| || this attribute will contain an | -|| || array with only one element. | -+------------------------------------+------------------------------------+ -|| token_endpoint_auth_methods_suppo || Supported authentication method | -|| rted || for the endpoint token. | -|| || | -+------------------------------------+------------------------------------+ -|| token_endpoint_auth_signing_alg_v || List of supported signature | -|| alues_supported || algorithms. | -+------------------------------------+------------------------------------+ - -.. note:: - The parameter `asc_values_supported` is experimental and still - under discussion. - -Payload `federation_entity` -''''''''''''''''''''''''''' -+-------------------+----------------------------------------+ -| **key** | **value** | -+-------------------+----------------------------------------+ -| organization_name | Organization name. | -+-------------------+----------------------------------------+ -| homepage_uri | Organization website. | -+-------------------+----------------------------------------+ -| tos_uri | Url to the terms of use. | -+-------------------+----------------------------------------+ -| policy_uri | Url to the privacy policy. | -+-------------------+----------------------------------------+ -| logo_uri | URL of the organization logo. | -+-------------------+----------------------------------------+ - -Below a non-normative example of the Entity Configuration. - -.. code-block:: javascript - - { - "alg": "ES256", - "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY", - "typ": "entity-statement+jwt" - } - . - { - "iss": "https://wallet-provider.example.org", - "sub": "https://wallet-provider.example.org", - "jwks": { - "keys": [ - { - "crv": "P-256", - "kty": "EC", - "x": "qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk", - "y": "1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM", - "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY" - } - ] - }, - "metadata": { - "eudi_wallet_provider": { - "jwks": { - "keys": [ - { - "crv": "P-256", - "kty": "EC", - "x": "qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk", - "y": "1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM", - "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY" - } - ] - }, - "token_endpoint": "https://wallet-provider.example.org/token", - "asc_values_supported": [ - "https://wallet-provider.example.org/LoA/basic", - "https://wallet-provider.example.org/LoA/medium", - "https://wallet-provider.example.org/LoA/high" - ], - "grant_types_supported": [ - "urn:ietf:params:oauth:client-assertion-type:jwt-key-attestation" - ], - "token_endpoint_auth_methods_supported": [ - "private_key_jwt" - ], - "token_endpoint_auth_signing_alg_values_supported": [ - "ES256", - "ES384", - "ES512" - ] - }, - "federation_entity": { - "organization_name": "PagoPa S.p.A.", - "homepage_uri": "https://wallet-provider.example.org", - "policy_uri": "https://wallet-provider.example.org/privacy_policy", - "tos_uri": "https://wallet-provider.example.org/info_policy", - "logo_uri": "https://wallet-provider.example.org/logo.svg" - } - }, - "iat": 1687171759, - "exp": 1709290159 - } - - -Format of the Wallet Instance Attestation Request -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -To obtain a Wallet Instance Attestation from the Wallet -Provider it is necessary to send a Wallet Instance Attestation -Request from the Wallet Instance containing the associated public key -and a ``nonce`` previously requested to avoid replay attacks. - -Header -^^^^^^ -+-----------------------------------+-----------------------------------+ -| **key** | **value** | -+-----------------------------------+-----------------------------------+ -| alg | Algorithm to verify the token | -| | signature (es. ES256) | -+-----------------------------------+-----------------------------------+ -| kid | Key id of the Wallet Instance | -+-----------------------------------+-----------------------------------+ -| typ | Media type, in this case we use | -| | the value var+jwt (Verifiable | -| | Assertion Request JWT) | -+-----------------------------------+-----------------------------------+ - -Payload -^^^^^^^ -+---------+---------------------------------------+ -| **key** | **value** | -+---------+---------------------------------------+ -|| iss || The thumbprint | -|| || of the JWK of the Wallet Instance | -|| || for which the attestation is | -|| || being requested. | -+---------+---------------------------------------+ -|| sub || The public url of the Wallet | -|| || Provider | -+---------+---------------------------------------+ -|| jti || Unique identifier of the request. | -|| || This parameter will be used to | -|| || avoid replay attacks. | -+---------+---------------------------------------+ -|| type || String. It must be set to | -|| || ``WalletInstanceAttestationRequest`` | -+---------+---------------------------------------+ -|| nonce || The nonce obtained from the | -|| || Wallet Porvider. | -+---------+---------------------------------------+ -|| cnf || This parameter will contain the | -|| || configuration of the Wallet | -|| || Instance in JSON format. Among | -|| || the mandatory attributes there | -|| || will be the jwk parameter | -|| || containing the public key of the | -|| || Wallet Instance. It will also | -|| || contain all the information | -|| || useful for the Wallet Provider | -|| || to verify that the app is genuine. | -+---------+---------------------------------------+ - -Below a non-normative example of the Wallet Instance Attestation -request where the decoded JWS headers and payload are separated by a comma: - -.. code-block:: javascript - - { - "alg": "ES256", - "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c", - "typ": "var+jwt" - } - . - { - "iss": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c", - "sub": "https://wallet-provider.example.org", - "jti": "6ec69324-60a8-4e5b-a697-a766d85790ea", - "type": "WalletInstanceAttestationRequest", - "nonce" : "....." - "cnf": { - "jwk": { - "crv": "P-256", - "kty": "EC", - "x": "4HNptI-xr2pjyRJKGMnz4WmdnQD_uJSq4R95Nj98b44", - "y": "LIZnSB39vFJhYgS3k7jXE4r3-CoGFQwZtPBIRqpNlrg", - "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c" - } - }, - "iat": 1686645115, - "exp": 1686652315 - } - -Whose corresponding JWS is verifiable through the public key -of the Wallet Instance present. - - -Format of the Wallet Instance Attestation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A JWT was chosen as the format for the Wallet Instance Attestation. -Let's see below the various fields that compose it. - -Header -^^^^^^ - -+-----------------------------------+-----------------------------------+ -| **key** | **value** | -+-----------------------------------+-----------------------------------+ -| alg | Algorithm to verify the token | -| | signature (es. ES256). | -+-----------------------------------+-----------------------------------+ -| kid | Key id used by the Wallet | -| | Provider to sign the attestation. | -+-----------------------------------+-----------------------------------+ -| typ | Media type, in this case we use | -| | the value va+jwt (Verifiable | -| | Assertion JWT). | -| | This parameter is currently | -| | non-standard as it is not yet | -| | registered as `IANA Media | -| | Types `__. | -+-----------------------------------+-----------------------------------+ -| x5c | Array containing the X.509 | -| | certificate (and the entire chain | -| | of certificates) used to certify | -| | the public key of the issuer. | -+-----------------------------------+-----------------------------------+ -| trust_chain | Array containing the JWS of the | -| | trust chain relating to its | -| | issuer (Wallet Provider). | -+-----------------------------------+-----------------------------------+ - -Payload -^^^^^^^ - -+---------------------------+-------------------------------------------+ -| **key** | **value** | -+---------------------------+-------------------------------------------+ -|| iss || The public url of the Wallet | -|| || Instance attestation issuer. See | -|| || the example below in this section. | -+---------------------------+-------------------------------------------+ -|| sub || Thumbprint value | -|| || of the JWK of the Wallet Instance | -|| || for which the attestation is | -|| || being issued. | -+---------------------------+-------------------------------------------+ -|| iat || Unix timestamp of attestation | -|| || issuance time. | -+---------------------------+-------------------------------------------+ -|| exp || Unix timestamp regarding the | -|| || expiration date time. | -|| || A good practice to avoid security | -|| || problems is to have a limited | -|| || duration of the attestation. | -+---------------------------+-------------------------------------------+ -|| type || String: | -|| || "WalletInstanceAttestation". | -+---------------------------+-------------------------------------------+ -|| policy_uri || Url to the privacy policy | -|| || of the wallet. | -+---------------------------+-------------------------------------------+ -|| tos_uri || Url to the terms | -|| || of use of the Wallet Provider. | -+---------------------------+-------------------------------------------+ -|| logo_uri || Logo url of the Wallet Provider. | -+---------------------------+-------------------------------------------+ -|| asc || Attested security context: | -|| || Represents a level of "trust" of | -|| || the service containing a Level Of | -|| || Agreement defined in the metadata | -|| || of the Wallet Provider. | -+---------------------------+-------------------------------------------+ -|| cnf || This parameter contains the ``jwk`` | -|| || parameter | -|| || with the public key of the Wallet | -|| || necessary for the holder binding. | -+---------------------------+-------------------------------------------+ -|| authorization_endpoint || URL of the OP's OAuth 2.0 | -|| || Authorization Endpoint. | -+---------------------------+-------------------------------------------+ -|| response_types_supported || JSON array containing a list of | -|| || the OAuth 2.0 response_type values | -|| || that this OP supports. | -+---------------------------+-------------------------------------------+ -|| vp_formats_supported || JSON object containing | -|| || ``jwt_vp_json`` and ``jwt_vc_json`` | -|| || supported algorithms array. | -+---------------------------+-------------------------------------------+ -|| request_object_signing || JSON array containing a list of the | -|| _alg_values_supported || JWS signing algorithms (alg values) | -|| || supported by the OP for Request Objects. | -+---------------------------+-------------------------------------------+ -|| presentation_definition || Boolean value specifying whether the | -|| _uri_supported || Wallet Instance supports the transfer of | -|| || presentation_definition by | -|| || reference, with true indicating support. | -+---------------------------+-------------------------------------------+ - -.. note:: - The claim ``asc`` (Attested Security Context) is under discussion - and must be intended as experimental. - -Signature -^^^^^^^^^ - -The Wallet Instance Attestation JWS is signed using the -private key of the Wallet Provider. - -Below is an example of Wallet Instance Attestation: - -.. code-block:: javascript - - { - "alg": "ES256", - "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY", - "trust_chain": [ - "eyJhbGciOiJFUz...6S0A", - "eyJhbGciOiJFUz...jJLA", - "eyJhbGciOiJFUz...H9gw", - ], - "typ": "va+jwt", - "x5c": ["MIIBjDCC ... XFehgKQA=="] - } - . - { - "iss": "https://wallet-provider.example.org", - "sub": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c", - "type": "WalletInstanceAttestation", - "policy_uri": "https://wallet-provider.example.org/privacy_policy", - "tos_uri": "https://wallet-provider.example.org/info_policy", - "logo_uri": "https://wallet-provider.example.org/logo.svg", - "asc": "https://wallet-provider.example.org/LoA/basic", - "cnf": - { - "jwk": - { - "crv": "P-256", - "kty": "EC", - "x": "4HNptI-xr2pjyRJKGMnz4WmdnQD_uJSq4R95Nj98b44", - "y": "LIZnSB39vFJhYgS3k7jXE4r3-CoGFQwZtPBIRqpNlrg", - "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c" - } - }, - "authorization_endpoint": "eudiw:", - "response_types_supported": [ - "vp_token" - ], - "vp_formats_supported": { - "jwt_vp_json": { - "alg_values_supported": ["ES256"] - }, - "jwt_vc_json": { - "alg_values_supported": ["ES256"] - } - }, - "request_object_signing_alg_values_supported": [ - "ES256" - ], - "presentation_definition_uri_supported": false, - "iat": 1687281195, - "exp": 1687288395 - } - - -Endpoints -~~~~~~~~~ -The Wallet Provider that issues the Wallet Instance Attestations must -make available a series of APIs in REST format that follow the OpenID -Federation standard. - -Metadata -^^^^^^^^ -A **GET /.well-known/openid-federation endpoint** for retrieving the Wallet -Provider Entity Configuration. - -Wallet Instance Attestation -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -A second **POST /token** endpoint that takes two parameters as input: - -``grant_type`` which in our case is a string: -``urn:ietf:params:oauth:client-assertion-type:jwt-key-attestation`` - -``assertion`` which contains the signed JWT of the Wallet Instance Attestation -Request. - -The response will then contain the Wallet Instance Attestation. diff --git a/_sources/wallet-solution.rst.txt b/_sources/wallet-solution.rst.txt deleted file mode 100644 index 328cf07be..000000000 --- a/_sources/wallet-solution.rst.txt +++ /dev/null @@ -1,76 +0,0 @@ -.. include:: ../common/common_definitions.rst - -.. _wallet-solution.rst: - -Wallet Solution -------------------- - -The Wallet Solution is a comprehensive product offered by the Wallet Provider to cater to the needs of Users in managing their digital assets securely. Designed to provide a seamless User experience, this solution enables Users to leverage the capabilities of the Wallet effectively. - -The Wallet Solution is issued by the Wallet Provider in the form of a mobile app, it also consists of services and web interfaces for the exchange of data between the Wallet Provider and its Wallet Instances for the requirements of the trust model and in total respect of the user's privacy, in accordance with national and EU legislation. - -The mobile app serves as the primary interface for Users, allowing them to access and interact with their digital assets conveniently. These digital assets, known as Attestations, include Personal Identification Data (PID¹), a set of data that can uniquely identify a natural or a legal person, along with other Qualified and non-qualified Electronic Attestations of Attributes, also known as QEAAs and EAAs respectively, or (Q)EAAs for short¹. Once a User installs the mobile app on their device, we refer to such an installation as a Wallet Instance for the User. - -Supporting the mobile app, the Wallet Provider plays a vital role in ensuring the security and reliability of the Wallet Solution. The Wallet Provider is responsible for issuing the Wallet Instance Attestation — a cryptographic proof that verifies the authenticity and integrity of the Wallet Instance. - - -Requirements -^^^^^^^^^^^^^^^^^^^^ - - - **Trustworthiness within the Wallet ecosystem**: the Wallet Instance must establish trust and reliability within the Wallet ecosystem. - - **Compliance with Provider specifications for obtaining PID and (Q)EAA**: the Wallet Instance must adhere to the specifications set by Providers for obtaining Personal Identification (PID) and Qualified or non-qualified Electronic Address Authentication (Q)EAA. - - **Support for Android and iOS operating systems**: the Wallet Instance must be compatible and functional at least on both Android and iOS operating systems, as well as available on the Play Store and App Store respectively. - - **Verification of device ownership by the User**: the Wallet Instance must provide a mechanism to verify the User's actual possession of the device and its control. - -Wallet Instance -^^^^^^^^^^^^^^^^^^^^ -The Wallet Instance serves as a unique and secure representation of the User within the Wallet ecosystem. It establishes a strong and reliable identity for the User, enabling them to engage in various digital transactions in a secure and privacy-preserving manner. - -The Wallet Instance establishes the trust within the Wallet ecosystem by consistently presenting a Wallet Instance Attestation during interactions with other ecosystem actors such as PID Providers, (Q)EAA Providers, and Relying Parties. These attestations, provided by the underlying Wallet Provider operated by the Wallet Provider, reference a pair of asymmetric cryptographic keys exclusively owned by the Wallet Instance. Their purpose is to authenticate the Wallet Instance itself, ensuring its legitimacy when engaging with other ecosystem actors. - -To guarantee the utmost security, these cryptographic keys are securely stored within the device's Trusted Execution Environment (TEE)³. This ensures that only the User can access them, thus preventing unauthorized usage or tampering. For more detailed information, please refer to the `Wallet Instance Attestation section`_ and the `Trust Model section`_ of this document. - -Wallet Instance Lifecycle -^^^^^^^^^^^^^^^^^^^^^^^^^^ -The Wallet Instance can exist in three distinct states: Operational, Valid, and Deactivated. Each state represents a specific functional status and determines the actions that can be performed². - -Initialization Process -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -To activate the Wallet Instance, Users must install the mobile application on their device and open it. Furthermore, Users will be asked to set their preferred method of unlocking their device; this can be accomplished by entering a personal identification number (PIN) or by utilizing biometric authentication, such as fingerprint or facial recognition, according to their personal preferences and device's capabilities. - -After completing these steps, the Wallet Instance is in the Operational state. - -Transition to Valid state -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -To transition from the Operational state to the Valid state, the Wallet Instance must obtain a valid Personal Identification (PID). Once a valid PID is acquired, the Wallet Instance becomes active, enabling secure transaction execution. - -In order to securely and unambiguously identify Users, the Wallet Instance adopts a Level of Assurance (LoA) 3 authentication, which guarantees a high level of confidence in the User's identity. The authentication method is chosen by the PID provider from among the notified eID solutions at the national level. - -Once the Wallet Instance is in the Operational state, Users can: - - - Obtain, view, and manage (Q)EAAs from trusted (Q)EAA Providers¹ - - Authenticate to Relying Parties¹ - - Authorize the sharing of their data with Relying Parties - -Please refer to the relative sections for further information about PID and (Q)EAAs issuance and attestation presentation. - -Return to Operational state -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -A Valid Wallet Instance may revert to the Operational state under specific circumstances. These circumstances include the expiration or revocation of the associated PID by the relevant PID Provider. - -Deactivation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Users have the ability to deactivate the Wallet Instance voluntarily. This action removes the operational capabilities of the Wallet Instance and sets it to the deactivated state. Deactivation provides Users with control over access and usage according to their preferences. - -External references -^^^^^^^^^^^^^^^^^^^^ -¹ Definitions are inherited from the EUDI Wallet Architecture and Reference Framework, version 1.1.0 at the time of writing. Please refer to `this page `_ for extended definitions and details. - -² Wallet Instance states adhere to the EUDI Wallet Architecture and Reference Framework, as defined `here `_. - -³ Depending on the device operating system, TEE is defined by `Trusty`_ or `Secure Enclave`_ for Android and iOS devices, respectively. - -.. _Trust Model section: trust.html -.. _Wallet Instance Attestation section: wallet-instance-attestation.html -.. _Trusty: https://source.android.com/docs/security/features/trusty -.. _Secure Enclave: https://support.apple.com/en-gb/guide/security/sec59b0b31ff/web diff --git a/_static/_sphinx_javascript_frameworks_compat.js b/_static/_sphinx_javascript_frameworks_compat.js deleted file mode 100644 index 8549469dc..000000000 --- a/_static/_sphinx_javascript_frameworks_compat.js +++ /dev/null @@ -1,134 +0,0 @@ -/* - * _sphinx_javascript_frameworks_compat.js - * ~~~~~~~~~~ - * - * Compatability shim for jQuery and underscores.js. - * - * WILL BE REMOVED IN Sphinx 6.0 - * xref RemovedInSphinx60Warning - * - */ - -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - - -/** - * small helper function to urldecode strings - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL - */ -jQuery.urldecode = function(x) { - if (!x) { - return x - } - return decodeURIComponent(x.replace(/\+/g, ' ')); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - var bbox = node.parentElement.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} diff --git a/_static/basic.css b/_static/basic.css deleted file mode 100644 index 9039e027c..000000000 --- a/_static/basic.css +++ /dev/null @@ -1,932 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li p.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 360px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -a.brackets:before, -span.brackets > a:before{ - content: "["; -} - -a.brackets:after, -span.brackets > a:after { - content: "]"; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, figure.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, figure.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, figure.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -img.align-default, figure.align-default, .figure.align-default { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-default { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar, -aside.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px; - background-color: #ffe; - width: 40%; - float: right; - clear: right; - overflow-x: auto; -} - -p.sidebar-title { - font-weight: bold; -} - -div.admonition, div.topic, aside.topic, blockquote { - clear: left; -} - -/* -- topics ---------------------------------------------------------------- */ - -div.topic, aside.topic { - border: 1px solid #ccc; - padding: 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- content of sidebars/topics/admonitions -------------------------------- */ - -div.sidebar > :last-child, -aside.sidebar > :last-child, -div.topic > :last-child, -aside.topic > :last-child, -div.admonition > :last-child { - margin-bottom: 0; -} - -div.sidebar::after, -aside.sidebar::after, -div.topic::after, -aside.topic::after, -div.admonition::after, -blockquote::after { - display: block; - content: ''; - clear: both; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - margin-top: 10px; - margin-bottom: 10px; - border: 0; - border-collapse: collapse; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table.align-default { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -th > :first-child, -td > :first-child { - margin-top: 0px; -} - -th > :last-child, -td > :last-child { - margin-bottom: 0px; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure, figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption, figcaption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number, -figcaption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text, -figcaption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist { - margin: 1em 0; -} - -table.hlist td { - vertical-align: top; -} - -/* -- object description styles --------------------------------------------- */ - -.sig { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; -} - -.sig-name, code.descname { - background-color: transparent; - font-weight: bold; -} - -.sig-name { - font-size: 1.1em; -} - -code.descname { - font-size: 1.2em; -} - -.sig-prename, code.descclassname { - background-color: transparent; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.sig-param.n { - font-style: italic; -} - -/* C++ specific styling */ - -.sig-inline.c-texpr, -.sig-inline.cpp-texpr { - font-family: unset; -} - -.sig.c .k, .sig.c .kt, -.sig.cpp .k, .sig.cpp .kt { - color: #0033B3; -} - -.sig.c .m, -.sig.cpp .m { - color: #1750EB; -} - -.sig.c .s, .sig.c .sc, -.sig.cpp .s, .sig.cpp .sc { - color: #067D17; -} - - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -:not(li) > ol > li:first-child > :first-child, -:not(li) > ul > li:first-child > :first-child { - margin-top: 0px; -} - -:not(li) > ol > li:last-child > :last-child, -:not(li) > ul > li:last-child > :last-child { - margin-bottom: 0px; -} - -ol.simple ol p, -ol.simple ul p, -ul.simple ol p, -ul.simple ul p { - margin-top: 0; -} - -ol.simple > li:not(:first-child) > p, -ul.simple > li:not(:first-child) > p { - margin-top: 0; -} - -ol.simple p, -ul.simple p { - margin-bottom: 0; -} - -/* Docutils 0.17 and older (footnotes & citations) */ -dl.footnote > dt, -dl.citation > dt { - float: left; - margin-right: 0.5em; -} - -dl.footnote > dd, -dl.citation > dd { - margin-bottom: 0em; -} - -dl.footnote > dd:after, -dl.citation > dd:after { - content: ""; - clear: both; -} - -/* Docutils 0.18+ (footnotes & citations) */ -aside.footnote > span, -div.citation > span { - float: left; -} -aside.footnote > span:last-of-type, -div.citation > span:last-of-type { - padding-right: 0.5em; -} -aside.footnote > p { - margin-left: 2em; -} -div.citation > p { - margin-left: 4em; -} -aside.footnote > p:last-of-type, -div.citation > p:last-of-type { - margin-bottom: 0em; -} -aside.footnote > p:last-of-type:after, -div.citation > p:last-of-type:after { - content: ""; - clear: both; -} - -/* Footnotes & citations ends */ - -dl.field-list { - display: grid; - grid-template-columns: fit-content(30%) auto; -} - -dl.field-list > dt { - font-weight: bold; - word-break: break-word; - padding-left: 0.5em; - padding-right: 5px; -} - -dl.field-list > dt:after { - content: ":"; -} - -dl.field-list > dd { - padding-left: 0.5em; - margin-top: 0em; - margin-left: 0em; - margin-bottom: 0em; -} - -dl { - margin-bottom: 15px; -} - -dd > :first-child { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dl > dd:last-child, -dl > dd:last-child > :last-child { - margin-bottom: 0; -} - -dt:target, span.highlighted { - background-color: #fbe54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -.classifier:before { - font-style: normal; - margin: 0 0.5em; - content: ":"; - display: inline-block; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -pre, div[class*="highlight-"] { - clear: both; -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; - white-space: nowrap; -} - -div[class*="highlight-"] { - margin: 1em 0; -} - -td.linenos pre { - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - display: block; -} - -table.highlighttable tbody { - display: block; -} - -table.highlighttable tr { - display: flex; -} - -table.highlighttable td { - margin: 0; - padding: 0; -} - -table.highlighttable td.linenos { - padding-right: 0.5em; -} - -table.highlighttable td.code { - flex: 1; - overflow: hidden; -} - -.highlight .hll { - display: block; -} - -div.highlight pre, -table.highlighttable pre { - margin: 0; -} - -div.code-block-caption + div { - margin-top: 0; -} - -div.code-block-caption { - margin-top: 1em; - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -table.highlighttable td.linenos, -span.linenos, -div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; - -webkit-user-select: text; /* Safari fallback only */ - -webkit-user-select: none; /* Chrome/Safari */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* IE10+ */ -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - margin: 1em 0; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: absolute; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/_static/css/theme.css b/_static/css/theme.css deleted file mode 100644 index 6c29bebea..000000000 --- a/_static/css/theme.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";@import url("https://fonts.googleapis.com/css?family=Lora:400,700");@import url("https://fonts.googleapis.com/css?family=Roboto+Mono:400,700");@import url("https://fonts.googleapis.com/css?family=Titillium+Web:300,400,600,700");.primary-bg{background-color:#06c}.primary-color{color:#06c}.primary-border-color,.primary-border-color.border{border-color:#06c!important}.white-bg{background-color:#fff}.white-color{color:#fff}.white-border-color-,.white-border-color-.border{border-color:#fff!important}.primary-bg-a1{background-color:#bfdfff}.primary-color-a1{color:#bfdfff}.primary-border-color-a1,.primary-border-color-a1.border{border-color:#bfdfff!important}.primary-bg-a2{background-color:#93c4f5}.primary-color-a2{color:#93c4f5}.primary-border-color-a2,.primary-border-color-a2.border{border-color:#93c4f5!important}.primary-bg-a3{background-color:#6aaaeb}.primary-color-a3{color:#6aaaeb}.primary-border-color-a3,.primary-border-color-a3.border{border-color:#6aaaeb!important}.primary-bg-a4{background-color:#4392e0}.primary-color-a4{color:#4392e0}.primary-border-color-a4,.primary-border-color-a4.border{border-color:#4392e0!important}.primary-bg-a5{background-color:#207bd6}.primary-color-a5{color:#207bd6}.primary-border-color-a5,.primary-border-color-a5.border{border-color:#207bd6!important}.primary-bg-a6{background-color:#06c}.primary-color-a6{color:#06c}.primary-border-color-a6,.primary-border-color-a6.border{border-color:#06c!important}.primary-bg-a7{background-color:#0059b3}.primary-color-a7{color:#0059b3}.primary-border-color-a7,.primary-border-color-a7.border{border-color:#0059b3!important}.primary-bg-a8{background-color:#004d99}.primary-color-a8{color:#004d99}.primary-border-color-a8,.primary-border-color-a8.border{border-color:#004d99!important}.primary-bg-a9{background-color:#004080}.primary-color-a9{color:#004080}.primary-border-color-a9,.primary-border-color-a9.border{border-color:#004080!important}.primary-bg-a10{background-color:#036}.primary-color-a10{color:#036}.primary-border-color-a10,.primary-border-color-a10.border{border-color:#036!important}.primary-bg-a11{background-color:#00264d}.primary-color-a11{color:#00264d}.primary-border-color-a11,.primary-border-color-a11.border{border-color:#00264d!important}.primary-bg-a12{background-color:#001a33}.primary-color-a12{color:#001a33}.primary-border-color-a12,.primary-border-color-a12.border{border-color:#001a33!important}.primary-bg-b1{background-color:#06c}.primary-color-b1{color:#06c}.primary-border-color-b1,.primary-border-color-b1.border{border-color:#06c!important}.primary-bg-b2{background-color:#1262b3}.primary-color-b2{color:#1262b3}.primary-border-color-b2,.primary-border-color-b2.border{border-color:#1262b3!important}.primary-bg-b3{background-color:#1f5c99}.primary-color-b3{color:#1f5c99}.primary-border-color-b3,.primary-border-color-b3.border{border-color:#1f5c99!important}.primary-bg-b4{background-color:#265380}.primary-color-b4{color:#265380}.primary-border-color-b4,.primary-border-color-b4.border{border-color:#265380!important}.primary-bg-b5{background-color:#294766}.primary-color-b5{color:#294766}.primary-border-color-b5,.primary-border-color-b5.border{border-color:#294766!important}.primary-bg-b6{background-color:#26394d}.primary-color-b6{color:#26394d}.primary-border-color-b6,.primary-border-color-b6.border{border-color:#26394d!important}.primary-bg-b7{background-color:#1f2933}.primary-color-b7{color:#1f2933}.primary-border-color-b7,.primary-border-color-b7.border{border-color:#1f2933!important}.primary-bg-b8{background-color:#12161a}.primary-color-b8{color:#12161a}.primary-border-color-b8,.primary-border-color-b8.border{border-color:#12161a!important}.primary-bg-c1{background-color:#dce9f5}.primary-color-c1{color:#dce9f5}.primary-border-color-c1,.primary-border-color-c1.border{border-color:#dce9f5!important}.primary-bg-c2{background-color:#c4dcf5}.primary-color-c2{color:#c4dcf5}.primary-border-color-c2,.primary-border-color-c2.border{border-color:#c4dcf5!important}.primary-bg-c3{background-color:#abd0f5}.primary-color-c3{color:#abd0f5}.primary-border-color-c3,.primary-border-color-c3.border{border-color:#abd0f5!important}.primary-bg-c4{background-color:#93c4f5}.primary-color-c4{color:#93c4f5}.primary-border-color-c4,.primary-border-color-c4.border{border-color:#93c4f5!important}.primary-bg-c5{background-color:#7ab8f5}.primary-color-c5{color:#7ab8f5}.primary-border-color-c5,.primary-border-color-c5.border{border-color:#7ab8f5!important}.primary-bg-c6{background-color:#62abf5}.primary-color-c6{color:#62abf5}.primary-border-color-c6,.primary-border-color-c6.border{border-color:#62abf5!important}.primary-bg-c7{background-color:#499ff5}.primary-color-c7{color:#499ff5}.primary-border-color-c7,.primary-border-color-c7.border{border-color:#499ff5!important}.primary-bg-c8{background-color:#3193f5}.primary-color-c8{color:#3193f5}.primary-border-color-c8,.primary-border-color-c8.border{border-color:#3193f5!important}.primary-bg-c9{background-color:#1887f5}.primary-color-c9{color:#1887f5}.primary-border-color-c9,.primary-border-color-c9.border{border-color:#1887f5!important}.primary-bg-c10{background-color:#007af5}.primary-color-c10{color:#007af5}.primary-border-color-c10,.primary-border-color-c10.border{border-color:#007af5!important}.primary-bg-c11{background-color:#0070e0}.primary-color-c11{color:#0070e0}.primary-border-color-c11,.primary-border-color-c11.border{border-color:#0070e0!important}.primary-bg-c12{background-color:#06c}.primary-color-c12{color:#06c}.primary-border-color-c12,.primary-border-color-c12.border{border-color:#06c!important}.analogue-1-bg-a1{background-color:#e7e6ff}.analogue-1-color-a1{color:#e7e6ff}.analogue-1-border-color-a1,.analogue-1-border-color-a1.border{border-color:#e7e6ff!important}.analogue-1-bg-a2{background-color:#bbb8f5}.analogue-1-color-a2{color:#bbb8f5}.analogue-1-border-color-a2,.analogue-1-border-color-a2.border{border-color:#bbb8f5!important}.analogue-1-bg-a3{background-color:#918deb}.analogue-1-color-a3{color:#918deb}.analogue-1-border-color-a3,.analogue-1-border-color-a3.border{border-color:#918deb!important}.analogue-1-bg-a4{background-color:#6b65e0}.analogue-1-color-a4{color:#6b65e0}.analogue-1-border-color-a4,.analogue-1-border-color-a4.border{border-color:#6b65e0!important}.analogue-1-bg-a5{background-color:#4840d6}.analogue-1-color-a5{color:#4840d6}.analogue-1-border-color-a5,.analogue-1-border-color-a5.border{border-color:#4840d6!important}.analogue-1-bg-a6{background-color:#271fcc}.analogue-1-color-a6{color:#271fcc}.analogue-1-border-color-a6,.analogue-1-border-color-a6.border{border-color:#271fcc!important}.analogue-1-bg-a7{background-color:#221bb3}.analogue-1-color-a7{color:#221bb3}.analogue-1-border-color-a7,.analogue-1-border-color-a7.border{border-color:#221bb3!important}.analogue-1-bg-a8{background-color:#1d1799}.analogue-1-color-a8{color:#1d1799}.analogue-1-border-color-a8,.analogue-1-border-color-a8.border{border-color:#1d1799!important}.analogue-1-bg-a9{background-color:#191380}.analogue-1-color-a9{color:#191380}.analogue-1-border-color-a9,.analogue-1-border-color-a9.border{border-color:#191380!important}.analogue-1-bg-a10{background-color:#140f66}.analogue-1-color-a10{color:#140f66}.analogue-1-border-color-a10,.analogue-1-border-color-a10.border{border-color:#140f66!important}.analogue-1-bg-a11{background-color:#0f0b4d}.analogue-1-color-a11{color:#0f0b4d}.analogue-1-border-color-a11,.analogue-1-border-color-a11.border{border-color:#0f0b4d!important}.analogue-1-bg-a12{background-color:#0a0833}.analogue-1-color-a12{color:#0a0833}.analogue-1-border-color-a12,.analogue-1-border-color-a12.border{border-color:#0a0833!important}.analogue-2-bg-a1{background-color:#ccfffd}.analogue-2-color-a1{color:#ccfffd}.analogue-2-border-color-a1,.analogue-2-border-color-a1.border{border-color:#ccfffd!important}.analogue-2-bg-a2{background-color:#9ff5f2}.analogue-2-color-a2{color:#9ff5f2}.analogue-2-border-color-a2,.analogue-2-border-color-a2.border{border-color:#9ff5f2!important}.analogue-2-bg-a3{background-color:#75ebe7}.analogue-2-color-a3{color:#75ebe7}.analogue-2-border-color-a3,.analogue-2-border-color-a3.border{border-color:#75ebe7!important}.analogue-2-bg-a4{background-color:#4fe0dc}.analogue-2-color-a4{color:#4fe0dc}.analogue-2-border-color-a4,.analogue-2-border-color-a4.border{border-color:#4fe0dc!important}.analogue-2-bg-a5{background-color:#2bd6d0}.analogue-2-color-a5{color:#2bd6d0}.analogue-2-border-color-a5,.analogue-2-border-color-a5.border{border-color:#2bd6d0!important}.analogue-2-bg-a6{background-color:#0accc6}.analogue-2-color-a6{color:#0accc6}.analogue-2-border-color-a6,.analogue-2-border-color-a6.border{border-color:#0accc6!important}.analogue-2-bg-a7{background-color:#09b3ad}.analogue-2-color-a7{color:#09b3ad}.analogue-2-border-color-a7,.analogue-2-border-color-a7.border{border-color:#09b3ad!important}.analogue-2-bg-a8{background-color:#089994}.analogue-2-color-a8{color:#089994}.analogue-2-border-color-a8,.analogue-2-border-color-a8.border{border-color:#089994!important}.analogue-2-bg-a9{background-color:#06807b}.analogue-2-color-a9{color:#06807b}.analogue-2-border-color-a9,.analogue-2-border-color-a9.border{border-color:#06807b!important}.analogue-2-bg-a10{background-color:#056663}.analogue-2-color-a10{color:#056663}.analogue-2-border-color-a10,.analogue-2-border-color-a10.border{border-color:#056663!important}.analogue-2-bg-a11{background-color:#044d4a}.analogue-2-color-a11{color:#044d4a}.analogue-2-border-color-a11,.analogue-2-border-color-a11.border{border-color:#044d4a!important}.analogue-2-bg-a12{background-color:#033331}.analogue-2-color-a12{color:#033331}.analogue-2-border-color-a12,.analogue-2-border-color-a12.border{border-color:#033331!important}.complementary-1-bg{background-color:#f73e5a}.complementary-1-color{color:#f90}.complementary-1-border-color-,.complementary-1-border-color-.border{border-color:#f73e5a!important}.complementary-1-bg-a1{background-color:#fffcfd}.complementary-1-color-a1{color:#fffcfd}.complementary-1-border-color-a1,.complementary-1-border-color-a1.border{border-color:#fffcfd!important}.complementary-1-bg-a2{background-color:#f5d0d6}.complementary-1-color-a2{color:#f5d0d6}.complementary-1-border-color-a2,.complementary-1-border-color-a2.border{border-color:#f5d0d6!important}.complementary-1-bg-a3{background-color:#eba4af}.complementary-1-color-a3{color:#eba4af}.complementary-1-border-color-a3,.complementary-1-border-color-a3.border{border-color:#eba4af!important}.complementary-1-bg-a4{background-color:#e07b8b}.complementary-1-color-a4{color:#e07b8b}.complementary-1-border-color-a4,.complementary-1-border-color-a4.border{border-color:#e07b8b!important}.complementary-1-bg-a5{background-color:#d65669}.complementary-1-color-a5{color:#d65669}.complementary-1-border-color-a5,.complementary-1-border-color-a5.border{border-color:#d65669!important}.complementary-1-bg-a6{background-color:#cc334a}.complementary-1-color-a6{color:#cc334a}.complementary-1-border-color-a6,.complementary-1-border-color-a6.border{border-color:#cc334a!important}.complementary-1-bg-a7{background-color:#b32d41}.complementary-1-color-a7{color:#b32d41}.complementary-1-border-color-a7,.complementary-1-border-color-a7.border{border-color:#b32d41!important}.complementary-1-bg-a8{background-color:#992637}.complementary-1-color-a8{color:#992637}.complementary-1-border-color-a8,.complementary-1-border-color-a8.border{border-color:#992637!important}.complementary-1-bg-a9{background-color:#80202e}.complementary-1-color-a9{color:#80202e}.complementary-1-border-color-a9,.complementary-1-border-color-a9.border{border-color:#80202e!important}.complementary-1-bg-a10{background-color:#661a25}.complementary-1-color-a10{color:#661a25}.complementary-1-border-color-a10,.complementary-1-border-color-a10.border{border-color:#661a25!important}.complementary-1-bg-a11{background-color:#4d131c}.complementary-1-color-a11{color:#4d131c}.complementary-1-border-color-a11,.complementary-1-border-color-a11.border{border-color:#4d131c!important}.complementary-1-bg-a12{background-color:#330d12}.complementary-1-color-a12{color:#330d12}.complementary-1-border-color-a12,.complementary-1-border-color-a12.border{border-color:#330d12!important}.complementary-2-bg{background-color:#f90}.complementary-2-color{color:#f90}.complementary-2-border-color-,.complementary-2-border-color-.border{border-color:#f90!important}.complementary-2-bg-a1{background-color:#ffe6bf}.complementary-2-color-a1{color:#ffe6bf}.complementary-2-border-color-a1,.complementary-2-border-color-a1.border{border-color:#ffe6bf!important}.complementary-2-bg-a2{background-color:#f5ce93}.complementary-2-color-a2{color:#f5ce93}.complementary-2-border-color-a2,.complementary-2-border-color-a2.border{border-color:#f5ce93!important}.complementary-2-bg-a3{background-color:#ebb76a}.complementary-2-color-a3{color:#ebb76a}.complementary-2-border-color-a3,.complementary-2-border-color-a3.border{border-color:#ebb76a!important}.complementary-2-bg-a4{background-color:#e0a243}.complementary-2-color-a4{color:#e0a243}.complementary-2-border-color-a4,.complementary-2-border-color-a4.border{border-color:#e0a243!important}.complementary-2-bg-a5{background-color:#d68d20}.complementary-2-color-a5{color:#d68d20}.complementary-2-border-color-a5,.complementary-2-border-color-a5.border{border-color:#d68d20!important}.complementary-2-bg-a6{background-color:#cc7a00}.complementary-2-color-a6{color:#cc7a00}.complementary-2-border-color-a6,.complementary-2-border-color-a6.border{border-color:#cc7a00!important}.complementary-2-bg-a7{background-color:#b36b00}.complementary-2-color-a7{color:#b36b00}.complementary-2-border-color-a7,.complementary-2-border-color-a7.border{border-color:#b36b00!important}.complementary-2-bg-a8{background-color:#995c00}.complementary-2-color-a8{color:#995c00}.complementary-2-border-color-a8,.complementary-2-border-color-a8.border{border-color:#995c00!important}.complementary-2-bg-a9{background-color:#804d00}.complementary-2-color-a9{color:#804d00}.complementary-2-border-color-a9,.complementary-2-border-color-a9.border{border-color:#804d00!important}.complementary-2-bg-a10{background-color:#663d00}.complementary-2-color-a10{color:#663d00}.complementary-2-border-color-a10,.complementary-2-border-color-a10.border{border-color:#663d00!important}.complementary-2-bg-a11{background-color:#4d2e00}.complementary-2-color-a11{color:#4d2e00}.complementary-2-border-color-a11,.complementary-2-border-color-a11.border{border-color:#4d2e00!important}.complementary-2-bg-a12{background-color:#331f00}.complementary-2-color-a12{color:#331f00}.complementary-2-border-color-a12,.complementary-2-border-color-a12.border{border-color:#331f00!important}.complementary-3-bg{background-color:#00cf86}.complementary-3-color{color:#00cf86}.complementary-3-border-color-,.complementary-3-border-color-.border{border-color:#00cf86!important}.complementary-3-bg-a1{background-color:#bfffe9}.complementary-3-color-a1{color:#bfffe9}.complementary-3-border-color-a1,.complementary-3-border-color-a1.border{border-color:#bfffe9!important}.complementary-3-bg-a2{background-color:#93f5d3}.complementary-3-color-a2{color:#93f5d3}.complementary-3-border-color-a2,.complementary-3-border-color-a2.border{border-color:#93f5d3!important}.complementary-3-bg-a3{background-color:#6aebbd}.complementary-3-color-a3{color:#6aebbd}.complementary-3-border-color-a3,.complementary-3-border-color-a3.border{border-color:#6aebbd!important}.complementary-3-bg-a4{background-color:#43e0a9}.complementary-3-color-a4{color:#43e0a9}.complementary-3-border-color-a4,.complementary-3-border-color-a4.border{border-color:#43e0a9!important}.complementary-3-bg-a5{background-color:#20d696}.complementary-3-color-a5{color:#20d696}.complementary-3-border-color-a5,.complementary-3-border-color-a5.border{border-color:#20d696!important}.complementary-3-bg-a6{background-color:#00cc85}.complementary-3-color-a6{color:#00cc85}.complementary-3-border-color-a6,.complementary-3-border-color-a6.border{border-color:#00cc85!important}.complementary-3-bg-a7{background-color:#00b374}.complementary-3-color-a7{color:#00b374}.complementary-3-border-color-a7,.complementary-3-border-color-a7.border{border-color:#00b374!important}.complementary-3-bg-a8{background-color:#009963}.complementary-3-color-a8{color:#009963}.complementary-3-border-color-a8,.complementary-3-border-color-a8.border{border-color:#009963!important}.complementary-3-bg-a9{background-color:#008053}.complementary-3-color-a9{color:#008053}.complementary-3-border-color-a9,.complementary-3-border-color-a9.border{border-color:#008053!important}.complementary-3-bg-a10{background-color:#006642}.complementary-3-color-a10{color:#006642}.complementary-3-border-color-a10,.complementary-3-border-color-a10.border{border-color:#006642!important}.complementary-3-bg-a11{background-color:#004d32}.complementary-3-color-a11{color:#004d32}.complementary-3-border-color-a11,.complementary-3-border-color-a11.border{border-color:#004d32!important}.complementary-3-bg-a12{background-color:#003321}.complementary-3-color-a12{color:#003321}.complementary-3-border-color-a12,.complementary-3-border-color-a12.border{border-color:#003321!important}.analogue-1-bg{background-color:#3126ff}.analogue-1-color{color:#3126ff}.analogue-1-border-color-,.analogue-1-border-color-.border{border-color:#3126ff!important}.analogue-1-bg-b1{background-color:#3126ff}.analogue-1-color-b1{color:#3126ff}.analogue-1-border-color-b1,.analogue-1-border-color-b1.border{border-color:#3126ff!important}.analogue-1-bg-b2{background-color:#4239e6}.analogue-1-color-b2{color:#4239e6}.analogue-1-border-color-b2,.analogue-1-border-color-b2.border{border-color:#4239e6!important}.analogue-1-bg-b3{background-color:#4e47cc}.analogue-1-color-b3{color:#4e47cc}.analogue-1-border-color-b3,.analogue-1-border-color-b3.border{border-color:#4e47cc!important}.analogue-1-bg-b4{background-color:#5550b3}.analogue-1-color-b4{color:#5550b3}.analogue-1-border-color-b4,.analogue-1-border-color-b4.border{border-color:#5550b3!important}.analogue-1-bg-b5{background-color:#585499}.analogue-1-color-b5{color:#585499}.analogue-1-border-color-b5,.analogue-1-border-color-b5.border{border-color:#585499!important}.analogue-1-bg-b6{background-color:#555380}.analogue-1-color-b6{color:#555380}.analogue-1-border-color-b6,.analogue-1-border-color-b6.border{border-color:#555380!important}.analogue-1-bg-b7{background-color:#4e4d66}.analogue-1-color-b7{color:#4e4d66}.analogue-1-border-color-b7,.analogue-1-border-color-b7.border{border-color:#4e4d66!important}.analogue-1-bg-b8{background-color:#42414d}.analogue-1-color-b8{color:#42414d}.analogue-1-border-color-b8,.analogue-1-border-color-b8.border{border-color:#42414d!important}.analogue-2-bg{background-color:#0bd9d2}.analogue-2-color{color:#0bd9d2}.analogue-2-border-color-,.analogue-2-border-color-.border{border-color:#0bd9d2!important}.analogue-2-bg-b1{background-color:#0bd9d2}.analogue-2-color-b1{color:#0bd9d2}.analogue-2-border-color-b1,.analogue-2-border-color-b1.border{border-color:#0bd9d2!important}.analogue-2-bg-b2{background-color:#1dbfba}.analogue-2-color-b2{color:#1dbfba}.analogue-2-border-color-b2,.analogue-2-border-color-b2.border{border-color:#1dbfba!important}.analogue-2-bg-b3{background-color:#29a6a2}.analogue-2-color-b3{color:#29a6a2}.analogue-2-border-color-b3,.analogue-2-border-color-b3.border{border-color:#29a6a2!important}.analogue-2-bg-b4{background-color:#318c89}.analogue-2-color-b4{color:#318c89}.analogue-2-border-color-b4,.analogue-2-border-color-b4.border{border-color:#318c89!important}.analogue-2-bg-b5{background-color:#347371}.analogue-2-color-b5{color:#347371}.analogue-2-border-color-b5,.analogue-2-border-color-b5.border{border-color:#347371!important}.analogue-2-bg-b6{background-color:#315958}.analogue-2-color-b6{color:#315958}.analogue-2-border-color-b6,.analogue-2-border-color-b6.border{border-color:#315958!important}.analogue-2-bg-b7{background-color:#29403f}.analogue-2-color-b7{color:#29403f}.analogue-2-border-color-b7,.analogue-2-border-color-b7.border{border-color:#29403f!important}.analogue-2-bg-b8{background-color:#1d2626}.analogue-2-color-b8{color:#1d2626}.analogue-2-border-color-b8,.analogue-2-border-color-b8.border{border-color:#1d2626!important}.complementary-1-bg-b1{background-color:#f73e5a}.complementary-1-color-b1{color:#f73e5a}.complementary-1-border-color-b1,.complementary-1-border-color-b1.border{border-color:#f73e5a!important}.complementary-1-bg-b2{background-color:#de4e63}.complementary-1-color-b2{color:#de4e63}.complementary-1-border-color-b2,.complementary-1-border-color-b2.border{border-color:#de4e63!important}.complementary-1-bg-b3{background-color:#c45869}.complementary-1-color-b3{color:#c45869}.complementary-1-border-color-b3,.complementary-1-border-color-b3.border{border-color:#c45869!important}.complementary-1-bg-b4{background-color:#ab5e69}.complementary-1-color-b4{color:#ab5e69}.complementary-1-border-color-b4,.complementary-1-border-color-b4.border{border-color:#ab5e69!important}.complementary-1-bg-b5{background-color:#915e66}.complementary-1-color-b5{color:#915e66}.complementary-1-border-color-b5,.complementary-1-border-color-b5.border{border-color:#915e66!important}.complementary-1-bg-b6{background-color:#785a5e}.complementary-1-color-b6{color:#785a5e}.complementary-1-border-color-b6,.complementary-1-border-color-b6.border{border-color:#785a5e!important}.complementary-1-bg-b7{background-color:#5e5052}.complementary-1-color-b7{color:#5e5052}.complementary-1-border-color-b7,.complementary-1-border-color-b7.border{border-color:#5e5052!important}.complementary-1-bg-b8{background-color:#454142}.complementary-1-color-b8{color:#454142}.complementary-1-border-color-b8,.complementary-1-border-color-b8.border{border-color:#454142!important}.complementary-2-bg-b1{background-color:#f90}.complementary-2-color-b1{color:#f90}.complementary-2-border-color-b1,.complementary-2-border-color-b1.border{border-color:#f90!important}.complementary-2-bg-b2{background-color:#e69317}.complementary-2-color-b2{color:#e69317}.complementary-2-border-color-b2,.complementary-2-border-color-b2.border{border-color:#e69317!important}.complementary-2-bg-b3{background-color:#cc8b29}.complementary-2-color-b3{color:#cc8b29}.complementary-2-border-color-b3,.complementary-2-border-color-b3.border{border-color:#cc8b29!important}.complementary-2-bg-b4{background-color:#b38136}.complementary-2-color-b4{color:#b38136}.complementary-2-border-color-b4,.complementary-2-border-color-b4.border{border-color:#b38136!important}.complementary-2-bg-b5{background-color:#99743d}.complementary-2-color-b5{color:#99743d}.complementary-2-border-color-b5,.complementary-2-border-color-b5.border{border-color:#99743d!important}.complementary-2-bg-b6{background-color:#806640}.complementary-2-color-b6{color:#806640}.complementary-2-border-color-b6,.complementary-2-border-color-b6.border{border-color:#806640!important}.complementary-2-bg-b7{background-color:#66563d}.complementary-2-color-b7{color:#66563d}.complementary-2-border-color-b7,.complementary-2-border-color-b7.border{border-color:#66563d!important}.complementary-2-bg-b8{background-color:#4d4336}.complementary-2-color-b8{color:#4d4336}.complementary-2-border-color-b8,.complementary-2-border-color-b8.border{border-color:#4d4336!important}.complementary-3-bg-b1{background-color:#00cf86}.complementary-3-color-b1{color:#00cf86}.complementary-3-border-color-b1,.complementary-3-border-color-b1.border{border-color:#00cf86!important}.complementary-3-bg-b2{background-color:#12b57c}.complementary-3-color-b2{color:#12b57c}.complementary-3-border-color-b2,.complementary-3-border-color-b2.border{border-color:#12b57c!important}.complementary-3-bg-b3{background-color:#1f9c70}.complementary-3-color-b3{color:#1f9c70}.complementary-3-border-color-b3,.complementary-3-border-color-b3.border{border-color:#1f9c70!important}.complementary-3-bg-b4{background-color:#278262}.complementary-3-color-b4{color:#278262}.complementary-3-border-color-b4,.complementary-3-border-color-b4.border{border-color:#278262!important}.complementary-3-bg-b5{background-color:#2a6953}.complementary-3-color-b5{color:#2a6953}.complementary-3-border-color-b5,.complementary-3-border-color-b5.border{border-color:#2a6953!important}.complementary-3-bg-b6{background-color:#284f41}.complementary-3-color-b6{color:#284f41}.complementary-3-border-color-b6,.complementary-3-border-color-b6.border{border-color:#284f41!important}.complementary-3-bg-b7{background-color:#20362e}.complementary-3-color-b7{color:#20362e}.complementary-3-border-color-b7,.complementary-3-border-color-b7.border{border-color:#20362e!important}.complementary-3-bg-b8{background-color:#141c19}.complementary-3-color-b8{color:#141c19}.complementary-3-border-color-b8,.complementary-3-border-color-b8.border{border-color:#141c19!important}.neutral-1-bg{background-color:#17324d}.neutral-1-color{color:#17324d}.neutral-1-border-color-,.neutral-1-border-color-.border{border-color:#17324d!important}.neutral-1-bg-a1{background-color:#ebeced}.neutral-1-color-a1{color:#ebeced}.neutral-1-border-color-a1,.neutral-1-border-color-a1.border{border-color:#ebeced!important}.neutral-1-bg-a2{background-color:#d9dadb}.neutral-1-color-a2{color:#d9dadb}.neutral-1-border-color-a2,.neutral-1-border-color-a2.border{border-color:#d9dadb!important}.neutral-1-bg-a3{background-color:#c5c7c9}.neutral-1-color-a3{color:#c5c7c9}.neutral-1-border-color-a3,.neutral-1-border-color-a3.border{border-color:#c5c7c9!important}.neutral-1-bg-a4{background-color:#adb2b8}.neutral-1-color-a4{color:#adb2b8}.neutral-1-border-color-a4,.neutral-1-border-color-a4.border{border-color:#adb2b8!important}.neutral-1-bg-a5{background-color:#959da6}.neutral-1-color-a5{color:#959da6}.neutral-1-border-color-a5,.neutral-1-border-color-a5.border{border-color:#959da6!important}.neutral-1-bg-a6{background-color:#768594}.neutral-1-color-a6{color:#768594}.neutral-1-border-color-a6,.neutral-1-border-color-a6.border{border-color:#768594!important}.neutral-1-bg-a7{background-color:#5b6f82}.neutral-1-color-a7{color:#5b6f82}.neutral-1-border-color-a7,.neutral-1-border-color-a7.border{border-color:#5b6f82!important}.neutral-1-bg-a8{background-color:#435a70}.neutral-1-color-a8{color:#435a70}.neutral-1-border-color-a8,.neutral-1-border-color-a8.border{border-color:#435a70!important}.neutral-1-bg-a9{background-color:#2f475e}.neutral-1-color-a9{color:#2f475e}.neutral-1-border-color-a9,.neutral-1-border-color-a9.border{border-color:#2f475e!important}.neutral-1-bg-a10{background-color:#17324d}.neutral-1-color-a10{color:#17324d}.neutral-1-border-color-a10,.neutral-1-border-color-a10.border{border-color:#17324d!important}.neutral-2-bg{background-color:#e6ecf2}.neutral-2-color{color:#e6ecf2}.neutral-2-border-color-{border-color:#e6ecf2}.neutral-2-bg-b1{background-color:#e6ecf2}.neutral-2-color-b1{color:#e6ecf2}.neutral-2-border-color-b1,.neutral-2-border-color-b1.border{border-color:#e6ecf2!important}.neutral-2-bg-b2{background-color:#c2c7cc}.neutral-2-color-b2{color:#c2c7cc}.neutral-2-border-color-b2,.neutral-2-border-color-b2.border{border-color:#c2c7cc!important}.neutral-2-bg-b3{background-color:#9da2a6}.neutral-2-color-b3{color:#9da2a6}.neutral-2-border-color-b3,.neutral-2-border-color-b3.border{border-color:#9da2a6!important}.neutral-2-bg-b4{background-color:#797c80}.neutral-2-color-b4{color:#797c80}.neutral-2-border-color-b4,.neutral-2-border-color-b4.border{border-color:#797c80!important}.neutral-2-bg-b5{background-color:#565759}.neutral-2-color-b5{color:#565759}.neutral-2-border-color-b5,.neutral-2-border-color-b5.border{border-color:#565759!important}.neutral-2-bg-b6{background-color:#2f3133}.neutral-2-color-b6{color:#2f3133}.neutral-2-border-color-b6,.neutral-2-border-color-b6.border{border-color:#2f3133!important}.neutral-2-bg-b7{background-color:#0c0c0d}.neutral-2-color-b7{color:#0c0c0d}.neutral-2-border-color-b7,.neutral-2-border-color-b7.border{border-color:#0c0c0d!important}.neutral-2-bg-a1{background-color:#e6ecf2}.neutral-2-color-a1{color:#e6ecf2}.neutral-2-border-color-a1,.neutral-2-border-color-a1.border{border-color:#e6ecf2!important}.neutral-2-bg-a2{background-color:#bcc4cc}.neutral-2-color-a2{color:#bcc4cc}.neutral-2-border-color-a2,.neutral-2-border-color-a2.border{border-color:#bcc4cc!important}.neutral-2-bg-a3{background-color:#9aa0a6}.neutral-2-color-a3{color:#9aa0a6}.neutral-2-border-color-a3,.neutral-2-border-color-a3.border{border-color:#9aa0a6!important}.neutral-2-bg-a4{background-color:#777b80}.neutral-2-color-a4{color:#777b80}.neutral-2-border-color-a4,.neutral-2-border-color-a4.border{border-color:#777b80!important}.neutral-2-bg-a5{background-color:#535659}.neutral-2-color-a5{color:#535659}.neutral-2-border-color-a5,.neutral-2-border-color-a5.border{border-color:#535659!important}.neutral-2-bg-a6{background-color:#2f3133}.neutral-2-color-a6{color:#2f3133}.neutral-2-border-color-a6,.neutral-2-border-color-a6.border{border-color:#2f3133!important}.neutral-2-bg-a7{background-color:#17181a}.neutral-2-color-a7{color:#17181a}.neutral-2-border-color-a7,.neutral-2-border-color-a7.border{border-color:#17181a!important}.lightgrey-bg-a1{background-color:#e8f2fc}.lightgrey-color-a1{color:#e8f2fc}.lightgrey-border-color-a1,.lightgrey-border-color-a1.border{border-color:#e8f2fc!important}.lightgrey-bg-a2{background-color:#edf5fc}.lightgrey-color-a2{color:#edf5fc}.lightgrey-border-color-a2,.lightgrey-border-color-a2.border{border-color:#edf5fc!important}.lightgrey-bg-a3{background-color:#f2f7fc}.lightgrey-color-a3{color:#f2f7fc}.lightgrey-border-color-a3,.lightgrey-border-color-a3.border{border-color:#f2f7fc!important}.lightgrey-bg-a4{background-color:#f5f9fc}.lightgrey-color-a4{color:#f5f9fc}.lightgrey-border-color-a4,.lightgrey-border-color-a4.border{border-color:#f5f9fc!important}.lightgrey-bg-b1{background-color:#e6f0fa}.lightgrey-color-b1{color:#e6f0fa}.lightgrey-border-color-b1,.lightgrey-border-color-b1.border{border-color:#e6f0fa!important}.lightgrey-bg-b2{background-color:#ebf2fa}.lightgrey-color-b2{color:#ebf2fa}.lightgrey-border-color-b2,.lightgrey-border-color-b2.border{border-color:#ebf2fa!important}.lightgrey-bg-b3{background-color:#edf4fa}.lightgrey-color-b3{color:#edf4fa}.lightgrey-border-color-b3,.lightgrey-border-color-b3.border{border-color:#edf4fa!important}.lightgrey-bg-b4{background-color:#f2f6fa}.lightgrey-color-b4{color:#f2f6fa}.lightgrey-border-color-b4,.lightgrey-border-color-b4.border{border-color:#f2f6fa!important}.lightgrey-bg-c1{background-color:#f7f9fa}.lightgrey-color-c1{color:#f7f9fa}.lightgrey-border-color-c1,.lightgrey-border-color-c1.border{border-color:#f7f9fa!important}.lightgrey-bg-c2{background-color:#f5f6f7}.lightgrey-color-c2{color:#f5f6f7}.lightgrey-border-color-c2,.lightgrey-border-color-c2.border{border-color:#f5f6f7!important}:root{--blue:#0073e6;--indigo:#554dff;--purple:#9e99ff;--pink:#ffb3bf;--red:#f73e5a;--orange:#f90;--yellow:#ffda73;--green:#00cc85;--teal:#0bd9d2;--cyan:#00fff7;--white:#fff;--gray:#656566;--gray-dark:#323333;--italia:#06c;--gray-secondary:#5c6f82;--gray-tertiary:#5a768a;--gray-quaternary:#fcfdff;--primary:#0073e6;--secondary:#5c6f82;--success:#00cc85;--info:#979899;--warning:#f90;--danger:#f73e5a;--light:#e9e6f2;--dark:#17324d;--100:#e3e4e6;--200:#cacacc;--300:#b1b1b3;--400:#979899;--500:#7e7f80;--600:#656566;--700:#4c4c4d;--800:#323333;--900:#19191a;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:"Titillium Web",Geneva,Tahoma,sans-serif;--font-family-monospace:"Roboto Mono",monospace}@media print{*,:after,:before{text-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #7e7f80;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{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 #b1b1b3!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#d6dce3}.table .thead-dark th{color:inherit;border-color:#d6dce3}}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Titillium Web,Geneva,Tahoma,sans-serif;font-size:16px;font-size:1rem;font-weight:300;line-height:1.5;color:#19191a;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:8px}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0073e6;text-decoration:none;background-color:transparent}a:hover{color:#004d99;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:Roboto Mono,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:1em;padding-bottom:1em;color:#5a768a;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:24px;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:8px;font-weight:700;line-height:1.2}.h1,h1{font-size:40px;font-size:2.5rem}.h2,h2{font-size:32px;font-size:2rem}.h3,h3{font-size:28px;font-size:1.75rem}.h4,h4{font-size:24px;font-size:1.5rem}.h5,h5{font-size:20px;font-size:1.25rem}.h6,h6{font-size:16px;font-size:1rem}.lead{font-size:20px;font-size:1.25rem;font-weight:300}.display-1{font-size:56px;font-size:3.5rem}.display-1,.display-2{font-weight:700;line-height:1.2}.display-2{font-size:40px;font-size:2.5rem}.display-3{font-size:24px;font-size:1.5rem}.display-3,.display-4{font-weight:700;line-height:1.2}.display-4{font-size:20px;font-size:1.25rem}hr{margin-top:16px;margin-bottom:16px;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:12.432px;font-size:.777rem}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:16px;font-size:20px;font-size:1.25rem}.blockquote-footer{display:block;font-size:12.432px;font-size:.777rem}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #b1b1b3;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.figure{display:inline-block}.figure-img{margin-bottom:8px;line-height:1}.figure-caption{font-size:90%;color:#656566}code{font-size:87.5%;color:#17324d;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#19191a;border-radius:2px;-webkit-box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25);box-shadow:inset 0 -.1rem 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;font-size:87.5%;color:#19191a}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:6px;padding-left:6px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:6px;padding-left:6px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-6px;margin-left:-6px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.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-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.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-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.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-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:6px;padding-left:6px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1,.col-auto{-webkit-box-flex:0}.col-1{-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-2,.col-3{-webkit-box-flex:0}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-4,.col-5{-webkit-box-flex:0}.col-5{-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-6,.col-7{-webkit-box-flex:0}.col-7{-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-8,.col-9{-webkit-box-flex:0}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-10,.col-11{-webkit-box-flex:0}.col-11{-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:16px;color:#19191a}.table td,.table th{padding:1em;vertical-align:top;border-top:1px solid #d6dce3}.table thead th{vertical-align:bottom;border-bottom:2px solid #d6dce3}.table tbody+tbody{border-top:2px solid #d6dce3}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #d6dce3}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:#f6f7f9}.table-hover tbody tr:hover{color:#19191a;background-color:#e5f1fa}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8d8f8}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7ab6f2}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a1cbf6}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d1d7dc}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#aab4be}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c3cad1}.table-success,.table-success>td,.table-success>th{background-color:#b8f1dd}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#7ae4c0}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#a3edd3}.table-info,.table-info>td,.table-info>th{background-color:#e2e2e2}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#c9c9ca}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#d5d5d5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffe2b8}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffca7a}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffd89f}.table-danger,.table-danger>td,.table-danger>th{background-color:#fdc9d1}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#fb9ba9}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#fcb0bc}.table-light,.table-light>td,.table-light>th{background-color:#f9f8fb}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#f4f2f8}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ebe8f2}.table-dark,.table-dark>td,.table-dark>th{background-color:#bec6cd}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#8694a2}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b0b9c2}.table-100,.table-100>td,.table-100>th{background-color:#f7f7f8}.table-100 tbody+tbody,.table-100 td,.table-100 th,.table-100 thead th{border-color:#f0f1f2}.table-hover .table-100:hover,.table-hover .table-100:hover>td,.table-hover .table-100:hover>th{background-color:#e9e9ec}.table-200,.table-200>td,.table-200>th{background-color:#f0f0f1}.table-200 tbody+tbody,.table-200 td,.table-200 th,.table-200 thead th{border-color:#e3e3e4}.table-hover .table-200:hover,.table-hover .table-200:hover>td,.table-hover .table-200:hover>th{background-color:#e3e3e5}.table-300,.table-300>td,.table-300>th{background-color:#e9e9ea}.table-300 tbody+tbody,.table-300 td,.table-300 th,.table-300 thead th{border-color:#d6d6d7}.table-hover .table-300:hover,.table-hover .table-300:hover>td,.table-hover .table-300:hover>th{background-color:#dcdcde}.table-400,.table-400>td,.table-400>th{background-color:#e2e2e2}.table-400 tbody+tbody,.table-400 td,.table-400 th,.table-400 thead th{border-color:#c9c9ca}.table-hover .table-400:hover,.table-hover .table-400:hover>td,.table-hover .table-400:hover>th{background-color:#d5d5d5}.table-500,.table-500>td,.table-500>th{background-color:#dbdbdb}.table-500 tbody+tbody,.table-500 td,.table-500 th,.table-500 thead th{border-color:#bcbcbd}.table-hover .table-500:hover,.table-hover .table-500:hover>td,.table-hover .table-500:hover>th{background-color:#cecece}.table-600,.table-600>td,.table-600>th{background-color:#d4d4d4}.table-600 tbody+tbody,.table-600 td,.table-600 th,.table-600 thead th{border-color:#afafaf}.table-hover .table-600:hover,.table-hover .table-600:hover>td,.table-hover .table-600:hover>th{background-color:#c7c7c7}.table-700,.table-700>td,.table-700>th{background-color:#cdcdcd}.table-700 tbody+tbody,.table-700 td,.table-700 th,.table-700 thead th{border-color:#a2a2a2}.table-hover .table-700:hover,.table-hover .table-700:hover>td,.table-hover .table-700:hover>th{background-color:silver}.table-800,.table-800>td,.table-800>th{background-color:#c6c6c6}.table-800 tbody+tbody,.table-800 td,.table-800 th,.table-800 thead th{border-color:#949595}.table-hover .table-800:hover,.table-hover .table-800:hover>td,.table-hover .table-800:hover>th{background-color:#b9b9b9}.table-900,.table-900>td,.table-900>th{background-color:#bfbfbf}.table-900 tbody+tbody,.table-900 td,.table-900 th,.table-900 thead th{border-color:#878788}.table-hover .table-900:hover,.table-hover .table-900:hover>td,.table-hover .table-900:hover>th{background-color:#b2b2b2}.table-active,.table-active>td,.table-active>th{background-color:#e5f1fa}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#d0e5f6}.table .thead-dark th{color:#fff;background-color:#323333;border-color:#464646}.table .thead-light th{color:#4c4c4d;background-color:#cacacc;border-color:#d6dce3}.table-dark{color:#fff;background-color:#323333}.table-dark td,.table-dark th,.table-dark thead th{border-color:#464646}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:16px;font-size:1rem;font-weight:300;line-height:1.5;color:#4c4c4d;background-color:#fff;background-clip:padding-box;border:1px solid #979899;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 .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{-webkit-transition:none;transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#4c4c4d;background-color:#fff;border-color:#5c6f82;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.25);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.25)}.form-control::-webkit-input-placeholder{color:#656566;opacity:1}.form-control::-moz-placeholder{color:#656566;opacity:1}.form-control::-ms-input-placeholder{color:#656566;opacity:1}.form-control::placeholder{color:#656566;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#cacacc;opacity:1}select.form-control:focus::-ms-value{color:#4c4c4d;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:20px;font-size:1.25rem;line-height:1.556}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:14px;font-size:.875rem;line-height:1.428}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#19191a;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.428em + .5rem + 2px);padding:.25rem .5rem;font-size:14px;font-size:.875rem;line-height:1.428;border-radius:2px}.form-control-lg{height:calc(1.556em + 1rem + 2px);padding:.5rem 1rem;font-size:20px;font-size:1.25rem;line-height:1.556;border-radius:8px}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#5a768a}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:12.432px;font-size:.777rem;color:#00cc85}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:1rem;margin-top:.1rem;font-size:14px;font-size:.875rem;line-height:1.5;color:#19191a;background-color:#00cc85;border-radius:4px}.form-control.is-valid,.was-validated .form-control:valid{border-color:#00cc85;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2300cc85' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#00cc85;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#00cc85;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23323333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2300cc85' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#00cc85;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#00cc85}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#00cc85}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#00cc85}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#00ffa6;background-color:#00ffa6}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#00cc85}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#00cc85;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:12.432px;font-size:.777rem;color:#f73e5a}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:1rem;margin-top:.1rem;font-size:14px;font-size:.875rem;line-height:1.5;color:#19191a;background-color:#f73e5a;border-radius:4px}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#f73e5a;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f73e5a' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23f73e5a' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#f73e5a;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#f73e5a;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23323333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f73e5a' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23f73e5a' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#f73e5a;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#f73e5a}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#f73e5a}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#f73e5a}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#f96f84;background-color:#f96f84}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#f73e5a}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#f73e5a;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .form-group,.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;align-items:center;margin-bottom:0}.form-inline .form-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:600;color:#19191a;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0 solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:4px;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{-webkit-transition:none;transition:none}}.btn:hover{color:#19191a;text-decoration:none}.btn.focus,.btn:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.25);box-shadow:0 0 0 .2rem rgba(0,115,230,.25)}.btn.disabled,.btn:disabled{opacity:.65;-webkit-box-shadow:none;box-shadow:none}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):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:not(:disabled):not(.disabled).active:focus,.btn:not(:disabled):not(.disabled):active:focus{-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.25),inset 0 3px 5px rgba(0,0,0,.125);box-shadow:0 0 0 .2rem rgba(0,115,230,.25),inset 0 3px 5px rgba(0,0,0,.125)}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#0073e6;border-color:#0073e6;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-primary:hover{color:#fff;background-color:#0060bf;border-color:#0059b3}.btn-primary.focus,.btn-primary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0073e6;border-color:#0073e6}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0059b3;border-color:#0053a6}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5)}.btn-secondary{color:#fff;background-color:#5c6f82;border-color:#5c6f82;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-secondary:hover{color:#fff;background-color:#4c5c6c;border-color:#475664}.btn-secondary.focus,.btn-secondary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(92,111,130,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#5c6f82;border-color:#5c6f82}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#475664;border-color:#424f5d}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5)}.btn-success{color:#19191a;background-color:#00cc85;border-color:#00cc85;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-success:hover{color:#fff;background-color:#00a66c;border-color:#009963}.btn-success.focus,.btn-success:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,204,133,.5)}.btn-success.disabled,.btn-success:disabled{color:#19191a;background-color:#00cc85;border-color:#00cc85}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#009963;border-color:#008c5b}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5)}.btn-info{color:#19191a;background-color:#979899;border-color:#979899;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-info:hover{color:#19191a;background-color:#848586;border-color:#7e7e80}.btn-info.focus,.btn-info:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5)}.btn-info.disabled,.btn-info:disabled{color:#19191a;background-color:#979899;border-color:#979899}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#19191a;background-color:#7e7e80;border-color:#777879}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-warning{color:#19191a;background-color:#f90;border-color:#f90;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-warning:hover{color:#19191a;background-color:#d98200;border-color:#cc7a00}.btn-warning.focus,.btn-warning:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(255,153,0,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#19191a;background-color:#f90;border-color:#f90}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#19191a;background-color:#cc7a00;border-color:#bf7300}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5)}.btn-danger{color:#19191a;background-color:#f73e5a;border-color:#f73e5a;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger:hover{color:#fff;background-color:#f6193a;border-color:#f50d30}.btn-danger.focus,.btn-danger:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(247,62,90,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#19191a;background-color:#f73e5a;border-color:#f73e5a}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#f50d30;border-color:#ec092b}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5)}.btn-light{color:#19191a;background-color:#e9e6f2;border-color:#e9e6f2;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-light:hover{color:#19191a;background-color:#d3cde5;border-color:#ccc4e1}.btn-light.focus,.btn-light:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(233,230,242,.5)}.btn-light.disabled,.btn-light:disabled{color:#19191a;background-color:#e9e6f2;border-color:#e9e6f2}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#19191a;background-color:#ccc4e1;border-color:#c4bcdd}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5)}.btn-dark{color:#fff;background-color:#17324d;border-color:#17324d;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-dark:hover{color:#fff;background-color:#0e1f2f;border-color:#0b1825}.btn-dark.focus,.btn-dark:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(23,50,77,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#17324d;border-color:#17324d}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#0b1825;border-color:#08121b}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5)}.btn-100{color:#19191a;background-color:#e3e4e6;border-color:#e3e4e6;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-100:hover{color:#19191a;background-color:#cfd0d3;border-color:#c9cacd}.btn-100.focus,.btn-100:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(227,228,230,.5)}.btn-100.disabled,.btn-100:disabled{color:#19191a;background-color:#e3e4e6;border-color:#e3e4e6}.btn-100:not(:disabled):not(.disabled).active,.btn-100:not(:disabled):not(.disabled):active,.show>.btn-100.dropdown-toggle{color:#19191a;background-color:#c9cacd;border-color:#c2c3c7}.btn-100:not(:disabled):not(.disabled).active:focus,.btn-100:not(:disabled):not(.disabled):active:focus,.show>.btn-100.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5)}.btn-200{color:#19191a;background-color:#cacacc;border-color:#cacacc;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-200:hover{color:#19191a;background-color:#b6b7b9;border-color:#b0b1b3}.btn-200.focus,.btn-200:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(202,202,204,.5)}.btn-200.disabled,.btn-200:disabled{color:#19191a;background-color:#cacacc;border-color:#cacacc}.btn-200:not(:disabled):not(.disabled).active,.btn-200:not(:disabled):not(.disabled):active,.show>.btn-200.dropdown-toggle{color:#19191a;background-color:#b0b1b3;border-color:#a9aaad}.btn-200:not(:disabled):not(.disabled).active:focus,.btn-200:not(:disabled):not(.disabled):active:focus,.show>.btn-200.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5)}.btn-300{color:#19191a;background-color:#b1b1b3;border-color:#b1b1b3;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-300:hover{color:#19191a;background-color:#9d9ea0;border-color:#979899}.btn-300.focus,.btn-300:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(177,177,179,.5)}.btn-300.disabled,.btn-300:disabled{color:#19191a;background-color:#b1b1b3;border-color:#b1b1b3}.btn-300:not(:disabled):not(.disabled).active,.btn-300:not(:disabled):not(.disabled):active,.show>.btn-300.dropdown-toggle{color:#19191a;background-color:#979899;border-color:#909193}.btn-300:not(:disabled):not(.disabled).active:focus,.btn-300:not(:disabled):not(.disabled):active:focus,.show>.btn-300.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5)}.btn-400{color:#19191a;background-color:#979899;border-color:#979899;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-400:hover{color:#19191a;background-color:#848586;border-color:#7e7e80}.btn-400.focus,.btn-400:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5)}.btn-400.disabled,.btn-400:disabled{color:#19191a;background-color:#979899;border-color:#979899}.btn-400:not(:disabled):not(.disabled).active,.btn-400:not(:disabled):not(.disabled):active,.show>.btn-400.dropdown-toggle{color:#19191a;background-color:#7e7e80;border-color:#777879}.btn-400:not(:disabled):not(.disabled).active:focus,.btn-400:not(:disabled):not(.disabled):active:focus,.show>.btn-400.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-500{color:#19191a;background-color:#7e7f80;border-color:#7e7f80;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-500:hover{color:#fff;background-color:#6b6b6c;border-color:#656566}.btn-500.focus,.btn-500:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(126,127,128,.5)}.btn-500.disabled,.btn-500:disabled{color:#19191a;background-color:#7e7f80;border-color:#7e7f80}.btn-500:not(:disabled):not(.disabled).active,.btn-500:not(:disabled):not(.disabled):active,.show>.btn-500.dropdown-toggle{color:#fff;background-color:#656566;border-color:#5f5f5f}.btn-500:not(:disabled):not(.disabled).active:focus,.btn-500:not(:disabled):not(.disabled):active:focus,.show>.btn-500.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5)}.btn-600{color:#fff;background-color:#656566;border-color:#656566;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-600:hover{color:#fff;background-color:#525253;border-color:#4c4c4c}.btn-600.focus,.btn-600:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(101,101,102,.5)}.btn-600.disabled,.btn-600:disabled{color:#fff;background-color:#656566;border-color:#656566}.btn-600:not(:disabled):not(.disabled).active,.btn-600:not(:disabled):not(.disabled):active,.show>.btn-600.dropdown-toggle{color:#fff;background-color:#4c4c4c;border-color:#454546}.btn-600:not(:disabled):not(.disabled).active:focus,.btn-600:not(:disabled):not(.disabled):active:focus,.show>.btn-600.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5)}.btn-700{color:#fff;background-color:#4c4c4d;border-color:#4c4c4d;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-700:hover{color:#fff;background-color:#393939;border-color:#323233}.btn-700.focus,.btn-700:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(76,76,77,.5)}.btn-700.disabled,.btn-700:disabled{color:#fff;background-color:#4c4c4d;border-color:#4c4c4d}.btn-700:not(:disabled):not(.disabled).active,.btn-700:not(:disabled):not(.disabled):active,.show>.btn-700.dropdown-toggle{color:#fff;background-color:#323233;border-color:#2c2c2c}.btn-700:not(:disabled):not(.disabled).active:focus,.btn-700:not(:disabled):not(.disabled):active:focus,.show>.btn-700.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5)}.btn-800{color:#fff;background-color:#323333;border-color:#323333;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-800:hover{color:#fff;background-color:#1f2020;border-color:#191919}.btn-800.focus,.btn-800:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(50,51,51,.5)}.btn-800.disabled,.btn-800:disabled{color:#fff;background-color:#323333;border-color:#323333}.btn-800:not(:disabled):not(.disabled).active,.btn-800:not(:disabled):not(.disabled):active,.show>.btn-800.dropdown-toggle{color:#fff;background-color:#191919;border-color:#131313}.btn-800:not(:disabled):not(.disabled).active:focus,.btn-800:not(:disabled):not(.disabled):active:focus,.show>.btn-800.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5)}.btn-900{color:#fff;background-color:#19191a;border-color:#19191a;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-900:hover{color:#fff;background-color:#060606;border-color:#000}.btn-900.focus,.btn-900:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(25,25,26,.5)}.btn-900.disabled,.btn-900:disabled{color:#fff;background-color:#19191a;border-color:#19191a}.btn-900:not(:disabled):not(.disabled).active,.btn-900:not(:disabled):not(.disabled):active,.show>.btn-900.dropdown-toggle{color:#fff;background-color:#000;border-color:#000}.btn-900:not(:disabled):not(.disabled).active:focus,.btn-900:not(:disabled):not(.disabled):active:focus,.show>.btn-900.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5)}.btn-outline-primary{color:#0073e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #0073e6;box-shadow:inset 0 0 0 1px #0073e6}.btn-outline-primary:hover{color:#0959aa;-webkit-box-shadow:inset 0 0 0 1px #0959aa;box-shadow:inset 0 0 0 1px #0959aa}.btn-outline-primary.focus,.btn-outline-primary:focus{-webkit-box-shadow:inset 0 0 0 1px #0073e6,0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 0 0 1px #0073e6,0 0 0 .2rem rgba(0,115,230,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0073e6;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#0073e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #0073e6;box-shadow:inset 0 0 0 1px #0073e6}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5)}.btn-outline-secondary{color:#5c6f82;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #5c6f82;box-shadow:inset 0 0 0 1px #5c6f82}.btn-outline-secondary:hover{color:#50565c;-webkit-box-shadow:inset 0 0 0 1px #50565c;box-shadow:inset 0 0 0 1px #50565c}.btn-outline-secondary.focus,.btn-outline-secondary:focus{-webkit-box-shadow:inset 0 0 0 1px #5c6f82,0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 0 0 1px #5c6f82,0 0 0 .2rem rgba(92,111,130,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#5c6f82;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#5c6f82;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #5c6f82;box-shadow:inset 0 0 0 1px #5c6f82}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5)}.btn-outline-success{color:#00cc85;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #00cc85;box-shadow:inset 0 0 0 1px #00cc85}.btn-outline-success:hover{color:#089161;-webkit-box-shadow:inset 0 0 0 1px #089161;box-shadow:inset 0 0 0 1px #089161}.btn-outline-success.focus,.btn-outline-success:focus{-webkit-box-shadow:inset 0 0 0 1px #00cc85,0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 0 0 1px #00cc85,0 0 0 .2rem rgba(0,204,133,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#00cc85;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#00cc85;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #00cc85;box-shadow:inset 0 0 0 1px #00cc85}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5)}.btn-outline-info{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-info:hover{color:#7f7f7f;-webkit-box-shadow:inset 0 0 0 1px #7f7f7f;box-shadow:inset 0 0 0 1px #7f7f7f}.btn-outline-info.focus,.btn-outline-info:focus{-webkit-box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#979899;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-warning{color:#f90;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f90;box-shadow:inset 0 0 0 1px #f90}.btn-outline-warning:hover{color:#c2780a;-webkit-box-shadow:inset 0 0 0 1px #c2780a;box-shadow:inset 0 0 0 1px #c2780a}.btn-outline-warning.focus,.btn-outline-warning:focus{-webkit-box-shadow:inset 0 0 0 1px #f90,0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 0 0 1px #f90,0 0 0 .2rem rgba(255,153,0,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#f90;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#f90;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f90;box-shadow:inset 0 0 0 1px #f90}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5)}.btn-outline-danger{color:#f73e5a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f73e5a;box-shadow:inset 0 0 0 1px #f73e5a}.btn-outline-danger:hover{color:#e91938;-webkit-box-shadow:inset 0 0 0 1px #e91938;box-shadow:inset 0 0 0 1px #e91938}.btn-outline-danger.focus,.btn-outline-danger:focus{-webkit-box-shadow:inset 0 0 0 1px #f73e5a,0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 0 0 1px #f73e5a,0 0 0 .2rem rgba(247,62,90,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#f73e5a;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#f73e5a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f73e5a;box-shadow:inset 0 0 0 1px #f73e5a}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5)}.btn-outline-light{color:#e9e6f2;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e9e6f2;box-shadow:inset 0 0 0 1px #e9e6f2}.btn-outline-light:hover{color:#cec9dd;-webkit-box-shadow:inset 0 0 0 1px #cec9dd;box-shadow:inset 0 0 0 1px #cec9dd}.btn-outline-light.focus,.btn-outline-light:focus{-webkit-box-shadow:inset 0 0 0 1px #e9e6f2,0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 0 0 1px #e9e6f2,0 0 0 .2rem rgba(233,230,242,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#e9e6f2;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#e9e6f2;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e9e6f2;box-shadow:inset 0 0 0 1px #e9e6f2}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5)}.btn-outline-dark{color:#17324d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #17324d;box-shadow:inset 0 0 0 1px #17324d}.btn-outline-dark:hover{color:#0e1823;-webkit-box-shadow:inset 0 0 0 1px #0e1823;box-shadow:inset 0 0 0 1px #0e1823}.btn-outline-dark.focus,.btn-outline-dark:focus{-webkit-box-shadow:inset 0 0 0 1px #17324d,0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 0 0 1px #17324d,0 0 0 .2rem rgba(23,50,77,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#17324d;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#17324d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #17324d;box-shadow:inset 0 0 0 1px #17324d}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5)}.btn-outline-100{color:#e3e4e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e3e4e6;box-shadow:inset 0 0 0 1px #e3e4e6}.btn-outline-100:hover{color:#cbcbcb;-webkit-box-shadow:inset 0 0 0 1px #cbcbcb;box-shadow:inset 0 0 0 1px #cbcbcb}.btn-outline-100.focus,.btn-outline-100:focus{-webkit-box-shadow:inset 0 0 0 1px #e3e4e6,0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 0 0 1px #e3e4e6,0 0 0 .2rem rgba(227,228,230,.5)}.btn-outline-100.disabled,.btn-outline-100:disabled{color:#e3e4e6;background-color:transparent}.btn-outline-100:not(:disabled):not(.disabled).active,.btn-outline-100:not(:disabled):not(.disabled):active,.show>.btn-outline-100.dropdown-toggle{color:#e3e4e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e3e4e6;box-shadow:inset 0 0 0 1px #e3e4e6}.btn-outline-100:not(:disabled):not(.disabled).active:focus,.btn-outline-100:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-100.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5)}.btn-outline-200{color:#cacacc;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #cacacc;box-shadow:inset 0 0 0 1px #cacacc}.btn-outline-200:hover{color:#b1b1b1;-webkit-box-shadow:inset 0 0 0 1px #b1b1b1;box-shadow:inset 0 0 0 1px #b1b1b1}.btn-outline-200.focus,.btn-outline-200:focus{-webkit-box-shadow:inset 0 0 0 1px #cacacc,0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 0 0 1px #cacacc,0 0 0 .2rem rgba(202,202,204,.5)}.btn-outline-200.disabled,.btn-outline-200:disabled{color:#cacacc;background-color:transparent}.btn-outline-200:not(:disabled):not(.disabled).active,.btn-outline-200:not(:disabled):not(.disabled):active,.show>.btn-outline-200.dropdown-toggle{color:#cacacc;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #cacacc;box-shadow:inset 0 0 0 1px #cacacc}.btn-outline-200:not(:disabled):not(.disabled).active:focus,.btn-outline-200:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-200.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5)}.btn-outline-300{color:#b1b1b3;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #b1b1b3;box-shadow:inset 0 0 0 1px #b1b1b3}.btn-outline-300:hover{color:#989898;-webkit-box-shadow:inset 0 0 0 1px #989898;box-shadow:inset 0 0 0 1px #989898}.btn-outline-300.focus,.btn-outline-300:focus{-webkit-box-shadow:inset 0 0 0 1px #b1b1b3,0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 0 0 1px #b1b1b3,0 0 0 .2rem rgba(177,177,179,.5)}.btn-outline-300.disabled,.btn-outline-300:disabled{color:#b1b1b3;background-color:transparent}.btn-outline-300:not(:disabled):not(.disabled).active,.btn-outline-300:not(:disabled):not(.disabled):active,.show>.btn-outline-300.dropdown-toggle{color:#b1b1b3;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #b1b1b3;box-shadow:inset 0 0 0 1px #b1b1b3}.btn-outline-300:not(:disabled):not(.disabled).active:focus,.btn-outline-300:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-300.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5)}.btn-outline-400{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-400:hover{color:#7f7f7f;-webkit-box-shadow:inset 0 0 0 1px #7f7f7f;box-shadow:inset 0 0 0 1px #7f7f7f}.btn-outline-400.focus,.btn-outline-400:focus{-webkit-box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-400.disabled,.btn-outline-400:disabled{color:#979899;background-color:transparent}.btn-outline-400:not(:disabled):not(.disabled).active,.btn-outline-400:not(:disabled):not(.disabled):active,.show>.btn-outline-400.dropdown-toggle{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-400:not(:disabled):not(.disabled).active:focus,.btn-outline-400:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-400.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-500{color:#7e7f80;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #7e7f80;box-shadow:inset 0 0 0 1px #7e7f80}.btn-outline-500:hover{color:#656565;-webkit-box-shadow:inset 0 0 0 1px #656565;box-shadow:inset 0 0 0 1px #656565}.btn-outline-500.focus,.btn-outline-500:focus{-webkit-box-shadow:inset 0 0 0 1px #7e7f80,0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 0 0 1px #7e7f80,0 0 0 .2rem rgba(126,127,128,.5)}.btn-outline-500.disabled,.btn-outline-500:disabled{color:#7e7f80;background-color:transparent}.btn-outline-500:not(:disabled):not(.disabled).active,.btn-outline-500:not(:disabled):not(.disabled):active,.show>.btn-outline-500.dropdown-toggle{color:#7e7f80;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #7e7f80;box-shadow:inset 0 0 0 1px #7e7f80}.btn-outline-500:not(:disabled):not(.disabled).active:focus,.btn-outline-500:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-500.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5)}.btn-outline-600{color:#656566;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #656566;box-shadow:inset 0 0 0 1px #656566}.btn-outline-600:hover{color:#4c4c4c;-webkit-box-shadow:inset 0 0 0 1px #4c4c4c;box-shadow:inset 0 0 0 1px #4c4c4c}.btn-outline-600.focus,.btn-outline-600:focus{-webkit-box-shadow:inset 0 0 0 1px #656566,0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 0 0 1px #656566,0 0 0 .2rem rgba(101,101,102,.5)}.btn-outline-600.disabled,.btn-outline-600:disabled{color:#656566;background-color:transparent}.btn-outline-600:not(:disabled):not(.disabled).active,.btn-outline-600:not(:disabled):not(.disabled):active,.show>.btn-outline-600.dropdown-toggle{color:#656566;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #656566;box-shadow:inset 0 0 0 1px #656566}.btn-outline-600:not(:disabled):not(.disabled).active:focus,.btn-outline-600:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-600.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5)}.btn-outline-700{color:#4c4c4d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #4c4c4d;box-shadow:inset 0 0 0 1px #4c4c4d}.btn-outline-700:hover{color:#333;-webkit-box-shadow:inset 0 0 0 1px #333;box-shadow:inset 0 0 0 1px #333}.btn-outline-700.focus,.btn-outline-700:focus{-webkit-box-shadow:inset 0 0 0 1px #4c4c4d,0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 0 0 1px #4c4c4d,0 0 0 .2rem rgba(76,76,77,.5)}.btn-outline-700.disabled,.btn-outline-700:disabled{color:#4c4c4d;background-color:transparent}.btn-outline-700:not(:disabled):not(.disabled).active,.btn-outline-700:not(:disabled):not(.disabled):active,.show>.btn-outline-700.dropdown-toggle{color:#4c4c4d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #4c4c4d;box-shadow:inset 0 0 0 1px #4c4c4d}.btn-outline-700:not(:disabled):not(.disabled).active:focus,.btn-outline-700:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-700.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5)}.btn-outline-800{color:#323333;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #323333;box-shadow:inset 0 0 0 1px #323333}.btn-outline-800:hover{color:#191919;-webkit-box-shadow:inset 0 0 0 1px #191919;box-shadow:inset 0 0 0 1px #191919}.btn-outline-800.focus,.btn-outline-800:focus{-webkit-box-shadow:inset 0 0 0 1px #323333,0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 0 0 1px #323333,0 0 0 .2rem rgba(50,51,51,.5)}.btn-outline-800.disabled,.btn-outline-800:disabled{color:#323333;background-color:transparent}.btn-outline-800:not(:disabled):not(.disabled).active,.btn-outline-800:not(:disabled):not(.disabled):active,.show>.btn-outline-800.dropdown-toggle{color:#323333;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #323333;box-shadow:inset 0 0 0 1px #323333}.btn-outline-800:not(:disabled):not(.disabled).active:focus,.btn-outline-800:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-800.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5)}.btn-outline-900{color:#19191a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #19191a;box-shadow:inset 0 0 0 1px #19191a}.btn-outline-900:hover{color:#000;-webkit-box-shadow:inset 0 0 0 1px #000;box-shadow:inset 0 0 0 1px #000}.btn-outline-900.focus,.btn-outline-900:focus{-webkit-box-shadow:inset 0 0 0 1px #19191a,0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 0 0 1px #19191a,0 0 0 .2rem rgba(25,25,26,.5)}.btn-outline-900.disabled,.btn-outline-900:disabled{color:#19191a;background-color:transparent}.btn-outline-900:not(:disabled):not(.disabled).active,.btn-outline-900:not(:disabled):not(.disabled):active,.show>.btn-outline-900.dropdown-toggle{color:#19191a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #19191a;box-shadow:inset 0 0 0 1px #19191a}.btn-outline-900:not(:disabled):not(.disabled).active:focus,.btn-outline-900:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-900.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5)}.btn-link{font-weight:400;color:#0073e6;text-decoration:none}.btn-link:hover{color:#004d99;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;-webkit-box-shadow:none;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#656566;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.125rem;border-radius:8px}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:2px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{-webkit-transition:opacity .15s linear;transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{-webkit-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{-webkit-transition:none;transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:16px;font-size:1rem;color:#19191a;text-align:left;list-style:none;background-clip:padding-box;border:0 solid transparent;border-radius:4px;-webkit-box-shadow:0 0 30px 5px rgba(0,0,0,.05);box-shadow:0 0 30px 5px rgba(0,0,0,.05)}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-divider{height:0;margin:8px 0;overflow:hidden;border-top:1px solid #cacacc}.dropdown-item{display:block;width:100%;padding:12px 24px;clear:both;font-weight:400;color:#17324d;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#17324d;text-decoration:none;background-color:#e6ecf2}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0073e6}.dropdown-item.disabled,.dropdown-item:disabled{color:#656566;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 24px;margin-bottom:0;font-size:14px;font-size:.875rem;color:#17324d;white-space:nowrap}.dropdown-item-text{display:block;padding:12px 24px;color:#17324d}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.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:1}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group.show .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.show .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:16px;font-size:1rem;font-weight:400;line-height:1.5;color:#4c4c4d;text-align:center;white-space:nowrap;background-color:#cacacc;border:1px solid #979899;border-radius:4px}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.556em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:20px;font-size:1.25rem;line-height:1.556;border-radius:8px}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.428em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:14px;font-size:.875rem;line-height:1.428;border-radius:2px}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#656566;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #b1b1b3}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:4px;border-top-right-radius:4px}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#cacacc #cacacc #b1b1b3}.nav-tabs .nav-link.disabled{color:#656566;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#4c4c4d;background-color:#fff;border-color:#b1b1b3 #b1b1b3 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:4px}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0073e6}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:8px 16px}.navbar,.navbar>.container,.navbar>.container-fluid{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;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.5rem;padding-bottom:.5rem;margin-right:16px;font-size:16px;font-size:1rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:20px;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:0}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm,.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md,.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg,.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl,.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:transparent}.navbar-dark .navbar-toggler-icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTkuMiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDEyIDEwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0wIDRoMTJ2MkgwVjR6bTAtNGg4djJIMFYwem0wIDhoOHYySDBWOHoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:0}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:0;border-bottom-left-radius:0}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:2rem}.card-title{margin-bottom:1rem}.card-subtitle{margin-top:-.5rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:2rem}.card-header{padding:1rem 2rem;margin-bottom:0;background-color:transparent;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:-1px -1px 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:1rem 2rem;background-color:transparent;border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 -1px -1px}.card-header-tabs{margin-bottom:-1rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-1rem;margin-left:-1rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:-1px}.card-img-top{width:100%;border-top-left-radius:-1px;border-top-right-radius:-1px}.card-img-bottom{width:100%;border-bottom-right-radius:-1px;border-bottom-left-radius:-1px}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:6px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-6px;margin-left:-6px}.card-deck,.card-deck .card{-webkit-box-direction:normal}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column;margin-right:6px;margin-bottom:0;margin-left:6px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:6px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:1rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:transparent;border-radius:0}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#656566;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#656566}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:4px}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#0073e6;background-color:#fff;border:1px solid #b1b1b3}.page-link:hover{z-index:2;color:#004d99;text-decoration:none;background-color:#cacacc;border-color:#b1b1b3}.page-link:focus{z-index:2;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.25);box-shadow:0 0 0 .2rem rgba(0,115,230,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.page-item:last-child .page-link{border-top-right-radius:4px;border-bottom-right-radius:4px}.page-item.active .page-link{z-index:1;color:#fff;background-color:#0073e6;border-color:#0073e6}.page-item.disabled .page-link{color:#656566;pointer-events:none;cursor:auto;background-color:#fff;border-color:#b1b1b3}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:20px;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:8px;border-bottom-left-radius:8px}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:8px;border-bottom-right-radius:8px}.pagination-sm .page-link{padding:.25rem .5rem;font-size:14px;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:2px;border-bottom-left-radius:2px}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:2px;border-bottom-right-radius:2px}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:4px;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{-webkit-transition:none;transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#0073e6}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0059b3}a.badge-primary.focus,a.badge-primary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.5);box-shadow:0 0 0 .2rem rgba(0,115,230,.5)}.badge-secondary{color:#fff;background-color:#5c6f82}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#475664}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(92,111,130,.5);box-shadow:0 0 0 .2rem rgba(92,111,130,.5)}.badge-success{color:#19191a;background-color:#00cc85}a.badge-success:focus,a.badge-success:hover{color:#19191a;background-color:#009963}a.badge-success.focus,a.badge-success:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.5);box-shadow:0 0 0 .2rem rgba(0,204,133,.5)}.badge-info{color:#19191a;background-color:#979899}a.badge-info:focus,a.badge-info:hover{color:#19191a;background-color:#7e7e80}a.badge-info.focus,a.badge-info:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(151,152,153,.5);box-shadow:0 0 0 .2rem rgba(151,152,153,.5)}.badge-warning{color:#19191a;background-color:#f90}a.badge-warning:focus,a.badge-warning:hover{color:#19191a;background-color:#cc7a00}a.badge-warning.focus,a.badge-warning:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(255,153,0,.5);box-shadow:0 0 0 .2rem rgba(255,153,0,.5)}.badge-danger{color:#19191a;background-color:#f73e5a}a.badge-danger:focus,a.badge-danger:hover{color:#19191a;background-color:#f50d30}a.badge-danger.focus,a.badge-danger:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.5);box-shadow:0 0 0 .2rem rgba(247,62,90,.5)}.badge-light{color:#19191a;background-color:#e9e6f2}a.badge-light:focus,a.badge-light:hover{color:#19191a;background-color:#ccc4e1}a.badge-light.focus,a.badge-light:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(233,230,242,.5);box-shadow:0 0 0 .2rem rgba(233,230,242,.5)}.badge-dark{color:#fff;background-color:#17324d}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#0b1825}a.badge-dark.focus,a.badge-dark:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(23,50,77,.5);box-shadow:0 0 0 .2rem rgba(23,50,77,.5)}.badge-100{color:#19191a;background-color:#e3e4e6}a.badge-100:focus,a.badge-100:hover{color:#19191a;background-color:#c9cacd}a.badge-100.focus,a.badge-100:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(227,228,230,.5);box-shadow:0 0 0 .2rem rgba(227,228,230,.5)}.badge-200{color:#19191a;background-color:#cacacc}a.badge-200:focus,a.badge-200:hover{color:#19191a;background-color:#b0b1b3}a.badge-200.focus,a.badge-200:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(202,202,204,.5);box-shadow:0 0 0 .2rem rgba(202,202,204,.5)}.badge-300{color:#19191a;background-color:#b1b1b3}a.badge-300:focus,a.badge-300:hover{color:#19191a;background-color:#979899}a.badge-300.focus,a.badge-300:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(177,177,179,.5);box-shadow:0 0 0 .2rem rgba(177,177,179,.5)}.badge-400{color:#19191a;background-color:#979899}a.badge-400:focus,a.badge-400:hover{color:#19191a;background-color:#7e7e80}a.badge-400.focus,a.badge-400:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(151,152,153,.5);box-shadow:0 0 0 .2rem rgba(151,152,153,.5)}.badge-500{color:#19191a;background-color:#7e7f80}a.badge-500:focus,a.badge-500:hover{color:#19191a;background-color:#656566}a.badge-500.focus,a.badge-500:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(126,127,128,.5);box-shadow:0 0 0 .2rem rgba(126,127,128,.5)}.badge-600{color:#fff;background-color:#656566}a.badge-600:focus,a.badge-600:hover{color:#fff;background-color:#4c4c4c}a.badge-600.focus,a.badge-600:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(101,101,102,.5);box-shadow:0 0 0 .2rem rgba(101,101,102,.5)}.badge-700{color:#fff;background-color:#4c4c4d}a.badge-700:focus,a.badge-700:hover{color:#fff;background-color:#323233}a.badge-700.focus,a.badge-700:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(76,76,77,.5);box-shadow:0 0 0 .2rem rgba(76,76,77,.5)}.badge-800{color:#fff;background-color:#323333}a.badge-800:focus,a.badge-800:hover{color:#fff;background-color:#191919}a.badge-800.focus,a.badge-800:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(50,51,51,.5);box-shadow:0 0 0 .2rem rgba(50,51,51,.5)}.badge-900{color:#fff;background-color:#19191a}a.badge-900:focus,a.badge-900:hover{color:#fff;background-color:#000}a.badge-900.focus,a.badge-900:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(25,25,26,.5);box-shadow:0 0 0 .2rem rgba(25,25,26,.5)}@-webkit-keyframes progress-bar-stripes{0%{background-position:16px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:16px 0}to{background-position:0 0}}.progress{height:16px;overflow:hidden;font-size:12px;font-size:.75rem;background-color:#cacacc;border-radius:0;-webkit-box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1);box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1)}.progress,.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex}.progress-bar{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#0073e6;-webkit-transition:width .6s ease;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{-webkit-transition:none;transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:16px 16px}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#0073e6;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#00264d;text-decoration:none}.list-group-item-action:active{color:#19191a;background-color:#cacacc}.list-group-item{position:relative;display:block;padding:1rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.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}.list-group-item.disabled,.list-group-item:disabled{color:#656566;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0073e6;border-color:#0073e6}.list-group-horizontal{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#003c78;background-color:#b8d8f8}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#003c78;background-color:#a1cbf6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#003c78;border-color:#003c78}.list-group-item-secondary{color:#303a44;background-color:#d1d7dc}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#303a44;background-color:#c3cad1}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#303a44;border-color:#303a44}.list-group-item-success{color:#006a45;background-color:#b8f1dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#006a45;background-color:#a3edd3}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#006a45;border-color:#006a45}.list-group-item-info{color:#4f4f50;background-color:#e2e2e2}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#4f4f50;background-color:#d5d5d5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#4f4f50;border-color:#4f4f50}.list-group-item-warning{color:#855000;background-color:#ffe2b8}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#855000;background-color:#ffd89f}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#855000;border-color:#855000}.list-group-item-danger{color:#80202f;background-color:#fdc9d1}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#80202f;background-color:#fcb0bc}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#80202f;border-color:#80202f}.list-group-item-light{color:#79787e;background-color:#f9f8fb}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#79787e;background-color:#ebe8f2}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#79787e;border-color:#79787e}.list-group-item-dark{color:#0c1a28;background-color:#bec6cd}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#0c1a28;background-color:#b0b9c2}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#0c1a28;border-color:#0c1a28}.list-group-item-100{color:#767778;background-color:#f7f7f8}.list-group-item-100.list-group-item-action:focus,.list-group-item-100.list-group-item-action:hover{color:#767778;background-color:#e9e9ec}.list-group-item-100.list-group-item-action.active{color:#fff;background-color:#767778;border-color:#767778}.list-group-item-200{color:#69696a;background-color:#f0f0f1}.list-group-item-200.list-group-item-action:focus,.list-group-item-200.list-group-item-action:hover{color:#69696a;background-color:#e3e3e5}.list-group-item-200.list-group-item-action.active{color:#fff;background-color:#69696a;border-color:#69696a}.list-group-item-300{color:#5c5c5d;background-color:#e9e9ea}.list-group-item-300.list-group-item-action:focus,.list-group-item-300.list-group-item-action:hover{color:#5c5c5d;background-color:#dcdcde}.list-group-item-300.list-group-item-action.active{color:#fff;background-color:#5c5c5d;border-color:#5c5c5d}.list-group-item-400{color:#4f4f50;background-color:#e2e2e2}.list-group-item-400.list-group-item-action:focus,.list-group-item-400.list-group-item-action:hover{color:#4f4f50;background-color:#d5d5d5}.list-group-item-400.list-group-item-action.active{color:#fff;background-color:#4f4f50;border-color:#4f4f50}.list-group-item-500{color:#424243;background-color:#dbdbdb}.list-group-item-500.list-group-item-action:focus,.list-group-item-500.list-group-item-action:hover{color:#424243;background-color:#cecece}.list-group-item-500.list-group-item-action.active{color:#fff;background-color:#424243;border-color:#424243}.list-group-item-600{color:#353535;background-color:#d4d4d4}.list-group-item-600.list-group-item-action:focus,.list-group-item-600.list-group-item-action:hover{color:#353535;background-color:#c7c7c7}.list-group-item-600.list-group-item-action.active{color:#fff;background-color:#353535;border-color:#353535}.list-group-item-700{color:#282828;background-color:#cdcdcd}.list-group-item-700.list-group-item-action:focus,.list-group-item-700.list-group-item-action:hover{color:#282828;background-color:silver}.list-group-item-700.list-group-item-action.active{color:#fff;background-color:#282828;border-color:#282828}.list-group-item-800{color:#1a1b1b;background-color:#c6c6c6}.list-group-item-800.list-group-item-action:focus,.list-group-item-800.list-group-item-action:hover{color:#1a1b1b;background-color:#b9b9b9}.list-group-item-800.list-group-item-action.active{color:#fff;background-color:#1a1b1b;border-color:#1a1b1b}.list-group-item-900{color:#0d0d0e;background-color:#bfbfbf}.list-group-item-900.list-group-item-action:focus,.list-group-item-900.list-group-item-action:hover{color:#0d0d0e;background-color:#b2b2b2}.list-group-item-900.list-group-item-action.active{color:#fff;background-color:#0d0d0e;border-color:#0d0d0e}.close{float:right;font-size:24px;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-50px);transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{-webkit-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-webkit-box;display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:8px;-webkit-box-shadow:0 .25rem .5rem rgba(0,0,0,.5);box-shadow:0 .25rem .5rem rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.8}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem;border-bottom:0 solid #b1b1b3;border-top-left-radius:8px;border-top-right-radius:8px}.modal-header .close{padding:1.5rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.5rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1.5rem;border-top:0 solid #b1b1b3;border-bottom-right-radius:8px;border-bottom-left-radius:8px}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.5rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3rem)}.modal-dialog-centered{min-height:calc(100% - 3rem)}.modal-dialog-centered:before{height:calc(100vh - 3rem)}.modal-content{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.5);box-shadow:0 .5rem 1rem rgba(0,0,0,.5)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Titillium Web,Geneva,Tahoma,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:14px;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:1}.tooltip .arrow{position:absolute;display:block;width:12.8px;width:.8rem;height:6.4px;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#004a4d}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:6.4px;width:.4rem;height:12.8px;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#004a4d}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#004a4d}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:6.4px;width:.4rem;height:12.8px;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#004a4d}.tooltip-inner{max-width:32em;padding:1rem;color:#fff;text-align:center;background-color:#004a4d;border-radius:4px}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Titillium Web,Geneva,Tahoma,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:14px;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:8px;-webkit-box-shadow:0 .25rem .5rem rgba(0,0,0,.2);box-shadow:0 .25rem .5rem rgba(0,0,0,.2)}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:16px;width:1rem;height:8px;height:.5rem;margin:0 8px}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem + -1px);width:8px;width:.5rem;height:16px;height:1rem;margin:8px 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:16px;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem + -1px);width:8px;width:.5rem;height:16px;height:1rem;margin:8px 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:16px;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:7px;border-top-right-radius:7px}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#19191a}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{-webkit-transition:none;transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;-webkit-transition:opacity 0s .6s;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{-webkit-transition:none;transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;color:#5c6f82;text-align:center;opacity:1;-webkit-transition:opacity .15s ease;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{-webkit-transition:none;transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#5c6f82;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:32px;height:32px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:auto;margin-left:auto;list-style:none}.carousel-indicators li{-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;-webkit-transition:opacity .6s ease;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{-webkit-transition:none;transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#0073e6!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0059b3!important}.bg-secondary{background-color:#5c6f82!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#475664!important}.bg-success{background-color:#00cc85!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#009963!important}.bg-info{background-color:#979899!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#7e7e80!important}.bg-warning{background-color:#f90!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#cc7a00!important}.bg-danger{background-color:#f73e5a!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#f50d30!important}.bg-light{background-color:#e9e6f2!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#ccc4e1!important}.bg-dark{background-color:#17324d!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#0b1825!important}.bg-100{background-color:#e3e4e6!important}a.bg-100:focus,a.bg-100:hover,button.bg-100:focus,button.bg-100:hover{background-color:#c9cacd!important}.bg-200{background-color:#cacacc!important}a.bg-200:focus,a.bg-200:hover,button.bg-200:focus,button.bg-200:hover{background-color:#b0b1b3!important}.bg-300{background-color:#b1b1b3!important}.bg-400,a.bg-300:focus,a.bg-300:hover,button.bg-300:focus,button.bg-300:hover{background-color:#979899!important}a.bg-400:focus,a.bg-400:hover,button.bg-400:focus,button.bg-400:hover{background-color:#7e7e80!important}.bg-500{background-color:#7e7f80!important}.bg-600,a.bg-500:focus,a.bg-500:hover,button.bg-500:focus,button.bg-500:hover{background-color:#656566!important}a.bg-600:focus,a.bg-600:hover,button.bg-600:focus,button.bg-600:hover{background-color:#4c4c4c!important}.bg-700{background-color:#4c4c4d!important}a.bg-700:focus,a.bg-700:hover,button.bg-700:focus,button.bg-700:hover{background-color:#323233!important}.bg-800{background-color:#323333!important}a.bg-800:focus,a.bg-800:hover,button.bg-800:focus,button.bg-800:hover{background-color:#191919!important}.bg-900{background-color:#19191a!important}a.bg-900:focus,a.bg-900:hover,button.bg-900:focus,button.bg-900:hover{background-color:#000!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #b1b1b3!important}.border-top{border-top:1px solid #b1b1b3!important}.border-right{border-right:1px solid #b1b1b3!important}.border-bottom{border-bottom:1px solid #b1b1b3!important}.border-left{border-left:1px solid #b1b1b3!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#0073e6!important}.border-secondary{border-color:#5c6f82!important}.border-success{border-color:#00cc85!important}.border-info{border-color:#979899!important}.border-warning{border-color:#f90!important}.border-danger{border-color:#f73e5a!important}.border-light{border-color:#e9e6f2!important}.border-dark{border-color:#17324d!important}.border-100{border-color:#e3e4e6!important}.border-200{border-color:#cacacc!important}.border-300{border-color:#b1b1b3!important}.border-400{border-color:#979899!important}.border-500{border-color:#7e7f80!important}.border-600{border-color:#656566!important}.border-700{border-color:#4c4c4d!important}.border-800{border-color:#323333!important}.border-900{border-color:#19191a!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:2px!important}.rounded{border-radius:4px!important}.rounded-top{border-top-left-radius:4px!important}.rounded-right,.rounded-top{border-top-right-radius:4px!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:4px!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:4px!important}.rounded-left{border-top-left-radius:4px!important}.rounded-lg{border-radius:8px!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.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-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column,.flex-row{-webkit-box-direction:normal!important}.flex-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse,.flex-row-reverse{-webkit-box-direction:reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column,.flex-sm-row{-webkit-box-direction:normal!important}.flex-sm-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column,.flex-md-row{-webkit-box-direction:normal!important}.flex-md-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column,.flex-lg-row{-webkit-box-direction:normal!important}.flex-lg-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column,.flex-xl-row{-webkit-box-direction:normal!important}.flex-xl-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{-webkit-box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important;box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important;box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{-webkit-box-shadow:none!important;box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:4px!important}.mt-1,.my-1{margin-top:4px!important}.mr-1,.mx-1{margin-right:4px!important}.mb-1,.my-1{margin-bottom:4px!important}.ml-1,.mx-1{margin-left:4px!important}.m-2{margin:8px!important}.mt-2,.my-2{margin-top:8px!important}.mr-2,.mx-2{margin-right:8px!important}.mb-2,.my-2{margin-bottom:8px!important}.ml-2,.mx-2{margin-left:8px!important}.m-3{margin:16px!important}.mt-3,.my-3{margin-top:16px!important}.mr-3,.mx-3{margin-right:16px!important}.mb-3,.my-3{margin-bottom:16px!important}.ml-3,.mx-3{margin-left:16px!important}.m-4{margin:24px!important}.mt-4,.my-4{margin-top:24px!important}.mr-4,.mx-4{margin-right:24px!important}.mb-4,.my-4{margin-bottom:24px!important}.ml-4,.mx-4{margin-left:24px!important}.m-5{margin:48px!important}.mt-5,.my-5{margin-top:48px!important}.mr-5,.mx-5{margin-right:48px!important}.mb-5,.my-5{margin-bottom:48px!important}.ml-5,.mx-5{margin-left:48px!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:4px!important}.pt-1,.py-1{padding-top:4px!important}.pr-1,.px-1{padding-right:4px!important}.pb-1,.py-1{padding-bottom:4px!important}.pl-1,.px-1{padding-left:4px!important}.p-2{padding:8px!important}.pt-2,.py-2{padding-top:8px!important}.pr-2,.px-2{padding-right:8px!important}.pb-2,.py-2{padding-bottom:8px!important}.pl-2,.px-2{padding-left:8px!important}.p-3{padding:16px!important}.pt-3,.py-3{padding-top:16px!important}.pr-3,.px-3{padding-right:16px!important}.pb-3,.py-3{padding-bottom:16px!important}.pl-3,.px-3{padding-left:16px!important}.p-4{padding:24px!important}.pt-4,.py-4{padding-top:24px!important}.pr-4,.px-4{padding-right:24px!important}.pb-4,.py-4{padding-bottom:24px!important}.pl-4,.px-4{padding-left:24px!important}.p-5{padding:48px!important}.pt-5,.py-5{padding-top:48px!important}.pr-5,.px-5{padding-right:48px!important}.pb-5,.py-5{padding-bottom:48px!important}.pl-5,.px-5{padding-left:48px!important}.m-n1{margin:-4px!important}.mt-n1,.my-n1{margin-top:-4px!important}.mr-n1,.mx-n1{margin-right:-4px!important}.mb-n1,.my-n1{margin-bottom:-4px!important}.ml-n1,.mx-n1{margin-left:-4px!important}.m-n2{margin:-8px!important}.mt-n2,.my-n2{margin-top:-8px!important}.mr-n2,.mx-n2{margin-right:-8px!important}.mb-n2,.my-n2{margin-bottom:-8px!important}.ml-n2,.mx-n2{margin-left:-8px!important}.m-n3{margin:-16px!important}.mt-n3,.my-n3{margin-top:-16px!important}.mr-n3,.mx-n3{margin-right:-16px!important}.mb-n3,.my-n3{margin-bottom:-16px!important}.ml-n3,.mx-n3{margin-left:-16px!important}.m-n4{margin:-24px!important}.mt-n4,.my-n4{margin-top:-24px!important}.mr-n4,.mx-n4{margin-right:-24px!important}.mb-n4,.my-n4{margin-bottom:-24px!important}.ml-n4,.mx-n4{margin-left:-24px!important}.m-n5{margin:-48px!important}.mt-n5,.my-n5{margin-top:-48px!important}.mr-n5,.mx-n5{margin-right:-48px!important}.mb-n5,.my-n5{margin-bottom:-48px!important}.ml-n5,.mx-n5{margin-left:-48px!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:4px!important}.mt-sm-1,.my-sm-1{margin-top:4px!important}.mr-sm-1,.mx-sm-1{margin-right:4px!important}.mb-sm-1,.my-sm-1{margin-bottom:4px!important}.ml-sm-1,.mx-sm-1{margin-left:4px!important}.m-sm-2{margin:8px!important}.mt-sm-2,.my-sm-2{margin-top:8px!important}.mr-sm-2,.mx-sm-2{margin-right:8px!important}.mb-sm-2,.my-sm-2{margin-bottom:8px!important}.ml-sm-2,.mx-sm-2{margin-left:8px!important}.m-sm-3{margin:16px!important}.mt-sm-3,.my-sm-3{margin-top:16px!important}.mr-sm-3,.mx-sm-3{margin-right:16px!important}.mb-sm-3,.my-sm-3{margin-bottom:16px!important}.ml-sm-3,.mx-sm-3{margin-left:16px!important}.m-sm-4{margin:24px!important}.mt-sm-4,.my-sm-4{margin-top:24px!important}.mr-sm-4,.mx-sm-4{margin-right:24px!important}.mb-sm-4,.my-sm-4{margin-bottom:24px!important}.ml-sm-4,.mx-sm-4{margin-left:24px!important}.m-sm-5{margin:48px!important}.mt-sm-5,.my-sm-5{margin-top:48px!important}.mr-sm-5,.mx-sm-5{margin-right:48px!important}.mb-sm-5,.my-sm-5{margin-bottom:48px!important}.ml-sm-5,.mx-sm-5{margin-left:48px!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:4px!important}.pt-sm-1,.py-sm-1{padding-top:4px!important}.pr-sm-1,.px-sm-1{padding-right:4px!important}.pb-sm-1,.py-sm-1{padding-bottom:4px!important}.pl-sm-1,.px-sm-1{padding-left:4px!important}.p-sm-2{padding:8px!important}.pt-sm-2,.py-sm-2{padding-top:8px!important}.pr-sm-2,.px-sm-2{padding-right:8px!important}.pb-sm-2,.py-sm-2{padding-bottom:8px!important}.pl-sm-2,.px-sm-2{padding-left:8px!important}.p-sm-3{padding:16px!important}.pt-sm-3,.py-sm-3{padding-top:16px!important}.pr-sm-3,.px-sm-3{padding-right:16px!important}.pb-sm-3,.py-sm-3{padding-bottom:16px!important}.pl-sm-3,.px-sm-3{padding-left:16px!important}.p-sm-4{padding:24px!important}.pt-sm-4,.py-sm-4{padding-top:24px!important}.pr-sm-4,.px-sm-4{padding-right:24px!important}.pb-sm-4,.py-sm-4{padding-bottom:24px!important}.pl-sm-4,.px-sm-4{padding-left:24px!important}.p-sm-5{padding:48px!important}.pt-sm-5,.py-sm-5{padding-top:48px!important}.pr-sm-5,.px-sm-5{padding-right:48px!important}.pb-sm-5,.py-sm-5{padding-bottom:48px!important}.pl-sm-5,.px-sm-5{padding-left:48px!important}.m-sm-n1{margin:-4px!important}.mt-sm-n1,.my-sm-n1{margin-top:-4px!important}.mr-sm-n1,.mx-sm-n1{margin-right:-4px!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-4px!important}.ml-sm-n1,.mx-sm-n1{margin-left:-4px!important}.m-sm-n2{margin:-8px!important}.mt-sm-n2,.my-sm-n2{margin-top:-8px!important}.mr-sm-n2,.mx-sm-n2{margin-right:-8px!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-8px!important}.ml-sm-n2,.mx-sm-n2{margin-left:-8px!important}.m-sm-n3{margin:-16px!important}.mt-sm-n3,.my-sm-n3{margin-top:-16px!important}.mr-sm-n3,.mx-sm-n3{margin-right:-16px!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-16px!important}.ml-sm-n3,.mx-sm-n3{margin-left:-16px!important}.m-sm-n4{margin:-24px!important}.mt-sm-n4,.my-sm-n4{margin-top:-24px!important}.mr-sm-n4,.mx-sm-n4{margin-right:-24px!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-24px!important}.ml-sm-n4,.mx-sm-n4{margin-left:-24px!important}.m-sm-n5{margin:-48px!important}.mt-sm-n5,.my-sm-n5{margin-top:-48px!important}.mr-sm-n5,.mx-sm-n5{margin-right:-48px!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-48px!important}.ml-sm-n5,.mx-sm-n5{margin-left:-48px!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:4px!important}.mt-md-1,.my-md-1{margin-top:4px!important}.mr-md-1,.mx-md-1{margin-right:4px!important}.mb-md-1,.my-md-1{margin-bottom:4px!important}.ml-md-1,.mx-md-1{margin-left:4px!important}.m-md-2{margin:8px!important}.mt-md-2,.my-md-2{margin-top:8px!important}.mr-md-2,.mx-md-2{margin-right:8px!important}.mb-md-2,.my-md-2{margin-bottom:8px!important}.ml-md-2,.mx-md-2{margin-left:8px!important}.m-md-3{margin:16px!important}.mt-md-3,.my-md-3{margin-top:16px!important}.mr-md-3,.mx-md-3{margin-right:16px!important}.mb-md-3,.my-md-3{margin-bottom:16px!important}.ml-md-3,.mx-md-3{margin-left:16px!important}.m-md-4{margin:24px!important}.mt-md-4,.my-md-4{margin-top:24px!important}.mr-md-4,.mx-md-4{margin-right:24px!important}.mb-md-4,.my-md-4{margin-bottom:24px!important}.ml-md-4,.mx-md-4{margin-left:24px!important}.m-md-5{margin:48px!important}.mt-md-5,.my-md-5{margin-top:48px!important}.mr-md-5,.mx-md-5{margin-right:48px!important}.mb-md-5,.my-md-5{margin-bottom:48px!important}.ml-md-5,.mx-md-5{margin-left:48px!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:4px!important}.pt-md-1,.py-md-1{padding-top:4px!important}.pr-md-1,.px-md-1{padding-right:4px!important}.pb-md-1,.py-md-1{padding-bottom:4px!important}.pl-md-1,.px-md-1{padding-left:4px!important}.p-md-2{padding:8px!important}.pt-md-2,.py-md-2{padding-top:8px!important}.pr-md-2,.px-md-2{padding-right:8px!important}.pb-md-2,.py-md-2{padding-bottom:8px!important}.pl-md-2,.px-md-2{padding-left:8px!important}.p-md-3{padding:16px!important}.pt-md-3,.py-md-3{padding-top:16px!important}.pr-md-3,.px-md-3{padding-right:16px!important}.pb-md-3,.py-md-3{padding-bottom:16px!important}.pl-md-3,.px-md-3{padding-left:16px!important}.p-md-4{padding:24px!important}.pt-md-4,.py-md-4{padding-top:24px!important}.pr-md-4,.px-md-4{padding-right:24px!important}.pb-md-4,.py-md-4{padding-bottom:24px!important}.pl-md-4,.px-md-4{padding-left:24px!important}.p-md-5{padding:48px!important}.pt-md-5,.py-md-5{padding-top:48px!important}.pr-md-5,.px-md-5{padding-right:48px!important}.pb-md-5,.py-md-5{padding-bottom:48px!important}.pl-md-5,.px-md-5{padding-left:48px!important}.m-md-n1{margin:-4px!important}.mt-md-n1,.my-md-n1{margin-top:-4px!important}.mr-md-n1,.mx-md-n1{margin-right:-4px!important}.mb-md-n1,.my-md-n1{margin-bottom:-4px!important}.ml-md-n1,.mx-md-n1{margin-left:-4px!important}.m-md-n2{margin:-8px!important}.mt-md-n2,.my-md-n2{margin-top:-8px!important}.mr-md-n2,.mx-md-n2{margin-right:-8px!important}.mb-md-n2,.my-md-n2{margin-bottom:-8px!important}.ml-md-n2,.mx-md-n2{margin-left:-8px!important}.m-md-n3{margin:-16px!important}.mt-md-n3,.my-md-n3{margin-top:-16px!important}.mr-md-n3,.mx-md-n3{margin-right:-16px!important}.mb-md-n3,.my-md-n3{margin-bottom:-16px!important}.ml-md-n3,.mx-md-n3{margin-left:-16px!important}.m-md-n4{margin:-24px!important}.mt-md-n4,.my-md-n4{margin-top:-24px!important}.mr-md-n4,.mx-md-n4{margin-right:-24px!important}.mb-md-n4,.my-md-n4{margin-bottom:-24px!important}.ml-md-n4,.mx-md-n4{margin-left:-24px!important}.m-md-n5{margin:-48px!important}.mt-md-n5,.my-md-n5{margin-top:-48px!important}.mr-md-n5,.mx-md-n5{margin-right:-48px!important}.mb-md-n5,.my-md-n5{margin-bottom:-48px!important}.ml-md-n5,.mx-md-n5{margin-left:-48px!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:4px!important}.mt-lg-1,.my-lg-1{margin-top:4px!important}.mr-lg-1,.mx-lg-1{margin-right:4px!important}.mb-lg-1,.my-lg-1{margin-bottom:4px!important}.ml-lg-1,.mx-lg-1{margin-left:4px!important}.m-lg-2{margin:8px!important}.mt-lg-2,.my-lg-2{margin-top:8px!important}.mr-lg-2,.mx-lg-2{margin-right:8px!important}.mb-lg-2,.my-lg-2{margin-bottom:8px!important}.ml-lg-2,.mx-lg-2{margin-left:8px!important}.m-lg-3{margin:16px!important}.mt-lg-3,.my-lg-3{margin-top:16px!important}.mr-lg-3,.mx-lg-3{margin-right:16px!important}.mb-lg-3,.my-lg-3{margin-bottom:16px!important}.ml-lg-3,.mx-lg-3{margin-left:16px!important}.m-lg-4{margin:24px!important}.mt-lg-4,.my-lg-4{margin-top:24px!important}.mr-lg-4,.mx-lg-4{margin-right:24px!important}.mb-lg-4,.my-lg-4{margin-bottom:24px!important}.ml-lg-4,.mx-lg-4{margin-left:24px!important}.m-lg-5{margin:48px!important}.mt-lg-5,.my-lg-5{margin-top:48px!important}.mr-lg-5,.mx-lg-5{margin-right:48px!important}.mb-lg-5,.my-lg-5{margin-bottom:48px!important}.ml-lg-5,.mx-lg-5{margin-left:48px!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:4px!important}.pt-lg-1,.py-lg-1{padding-top:4px!important}.pr-lg-1,.px-lg-1{padding-right:4px!important}.pb-lg-1,.py-lg-1{padding-bottom:4px!important}.pl-lg-1,.px-lg-1{padding-left:4px!important}.p-lg-2{padding:8px!important}.pt-lg-2,.py-lg-2{padding-top:8px!important}.pr-lg-2,.px-lg-2{padding-right:8px!important}.pb-lg-2,.py-lg-2{padding-bottom:8px!important}.pl-lg-2,.px-lg-2{padding-left:8px!important}.p-lg-3{padding:16px!important}.pt-lg-3,.py-lg-3{padding-top:16px!important}.pr-lg-3,.px-lg-3{padding-right:16px!important}.pb-lg-3,.py-lg-3{padding-bottom:16px!important}.pl-lg-3,.px-lg-3{padding-left:16px!important}.p-lg-4{padding:24px!important}.pt-lg-4,.py-lg-4{padding-top:24px!important}.pr-lg-4,.px-lg-4{padding-right:24px!important}.pb-lg-4,.py-lg-4{padding-bottom:24px!important}.pl-lg-4,.px-lg-4{padding-left:24px!important}.p-lg-5{padding:48px!important}.pt-lg-5,.py-lg-5{padding-top:48px!important}.pr-lg-5,.px-lg-5{padding-right:48px!important}.pb-lg-5,.py-lg-5{padding-bottom:48px!important}.pl-lg-5,.px-lg-5{padding-left:48px!important}.m-lg-n1{margin:-4px!important}.mt-lg-n1,.my-lg-n1{margin-top:-4px!important}.mr-lg-n1,.mx-lg-n1{margin-right:-4px!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-4px!important}.ml-lg-n1,.mx-lg-n1{margin-left:-4px!important}.m-lg-n2{margin:-8px!important}.mt-lg-n2,.my-lg-n2{margin-top:-8px!important}.mr-lg-n2,.mx-lg-n2{margin-right:-8px!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-8px!important}.ml-lg-n2,.mx-lg-n2{margin-left:-8px!important}.m-lg-n3{margin:-16px!important}.mt-lg-n3,.my-lg-n3{margin-top:-16px!important}.mr-lg-n3,.mx-lg-n3{margin-right:-16px!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-16px!important}.ml-lg-n3,.mx-lg-n3{margin-left:-16px!important}.m-lg-n4{margin:-24px!important}.mt-lg-n4,.my-lg-n4{margin-top:-24px!important}.mr-lg-n4,.mx-lg-n4{margin-right:-24px!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-24px!important}.ml-lg-n4,.mx-lg-n4{margin-left:-24px!important}.m-lg-n5{margin:-48px!important}.mt-lg-n5,.my-lg-n5{margin-top:-48px!important}.mr-lg-n5,.mx-lg-n5{margin-right:-48px!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-48px!important}.ml-lg-n5,.mx-lg-n5{margin-left:-48px!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:4px!important}.mt-xl-1,.my-xl-1{margin-top:4px!important}.mr-xl-1,.mx-xl-1{margin-right:4px!important}.mb-xl-1,.my-xl-1{margin-bottom:4px!important}.ml-xl-1,.mx-xl-1{margin-left:4px!important}.m-xl-2{margin:8px!important}.mt-xl-2,.my-xl-2{margin-top:8px!important}.mr-xl-2,.mx-xl-2{margin-right:8px!important}.mb-xl-2,.my-xl-2{margin-bottom:8px!important}.ml-xl-2,.mx-xl-2{margin-left:8px!important}.m-xl-3{margin:16px!important}.mt-xl-3,.my-xl-3{margin-top:16px!important}.mr-xl-3,.mx-xl-3{margin-right:16px!important}.mb-xl-3,.my-xl-3{margin-bottom:16px!important}.ml-xl-3,.mx-xl-3{margin-left:16px!important}.m-xl-4{margin:24px!important}.mt-xl-4,.my-xl-4{margin-top:24px!important}.mr-xl-4,.mx-xl-4{margin-right:24px!important}.mb-xl-4,.my-xl-4{margin-bottom:24px!important}.ml-xl-4,.mx-xl-4{margin-left:24px!important}.m-xl-5{margin:48px!important}.mt-xl-5,.my-xl-5{margin-top:48px!important}.mr-xl-5,.mx-xl-5{margin-right:48px!important}.mb-xl-5,.my-xl-5{margin-bottom:48px!important}.ml-xl-5,.mx-xl-5{margin-left:48px!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:4px!important}.pt-xl-1,.py-xl-1{padding-top:4px!important}.pr-xl-1,.px-xl-1{padding-right:4px!important}.pb-xl-1,.py-xl-1{padding-bottom:4px!important}.pl-xl-1,.px-xl-1{padding-left:4px!important}.p-xl-2{padding:8px!important}.pt-xl-2,.py-xl-2{padding-top:8px!important}.pr-xl-2,.px-xl-2{padding-right:8px!important}.pb-xl-2,.py-xl-2{padding-bottom:8px!important}.pl-xl-2,.px-xl-2{padding-left:8px!important}.p-xl-3{padding:16px!important}.pt-xl-3,.py-xl-3{padding-top:16px!important}.pr-xl-3,.px-xl-3{padding-right:16px!important}.pb-xl-3,.py-xl-3{padding-bottom:16px!important}.pl-xl-3,.px-xl-3{padding-left:16px!important}.p-xl-4{padding:24px!important}.pt-xl-4,.py-xl-4{padding-top:24px!important}.pr-xl-4,.px-xl-4{padding-right:24px!important}.pb-xl-4,.py-xl-4{padding-bottom:24px!important}.pl-xl-4,.px-xl-4{padding-left:24px!important}.p-xl-5{padding:48px!important}.pt-xl-5,.py-xl-5{padding-top:48px!important}.pr-xl-5,.px-xl-5{padding-right:48px!important}.pb-xl-5,.py-xl-5{padding-bottom:48px!important}.pl-xl-5,.px-xl-5{padding-left:48px!important}.m-xl-n1{margin:-4px!important}.mt-xl-n1,.my-xl-n1{margin-top:-4px!important}.mr-xl-n1,.mx-xl-n1{margin-right:-4px!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-4px!important}.ml-xl-n1,.mx-xl-n1{margin-left:-4px!important}.m-xl-n2{margin:-8px!important}.mt-xl-n2,.my-xl-n2{margin-top:-8px!important}.mr-xl-n2,.mx-xl-n2{margin-right:-8px!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-8px!important}.ml-xl-n2,.mx-xl-n2{margin-left:-8px!important}.m-xl-n3{margin:-16px!important}.mt-xl-n3,.my-xl-n3{margin-top:-16px!important}.mr-xl-n3,.mx-xl-n3{margin-right:-16px!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-16px!important}.ml-xl-n3,.mx-xl-n3{margin-left:-16px!important}.m-xl-n4{margin:-24px!important}.mt-xl-n4,.my-xl-n4{margin-top:-24px!important}.mr-xl-n4,.mx-xl-n4{margin-right:-24px!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-24px!important}.ml-xl-n4,.mx-xl-n4{margin-left:-24px!important}.m-xl-n5{margin:-48px!important}.mt-xl-n5,.my-xl-n5{margin-top:-48px!important}.mr-xl-n5,.mx-xl-n5{margin-right:-48px!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-48px!important}.ml-xl-n5,.mx-xl-n5{margin-left:-48px!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:Roboto Mono,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#004d99!important}a.text-primary:focus,a.text-primary:hover{color:#004080!important}.text-secondary{color:#3d4955!important}a.text-secondary:focus,a.text-secondary:hover{color:#323c46!important}.text-success{color:#008053!important}a.text-success:focus,a.text-success:hover{color:#006642!important}.text-info{color:#717273!important}a.text-info:focus,a.text-info:hover{color:#646566!important}.text-warning{color:#a36200!important}a.text-warning:focus,a.text-warning:hover{color:#995c00!important}.text-danger{color:#e00929!important}a.text-danger:focus,a.text-danger:hover{color:#c70825!important}.text-light{color:#bdb4d8!important}a.text-light:focus,a.text-light:hover{color:#aea3d0!important}.text-dark{color:#050b12!important}a.text-dark:focus,a.text-dark:hover{color:#000!important}.text-100{color:#bbbdc1!important}a.text-100:focus,a.text-100:hover{color:#aeb0b5!important}.text-200{color:#a3a4a7!important}a.text-200:focus,a.text-200:hover{color:#96979a!important}.text-300{color:#8a8b8d!important}a.text-300:focus,a.text-300:hover{color:#7d7e80!important}.text-400{color:#717273!important}a.text-400:focus,a.text-400:hover{color:#646566!important}.text-500{color:#585859!important}a.text-500:focus,a.text-500:hover{color:#4b4c4c!important}.text-600{color:#3f3f40!important}a.text-600:focus,a.text-600:hover{color:#323233!important}.text-700{color:#262626!important}a.text-700:focus,a.text-700:hover{color:#191919!important}.text-800{color:#0c0c0d!important}.text-900,a.text-800:focus,a.text-800:hover,a.text-900:focus,a.text-900:hover{color:#000!important}.text-body{color:#19191a!important}.text-muted{color:#5a768a!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}body,html{font-size:16px;line-height:1.5}@media (min-width:576px){body,html{font-size:18px;line-height:1.555}}.h1,h1{letter-spacing:-1px}@media (min-width:576px){.h1,h1{font-size:2.666rem;letter-spacing:-1.3px;line-height:1.25}}.h2,h2{line-height:1.25}@media (min-width:576px){.h2,h2{font-size:2.222rem;line-height:1.2;letter-spacing:-2px}}.h3,h3{line-height:1.1428}@media (min-width:576px){.h3,h3{font-size:1.777rem;line-height:1.25}}.h4,h4{line-height:1.1666}@media (min-width:576px){.h4,h4{font-size:1.555rem;line-height:1.428;font-weight:600}}.h5,h5{font-weight:400}@media (min-width:576px){.h5,h5{font-size:1.333rem}}.h6,h6{font-weight:600;line-height:1.5}.display-1{font-size:49.776px;font-size:3.111rem}@media (min-width:576px){.display-1{font-size:3.111rem;line-height:1.428}}.blockquote,blockquote{font-family:Lora,Georgia,serif;margin:1.5rem 0}caption{font-size:12.432px;font-size:.777rem;line-height:1.4285}b,strong{font-weight:600}.small,small{font-size:15px;font-size:.9375rem;font-weight:400}@media (min-width:576px){.small,small{font-size:.8888rem}}.x-small{font-size:14px;font-size:.875rem;font-weight:400}@media (min-width:576px){.x-small{font-size:.7777rem}}.blockquote-footer{color:#656566}.bg-dark .blockquote-footer{color:#979899}.row.variable-gutters{margin-right:-6px;margin-left:-6px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:6px;padding-left:6px}@media (min-width:576px){.row.variable-gutters{margin-right:-6px;margin-left:-6px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:6px;padding-left:6px}}@media (min-width:768px){.row.variable-gutters{margin-right:-10px;margin-left:-10px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:10px;padding-left:10px}}@media (min-width:992px){.row.variable-gutters{margin-right:-10px;margin-left:-10px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:10px;padding-left:10px}}@media (min-width:1200px){.row.variable-gutters{margin-right:-14px;margin-left:-14px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:14px;padding-left:14px}}.table td,.table th{text-align:left;border-bottom:1px solid #d6dce3;border-top:none}.breadcrumb-container .breadcrumb{padding:24px;border-radius:0}.breadcrumb-container .breadcrumb .breadcrumb-item{padding-left:0}.breadcrumb-container .breadcrumb .breadcrumb-item+.breadcrumb-item:before{display:none}.breadcrumb-container .breadcrumb .breadcrumb-item i{padding-right:.5em}.breadcrumb-container .breadcrumb .breadcrumb-item a{color:#5b6f82;font-weight:600}.breadcrumb-container .breadcrumb .breadcrumb-item.active a{font-weight:400;pointer-events:none}.breadcrumb-container .breadcrumb .breadcrumb-item span.separator{display:inline-block;font-weight:600;padding:0 .5em}.breadcrumb-container .breadcrumb.dark{background:#435a70}.breadcrumb-container .breadcrumb.dark .breadcrumb-item a,.breadcrumb-container .breadcrumb.dark .breadcrumb-item span.separator{color:#fff}.breadcrumb-container .breadcrumb.dark .breadcrumb-item i{color:#0bd9d2}.modal-content,.modal-header{border-radius:0}[data-toggle=collapse] .collapse-icon:before{content:"";display:inline-block;width:0;height:0;border-top:.5rem solid;border-right:.5rem solid transparent;border-bottom:0;border-left:.5rem solid transparent;vertical-align:3px;vertical-align:.1875rem}[data-toggle=collapse].collapsed .collapse-icon:before{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.collapse-div{border-bottom:1px solid #e3e4e6}.collapse-div .collapse-div{border:1px solid #e3e4e6;border-top:0}.collapse-header{position:relative}.collapse-header [data-toggle=collapse]{width:100%;text-align:left;border:0;background-color:transparent;border-top:1px solid #e3e4e6;padding:14px 24px;cursor:pointer;color:#5c6f82;font-weight:600}.collapse-header [data-toggle=collapse][aria-expanded=false]{color:#0073e6}.collapse-header [data-toggle=collapse][aria-expanded=false]:after{content:"\e818"}.collapse-header [data-toggle=collapse][aria-expanded=true]:before{height:2px;width:56px;border-radius:2px;background-color:#0073e6;position:absolute;top:0;display:block;content:"";left:20px}.collapse-header [data-toggle=collapse][aria-expanded=false]:hover:after,.collapse-header [data-toggle=collapse][aria-expanded=true]:hover:after{text-decoration:none}.collapse-header [data-toggle=collapse]:after{content:"\e810";font-family:italia-icon-font;font-style:normal;font-weight:400;float:right;text-decoration:inherit;width:1em;margin-right:.2em;margin-top:5px;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.collapse-header [data-toggle=collapse]:hover{background-color:#e6ecf2;text-decoration:underline}.collapse-header [data-toggle=collapse]:active{background-color:#0073e6;color:#fff;border-color:#0073e6}.collapse-body{padding:12px 24px 42px}.collapse-body .collapse-header button[aria-expanded=true]:before{height:0;width:0}.carousel{background-color:#444e57;padding:3.5em 3em 3em}.carousel-control-next,.carousel-control-prev{top:1em;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.carousel-control-prev{left:auto;right:6em}.carousel-control-next{right:3em}.carousel-caption{position:static;padding-bottom:0}.carousel-indicators li{background-color:rgba(101,220,223,.5)}.carousel-indicators .active{background-color:#5c6f82}.list-group-item{padding:1rem}.list-group-item.disabled,.list-group-item:disabled{cursor:default}.list-group-item-action:focus,.list-group-item-action:hover{text-decoration:underline;background-color:#d9e6f2}.list-group-item-action.disabled:focus,.list-group-item-action.disabled:hover,.list-group-item-action:disabled:focus,.list-group-item-action:disabled:hover{text-decoration:none;background-color:transparent;border-top-color:transparent}.list-group-item.active:focus,.list-group-item.active:hover{background-color:#0073e6}.alert{position:relative;margin-bottom:1rem;border:1px solid #b1b1b3;padding:1rem 1rem 1rem 4em}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3.5rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.8rem 1rem;color:inherit}.alert-success{border-left:8px solid #00cc85}.alert-info,.alert-success{background-position:1em .8em;background-repeat:no-repeat}.alert-info{border-left:8px solid #979899}.alert-warning{border-left:8px solid #f90}.alert-danger,.alert-warning{background-position:1em .8em;background-repeat:no-repeat}.alert-danger{border-left:8px solid #f73e5a;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M16 1.6C24 1.6 30.4 8 30.4 16S24 30.4 16 30.4 1.6 24 1.6 16 8 1.6 16 1.6zM16 0C7.2 0 0 7.2 0 16s7.2 16 16 16 16-7.2 16-16S24.8 0 16 0z'/%3E%3Cpath d='M14.4 24c0-.96.64-1.6 1.6-1.6s1.6.64 1.6 1.6c0 .96-.64 1.6-1.6 1.6s-1.6-.64-1.6-1.6zm.64-3.2l-.32-14.4h2.56l-.32 14.4z'/%3E%3C/svg%3E")}.alert-warning{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M14.333 26c0-1 .667-1.667 1.667-1.667S17.667 25 17.667 26 17 27.667 16 27.667 14.333 27 14.333 26zM15 22.667l-.333-15h2.667l-.333 15z'/%3E%3Cpath d='M16 2.667c1 0 2 .5 2.5 1.333l10.333 20.833c.5.833.5 2 0 2.833s-1.5 1.5-2.5 1.5H5.666c-1 0-2-.5-2.5-1.5-.5-.833-.5-2 0-2.833L13.499 4c.5-.833 1.5-1.333 2.5-1.333zM16 1c-1.5 0-3 .833-4 2.333L1.667 24.166c-1.667 3 .5 6.833 4 6.833h20.667c3.5 0 5.667-3.833 4-6.833L20.001 3.333c-1-1.667-2.5-2.333-4-2.333z'/%3E%3C/svg%3E")}.alert-success{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M32 6.682l-2.824-2.635-18.447 18.635-8.094-8.094L0 17.412l8.094 7.906h-.188l2.824 2.635 2.635-2.635z'/%3E%3C/svg%3E")}.alert-info{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M16 1.6C24 1.6 30.4 8 30.4 16S24 30.4 16 30.4 1.6 24 1.6 16 8.16 1.6 16 1.6zM16 0C7.2 0 0 7.2 0 16s7.2 16 16 16 16-7.2 16-16S24.8 0 16 0z'/%3E%3Cpath d='M14.72 9.76V6.72h2.88v3.04h-2.88zm0 15.84V12h2.88v13.6h-2.88z'/%3E%3C/svg%3E")}.btn{padding:12px 24px;font-size:16px;white-space:normal}.btn-group-lg>.btn,.btn-group-sm>.btn,.btn-lg,.btn-sm,.btn-xs{border-radius:4px;line-height:1.5}.btn-xs{padding:8px;font-size:14px;line-height:1.428}.btn-group-sm>.btn,.btn-sm{padding:10px 20px;font-size:14px;line-height:1.428}.btn-group-lg>.btn,.btn-lg{padding:14px 28px;font-size:18px;line-height:1.556}.btn-block{border-radius:0}.btn-primary.disabled,.btn-primary:disabled{color:#bfc2c9;background-color:#e6e9f2;border-color:#dfe4f2}.btn-outline-secondary{background:#fcfdff;-webkit-box-shadow:inset 0 0 0 1px #e6e9f2;box-shadow:inset 0 0 0 1px #e6e9f2}.btn-outline-secondary:hover{-webkit-box-shadow:inset 0 0 0 1px #c9cedc;box-shadow:inset 0 0 0 1px #c9cedc}.bg-dark .btn-link{color:#fff}.bg-dark .btn-primary{color:#19191a;background-color:#fff;border-color:#0073e6;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);color:#0073e6}.bg-dark .btn-primary:hover{color:#19191a;background-color:#fff;border-color:#0059b3}.bg-dark .btn-primary.focus,.bg-dark .btn-primary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5)}.bg-dark .btn-primary.disabled,.bg-dark .btn-primary:disabled{color:#19191a;background-color:#fff;border-color:#0073e6}.bg-dark .btn-primary:not(:disabled):not(.disabled).active,.bg-dark .btn-primary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-primary.dropdown-toggle{color:#19191a;background-color:#fff;border-color:#0053a6}.bg-dark .btn-primary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-primary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5)}.bg-dark .btn-primary.disabled,.bg-dark .btn-primary:disabled,.bg-dark .btn-primary:hover{color:#0059b3}.bg-dark .btn-outline-primary{color:#fff;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff}.bg-dark .btn-outline-primary:hover{color:#e6e6e6;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-primary.focus,.bg-dark .btn-outline-primary:focus{-webkit-box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-primary.disabled,.bg-dark .btn-outline-primary:disabled{color:#fff;background-color:transparent}.bg-dark .btn-outline-primary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-primary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-primary.dropdown-toggle{color:#e6e6e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-primary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-primary:hover{-webkit-box-shadow:inset 0 0 0 2px #e6e6e6;box-shadow:inset 0 0 0 2px #e6e6e6}.bg-dark .btn-outline-primary.focus,.bg-dark .btn-outline-primary:focus{-webkit-box-shadow:inset 0 0 0 2px #fff,0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 0 0 2px #fff,0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-primary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-primary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-primary.dropdown-toggle{-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff}.bg-dark .btn-secondary{background-color:#0073e6;border-color:#fff;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);color:#fff}.bg-dark .btn-secondary:hover{color:#fff;background-color:#0d86ff;border-color:#e6e6e6}.bg-dark .btn-secondary.focus,.bg-dark .btn-secondary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-secondary.disabled,.bg-dark .btn-secondary:disabled{color:#fff;background-color:#0073e6;border-color:#fff}.bg-dark .btn-secondary:not(:disabled):not(.disabled).active,.bg-dark .btn-secondary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-secondary.dropdown-toggle{color:#fff;background-color:#1a8cff;border-color:#dfdfdf}.bg-dark .btn-secondary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary{color:#fff;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;-webkit-box-shadow:none;box-shadow:none}.bg-dark .btn-outline-secondary:hover{color:#e6e6e6;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-secondary.focus,.bg-dark .btn-outline-secondary:focus{-webkit-box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary.disabled,.bg-dark .btn-outline-secondary:disabled{color:#fff;background-color:transparent}.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-secondary.dropdown-toggle{color:#e6e6e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary:hover{-webkit-box-shadow:none;box-shadow:none}.bg-dark .btn-outline-secondary.focus,.bg-dark .btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-secondary.dropdown-toggle{-webkit-box-shadow:none;box-shadow:none}.form-group{position:relative;margin-bottom:4px;padding:1.5rem 0 1rem}.form-group button,.form-group input,.form-group optgroup,.form-group select,.form-group textarea{color:#17324d}.form-group label{position:absolute;color:#5c6f82;font-weight:600;line-height:40px;line-height:2.5rem;-webkit-transition:.2s ease-out;transition:.2s ease-out;top:24px;top:1.5rem;font-size:16px;font-size:1rem;cursor:text;display:block;width:100%;padding:0 .75rem;z-index:6}.form-group small.form-text{position:absolute;margin:0;padding:0 .75rem;font-size:12.432px;font-size:.777rem}.form-group.active label{-webkit-transform:translateY(-75%);transform:translateY(-75%);font-size:12.432px;font-size:.777rem}.form-group.active .ico-prefix,.form-group.active label{color:#5c6f82}.form-row .form-group{padding-bottom:0}input[type=date],input[type=datetime-local],input[type=email],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],select,textarea{border:none;border-bottom:1px solid #5c6f82;border-radius:0;outline:0;height:40px;height:2.5rem;width:100%;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:all .3s;transition:all .3s;font-weight:700}select,textarea{border:1px solid #5c6f82}input[type=file]+label{background-color:transparent}.form-control-plaintext+label,.form-group input.form-control-file+label,.form-group label.active,.form-group select.form-control+label,.input-group+label,.input-group~label,:disabled .form-group label{-webkit-transform:translateY(-75%);transform:translateY(-75%);font-size:12.432px;font-size:.777rem;background:transparent}:disabled .form-group label{top:0}.form-group.active .form-file-name{padding-bottom:1.95rem}.form-control-plaintext{padding:.375rem .75rem;background-color:#fff}.form-control:active,.form-control:focus{-webkit-box-shadow:none!important;box-shadow:none!important}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{background-position:100%!important;background-repeat:no-repeat!important;background-size:45px 45%!important;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2300cc85' viewBox='0 0 192 512'%3E%3Cpath d='M435.848 83.466L172.804 346.51l-96.652-96.652c-4.686-4.686-12.284-4.686-16.971 0l-28.284 28.284c-4.686 4.686-4.686 12.284 0 16.971l133.421 133.421c4.686 4.686 12.284 4.686 16.971 0l299.813-299.813c4.686-4.686 4.686-12.284 0-16.971l-28.284-28.284c-4.686-4.686-12.284-4.686-16.97 0z'/%3E%3C/svg%3E")}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{background-position:100%!important;background-repeat:no-repeat!important;background-size:45px 45%!important;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f73e5a' viewBox='0 0 384 512'%3E%3Cpath d='M231.6 256l130.1-130.1c4.7-4.7 4.7-12.3 0-17l-22.6-22.6c-4.7-4.7-12.3-4.7-17 0L192 216.4 61.9 86.3c-4.7-4.7-12.3-4.7-17 0l-22.6 22.6c-4.7 4.7-4.7 12.3 0 17L152.4 256 22.3 386.1c-4.7 4.7-4.7 12.3 0 17l22.6 22.6c4.7 4.7 12.3 4.7 17 0L192 295.6l130.1 130.1c4.7 4.7 12.3 4.7 17 0l22.6-22.6c4.7-4.7 4.7-12.3 0-17L231.6 256z'/%3E%3C/svg%3E")}.custom-select.warning,.form-control.warning{background-position:100%!important;background-repeat:no-repeat!important;background-size:25px 45%!important;border-color:#f90;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f90' viewBox='0 0 192 512'%3E%3Cpath d='M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z'/%3E%3C/svg%3E")}.custom-select.is-valid~.warning-feedback,.form-control.is-valid~.warning-feedback{display:block}.warning-feedback{display:none;width:100%;margin-top:.25rem;font-size:12.432px;font-size:.777rem;color:#f90}.invalid-feedback,.valid-feedback,.warning-feedback{margin-left:.75rem}.form-file input[type=file]{filter:alpha(opacity=0);margin:0;max-width:100%;opacity:0}.form-file .form-file-name{border-bottom:1px solid rgba(0,0,0,.15);border-radius:0;color:#464a4c;left:0;overflow:hidden;padding:.5rem .6rem 2rem;max-height:32px;max-height:2rem;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:5}.form-file .form-file-name,.form-file .form-file-name:before{background-color:#fff;line-height:1.7;position:absolute;right:0;top:0}.form-file .form-file-name:before{bottom:-1px;color:#0073e6;content:"Sfoglia";display:block;height:40px;height:2.5rem;padding:.4rem 1rem 1.5rem;border:1px solid #0073e6;z-index:6;border-top-right-radius:4px}.input-group-text{background-color:#f8f8f8;border:0;border-radius:0!important;border-bottom:1px solid #555}.input-group-prepend{margin-right:0}.input-group-append{margin-left:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:0 1rem;border-radius:0}.ico-prefix{position:absolute;width:48px;width:3rem;font-size:28.8px;font-size:1.8rem;z-index:10;text-align:center}.ico-prefix~.form-file-name{padding-left:3.5rem}.ico-prefix~.select-wrapper .select-dropdown,.ico-prefix~input,.ico-prefix~label,.ico-prefix~textarea{padding-left:3rem}.form-group.active .ico-prefix~label,.ico-prefix~.custom-select~label,.ico-prefix~label.active{padding-left:.75rem}.form-group .form-check,.form-row .form-check,.row .form-check{padding-left:0;margin-top:1rem}.form-check [type=checkbox],.form-check [type=radio]{position:absolute;left:-9999px}.form-check [type=checkbox]+label,.form-check [type=radio]+label{position:relative;padding-left:36px;cursor:pointer;display:inline-block;height:32px;line-height:32px;font-size:16px;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-check [type=checkbox]+label:after,.form-check [type=checkbox]+label:before{content:"";left:0;position:absolute;-webkit-transition:.2s;transition:.2s;z-index:1;border-style:solid;border-width:2px}.form-check [type=checkbox]+label:before{top:0;width:17px;height:17px;border:1px solid #e6e9f2;border-radius:1px;margin:2px 5px;-webkit-transform:rotate(37deg);transform:rotate(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.form-check [type=checkbox]+label:after{border-radius:4px;height:20px;width:20px;margin:6px 5px;top:0}.form-check [type=checkbox]:checked+label:before{top:6px;left:1px;width:8px;height:13px;border-color:transparent #fff #fff transparent;border-style:solid;border-width:2px;-webkit-transform:rotate(40deg);transform:rotate(40deg);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:.8}.form-check [type=checkbox]:checked+label:after{border-color:#0073e6;background-color:#0073e6;z-index:0}.form-check [type=checkbox]:not(:checked)+label:after{background-color:transparent;border-color:#5c6f82;z-index:0}.form-check [type=checkbox]:not(:checked)+label:before{width:0;height:0;border-color:transparent;left:6px;top:10px}.form-check [type=checkbox]:disabled+label{cursor:not-allowed}.form-check [type=checkbox]:disabled:not(:checked)+label:after{border-color:#e6e9f2;background-color:#fff}.form-check [type=checkbox]:disabled:checked+label:after{background-color:#e6e9f2;border-color:#e6e9f2}.form-check [type=radio]+label{-webkit-transition:.2s ease;transition:.2s ease}.form-check [type=radio]+label:after,.form-check [type=radio]+label:before{content:"";position:absolute;left:0;top:0;margin:5px;width:22px;height:22px;z-index:0;border-radius:50%;border-style:solid;border-width:2px;-webkit-transition:.2s ease;transition:.2s ease}.form-check [type=radio]:not(:checked)+label:after,.form-check [type=radio]:not(:checked)+label:before{border-color:#5c6f82}.form-check [type=radio]:not(:checked)+label:after{z-index:-1;-webkit-transform:scale(0);transform:scale(0)}.form-check [type=radio]:checked+label:after{border-color:#0073e6;background-color:#0073e6;z-index:0;-webkit-transform:scale(.64);transform:scale(.64)}.form-check [type=radio]:checked+label:before{border-color:#0073e6}.form-check [type=radio]:disabled+label{cursor:not-allowed}.form-check [type=radio]:disabled:not(:checked)+label:after,.form-check [type=radio]:disabled:not(:checked)+label:before{border-color:#e6e9f2}.form-check [type=radio]:disabled:checked+label:after{border-color:#e6e9f2;background-color:#e6e9f2}.form-check [type=radio]:disabled:checked+label:before{border-color:#e6e9f2}.form-check.form-check-group{padding:0 0 8px;margin-bottom:16px;-webkit-box-shadow:inset 0 -1px 0 0 rgba(1,1,1,.1);box-shadow:inset 0 -1px 0 0 rgba(1,1,1,.1)}.form-check.form-check-group [type=checkbox]+label,.form-check.form-check-group [type=radio]+label{position:static;padding-left:8px;padding-right:52px}.form-check.form-check-group [type=checkbox]+label:after,.form-check.form-check-group [type=checkbox]+label:before,.form-check.form-check-group [type=radio]+label:after,.form-check.form-check-group [type=radio]+label:before{right:15px;left:auto}.form-check.form-check-group [type=checkbox]:checked+label:before{right:26px}.form-check.form-check-group [type=radio]:checked+label:before{right:15px}.form-check.form-check-group .form-text{opacity:.6;margin:0;padding-left:8px;padding-right:52px}.toggles,.toggles *{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.toggles label{cursor:pointer;width:100%;margin:0 8px 8px;height:32px;line-height:32px;font-weight:700}.toggles label input[type=checkbox]{opacity:0;width:0;height:0}.toggles label input[type=checkbox]+.lever{content:"";position:relative;width:46px;height:16px;background-color:#e6e9f2;border-radius:10px;-webkit-transition:background .3s ease;transition:background .3s ease;vertical-align:middle;float:right;margin:8px 16px 0}.toggles label input[type=checkbox]+.lever:after,.toggles label input[type=checkbox]+.lever:before{content:"";position:absolute;display:inline-block;width:26px;height:26px;border-radius:50%;left:0;top:-5px;left:-3px;-webkit-transition:left .3s ease,background .1s ease,-webkit-transform .1s ease;transition:left .3s ease,background .1s ease,-webkit-transform .1s ease;transition:left .3s ease,background .1s ease,transform .1s ease;transition:left .3s ease,background .1s ease,transform .1s ease,-webkit-transform .1s ease}.toggles label input[type=checkbox]+.lever:before{background-color:rgba(0,115,230,.15)}.toggles label input[type=checkbox]+.lever:after{background-color:#5c6f82;background-size:10px 10px;background-repeat:no-repeat;background-position:50%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='10' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.364 4.95l3.535 3.535L8.485 9.9 4.95 6.364 1.414 9.899 0 8.485 3.536 4.95 0 1.414 1.414 0 4.95 3.536 8.485 0 9.9 1.414 6.364 4.95z' fill='%23FFF' fill-rule='evenodd' opacity='.8'/%3E%3C/svg%3E");border:2px solid #fff}.toggles label input[type=checkbox]:checked+.lever{background-color:#e6e9f2}.toggles label input[type=checkbox]:checked+.lever:after,.toggles label input[type=checkbox]:checked+.lever:before{left:23px}.toggles label input[type=checkbox]:checked+.lever:after{background-color:#0073e6;background-size:14px 14px;background-repeat:no-repeat;background-position:50%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='14' height='11' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.879 7.536l7.07-7.072 1.415 1.415-7.071 7.07-1.414 1.415L.636 6.121 2.05 4.707 4.88 7.536z' fill='%23FFF' fill-rule='evenodd' opacity='.5'/%3E%3C/svg%3E")}.toggles label input[type=checkbox][disabled]+.lever{cursor:default;background-color:#e6e9f2}.toggles label input[type=checkbox][disabled]+.lever:after,.toggles label input[type=checkbox][disabled]:checked+.lever:after{background-color:#e6e9f2}.select-wrapper{position:relative}.select-wrapper .search-wrap input{width:100%;border:none;border-bottom:1px solid #0073e6;font-size:14.4px;font-size:.9rem;padding:0 .5em}.select-wrapper .dropdown-menu{background-color:#fff;border-radius:0;-webkit-box-shadow:0 2px 4px 3px rgba(0,0,0,.1);box-shadow:0 2px 4px 3px rgba(0,0,0,.1);margin:0;display:none;min-width:100px;max-height:240px;overflow-y:auto;position:absolute;padding:.3rem;z-index:999;will-change:width,height;list-style-type:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.select-wrapper .dropdown-menu.show{display:block}.select-wrapper .dropdown-menu li{clear:both;color:#000;cursor:pointer;line-height:32px;width:100%;text-align:left;text-transform:none}.select-wrapper .dropdown-menu li.optgroup>span{color:#ccc;padding:0}.select-wrapper .dropdown-menu li:not(.disabled):focus,.select-wrapper .dropdown-menu li:not(.disabled):hover{background-color:#eee}.select-wrapper .dropdown-menu li.active>span:after{content:"";background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNDQ4LjggNDQ4LjgiPjxwYXRoIGZpbGw9IiMwMDZERjAiIGQ9Ik0xNDIuOCAzMjMuODVMMzUuNyAyMTYuNzUgMCAyNTIuNDVsMTQyLjggMTQyLjggMzA2LTMwNi0zNS43LTM1Ljd6Ii8+PC9zdmc+");background-size:16px 16px;background-repeat:no-repeat;background-position:50%;float:right;display:block;height:32px;width:16px;opacity:.5}.select-wrapper .dropdown-menu li>a,.select-wrapper .dropdown-menu li>span{font-size:14px;color:#5c6f82;font-weight:600;display:block;padding:0 .5rem}.select-wrapper .dropdown-menu li>a.filtrable label,.select-wrapper .dropdown-menu li>a [type=checkbox],.select-wrapper .dropdown-menu li>span.filtrable label,.select-wrapper .dropdown-menu li>span [type=checkbox]{display:none}.select-wrapper .dropdown-menu li.disabled>span{cursor:unset;color:#ccc}.select-wrapper .dropdown-menu li>a>i{height:inherit;line-height:inherit}.select-wrapper .select-dropdown{color:#17324d;border-bottom:1px solid #5c6f82;position:relative;cursor:pointer;background-color:transparent;outline:0;width:100%;font-size:16px;font-size:1rem;margin:0 0 15px;display:block;line-height:24px;padding:12px 38px 12px 16px}.select-wrapper .select-dropdown:disabled{color:rgba(0,0,0,.3);border-bottom-color:rgba(0,0,0,.3);cursor:default}.select-wrapper .select-dropdown ul{list-style-type:none;padding:0}.select-wrapper .select-dropdown ul li.disabled,.select-wrapper .select-dropdown ul li.disabled>span,.select-wrapper .select-dropdown ul li.optgroup{color:rgba(0,0,0,.3);background-color:transparent!important;cursor:context-menu}.select-wrapper .select-dropdown ul li.optgroup{border-top:1px solid #eee}.select-wrapper .select-dropdown ul li.optgroup.selected>span{color:rgba(0,0,0,.7)}.select-wrapper .select-dropdown ul li.optgroup>span{color:rgba(0,0,0,.4)}.select-wrapper .caret{color:#757575;position:absolute;right:12px;line-height:16px;top:calc(50% - 8px)}.select-wrapper .caret .disabled{color:rgba(0,0,0,.46)}.select-wrapper.show .select-dropdown{color:#0073e6;border-bottom:1px solid #0073e6}.select-wrapper.show .caret{color:#0073e6}.select-wrapper+label{padding:0 .75rem!important;position:absolute;top:-18px;font-size:12.8px;font-size:.8rem}.select-wrapper select.custom-select{display:none!important}.select-wrapper select:disabled{color:rgba(0,0,0,.3)}.btn-eye{background-position:50%!important;background-repeat:no-repeat!important;width:28px;height:22px;position:absolute;right:8px;right:.5rem;top:36px;top:2.25rem;z-index:10;color:#5c6f82;cursor:pointer}.eye-on{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 576 512'%3E%3Cpath d='M272.702 359.139c-80.483-9.011-136.212-86.886-116.93-167.042l116.93 167.042zM288 392c-102.556 0-192.092-54.701-240-136 21.755-36.917 52.1-68.342 88.344-91.658l-27.541-39.343C67.001 152.234 31.921 188.741 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.004 376.006 168.14 440 288 440a332.89 332.89 0 0 0 39.648-2.367l-32.021-45.744A284.16 284.16 0 0 1 288 392zm281.354-111.631c-33.232 56.394-83.421 101.742-143.554 129.492l48.116 68.74c3.801 5.429 2.48 12.912-2.949 16.712L450.23 509.83c-5.429 3.801-12.912 2.48-16.712-2.949L102.084 33.399c-3.801-5.429-2.48-12.912 2.949-16.712L125.77 2.17c5.429-3.801 12.912-2.48 16.712 2.949l55.526 79.325C226.612 76.343 256.808 72 288 72c119.86 0 224.996 63.994 281.354 159.631a48.002 48.002 0 0 1 0 48.738zM528 256c-44.157-74.933-123.677-127.27-216.162-135.007C302.042 131.078 296 144.83 296 160c0 30.928 25.072 56 56 56s56-25.072 56-56l-.001-.042c30.632 57.277 16.739 130.26-36.928 171.719l26.695 38.135C452.626 346.551 498.308 306.386 528 256z'/%3E%3C/svg%3E")}.eye-off{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 576 512'%3E%3Cpath d='M569.354 231.631C512.97 135.949 407.81 72 288 72 168.14 72 63.004 135.994 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.031 376.051 168.19 440 288 440c119.86 0 224.996-63.994 281.354-159.631a47.997 47.997 0 0 0 0-48.738zM288 392c-102.556 0-192.091-54.701-240-136 44.157-74.933 123.677-127.27 216.162-135.007C273.958 131.078 280 144.83 280 160c0 30.928-25.072 56-56 56s-56-25.072-56-56l.001-.042C157.794 179.043 152 200.844 152 224c0 75.111 60.889 136 136 136s136-60.889 136-136c0-31.031-10.4-59.629-27.895-82.515C451.704 164.638 498.009 205.106 528 256c-47.908 81.299-137.444 136-240 136z'/%3E%3C/svg%3E")}.psw-wrapper{padding:0 .75rem}.psw-meter{height:3px;max-width:180px}.psw-meter .col-3{height:3px}.psw-percent,.psw-text{font-size:12px;font-size:.75rem;display:block;padding:.25rem 0;font-weight:500}.psw-percent{margin-right:5px}@-webkit-keyframes dropdownFadeIn{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:16px}}@keyframes dropdownFadeIn{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:16px}}@-webkit-keyframes dropdownFadeInTop{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:-16px}}@keyframes dropdownFadeInTop{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:-16px}}.btn-dropdown{color:#06c;padding:0 4px;background-color:transparent;font-size:16px;font-size:1rem;border-radius:0}.btn-dropdown:not(:disabled):not(.disabled):active{-webkit-box-shadow:none;box-shadow:none}.btn-dropdown:after{content:"";font-size:12.8px;font-size:.8rem;font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;border:none;display:inline-block;vertical-align:0;width:auto;height:auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.btn-dropdown[aria-expanded=true]:after{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.dropdown-menu{border-radius:0 0 4px 4px}.dropdown-menu.full-width{width:100%}.dropdown-menu.full-width .link-list li{display:inline-block;width:auto}.dropdown-menu.full-width .link-list li:focus,.dropdown-menu.full-width .link-list li:hover{background:none;text-decoration:underline}.dropdown-menu .link-list{margin-bottom:0}.dropdown-menu .link-list h3{line-height:2.3em;margin-bottom:0}.dropdown-menu:before{content:"";position:absolute;top:-6px;left:24px;width:18px;height:18px;border-radius:4px;background-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.dropdown-menu[x-placement=top-start]{border-radius:4px 4px 0 0}.dropdown-menu[x-placement=top-start]:before{bottom:-6px;top:auto}.dropdown-menu.dark{background-color:#435a70}.dropdown-menu.dark .link-list-wrapper ul span.divider{background:#2e465e}.dropdown-menu.dark .link-list-wrapper ul li a:hover span,.dropdown-menu.dark .link-list-wrapper ul li a span,.dropdown-menu.dark .link-list-wrapper ul li h3,.dropdown-menu.dark .link-list-wrapper ul li i{color:#fff}.dropdown-menu.dark .link-list-wrapper ul li a:not(.active):not(.disabled):hover i{color:#4fe0dc}.dropdown-menu.dark .link-list-wrapper ul li a.disabled span{color:#adb2b8}.dropdown-menu.dark:before{background-color:#435a70}nav.pagination-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination-wrapper,nav.pagination-wrapper.pagination-total{-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}nav.pagination-wrapper.pagination-total{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination-wrapper.pagination-total ul{margin-bottom:.5rem}nav.pagination-wrapper.pagination-total p{font-size:14.222px;font-size:.8888888889rem;color:#5b6f82;margin-bottom:1rem;font-weight:600;text-align:center}nav.pagination-wrapper .form-group{margin-left:2.5rem;width:72px;width:4.5rem;margin-top:0}nav.pagination-wrapper .form-group label{font-size:14.222px;font-size:.8888888889rem;color:#9da2a6}nav.pagination-wrapper .form-group.active label{font-size:12.8px;font-size:.8rem}nav.pagination-wrapper .btn.dropdown-toggle{font-size:14.222px;font-size:.8888888889rem;color:#5b6f82;font-weight:600;padding:12px;height:40px;height:2.5rem;border:none;width:100%}nav.pagination-wrapper .btn.dropdown-toggle:after{color:#0073e6;margin-left:.5rem}.pagination{-ms-flex-wrap:wrap;flex-wrap:wrap}.pagination .page-item{margin-right:5px}.pagination .page-item.disabled a.page-link,.pagination .page-item.disabled a.page-link i[class^=it-]{color:#c2c7cc}.pagination .page-item span.page-link{pointer-events:none}.pagination .page-item .page-link{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:40px;height:2.5rem;min-width:40px;min-width:2.5rem;border-radius:4px;border:none;font-size:14.222px;font-size:.8888888889rem;font-weight:600;color:#5b6f82;background-color:transparent}.pagination .page-item .page-link[aria-current]{border:1px solid #06c;color:#06c;pointer-events:none}.pagination .page-item .page-link.text,.pagination .page-item .page-link i[class^=it-]{color:#0073e6}.pagination .page-item .page-link i[class^=it-]{font-size:11.2px;font-size:.7rem}.pagination .page-item .page-link span.d-inline-block{margin-right:.5rem}.pagination .page-item .page-link:hover{color:#06c;background-color:transparent}.pagination .page-item .page-link:hover i[class^=it-]{color:#06c}@media (min-width:576px){.pagination .page-item .page-link{height:2.6666666667rem;min-width:2.6666666667rem}nav.pagination-wrapper .btn.dropdown-toggle{height:2.6666666667rem}}@media (min-width:768px){nav.pagination-wrapper{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}nav.pagination-wrapper .dropdown{margin-left:2.6666666667rem}}@media (max-width:767.98px){.offcanvas-collapse{position:fixed;top:56px;bottom:0;left:1em;width:100%;overflow-y:auto;background-color:#323333;-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out;-webkit-transform:translateX(100%);transform:translateX(100%)}.offcanvas-collapse.open{-webkit-transform:translateX(-1rem);transform:translateX(-1rem)}}.nav-tabs{position:relative;background-color:#fff;border-bottom:0}.nav-tabs:after{content:"";position:absolute;z-index:-1;-webkit-box-shadow:0 0 2rem rgba(0,0,0,.15);box-shadow:0 0 2rem rgba(0,0,0,.15);bottom:0;left:10%;right:10%;width:80%;height:50%;border-radius:100%}.nav-tabs .nav-link{border-radius:0;font-weight:600;color:#5c6f82;border:none;border-bottom:2px solid transparent}.nav-tabs .nav-link.disabled{color:#b1b1b3;font-weight:400}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{border-bottom:2px solid #06c;color:#06c;cursor:inherit}.nav-tabs .nav-item{margin-bottom:0}.nav-tabs.nav-dark{background-color:#455b71}.nav-tabs.nav-dark .nav-link{color:#c7d1d0}.nav-tabs.nav-dark .nav-item.show .nav-link,.nav-tabs.nav-dark .nav-link.active{background-color:#455b71;color:#00fff7;border-bottom:2px solid #00fff7}.it-ico-sm{font-size:28px;font-size:1.75rem}.it-ico{font-size:20px;font-size:1.25rem}.it-ico-lg{font-size:24px;font-size:1.5rem}.cookiebar{bottom:0;left:0;right:0;display:none;position:fixed;width:100%;z-index:1100}.cookiebar.cookiebar-top{bottom:auto;top:0}.cookiebar.show{display:block}.hero{padding:1rem;margin-bottom:1rem;background-color:#cacacc;border-radius:0}@media (min-width:576px){.hero{padding:1rem}}.hero .hero-heading{font-size:32px;font-size:2rem;font-weight:700;color:#00264d;margin-bottom:.8rem}.hero-fluid{padding-right:0;padding-left:0;border-radius:0}.forward{display:block;text-align:center;font-size:48px;font-size:3rem;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.forward:hover{text-decoration:none}.return-to-top{position:fixed;bottom:16px;right:16px;background:#0073e6;background:rgba(0,115,230,.7);width:48px;height:48px;display:block;text-decoration:none;border-radius:50%;display:none;text-align:center;z-index:1}.return-to-top,.return-to-top i{-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.return-to-top i{color:#fff;margin:0;position:relative;top:8px;font-size:20px}.return-to-top i:before{margin:0}.return-to-top:hover{background:rgba(0,115,230,.9);text-decoration:none}.return-to-top:hover i{color:#fff;top:4px}.autocomplete-clear{visibility:hidden;position:absolute;z-index:2;right:4px;right:.25rem;top:8px;top:.5rem;background:transparent;border:none;cursor:pointer}.autocomplete-clear svg{fill:#a6a6a6}.autocomplete-wrap{position:absolute;left:0;right:0;background:#fff;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.25);box-shadow:0 2px 5px rgba(0,0,0,.25);z-index:100;max-height:240px;overflow-y:auto;padding-left:0;list-style-type:none}.autocomplete-wrap li{cursor:pointer;padding:12px 16px;font-size:14px;font-size:.875rem}.autocomplete-wrap li:hover{background:#eee}.link-list-wrapper ul{padding:0;list-style-type:none}.link-list-wrapper ul.link-sublist{padding-left:24px}.link-list-wrapper ul li a{font-size:.889em;line-height:2.3em;display:block;padding:0 24px;position:relative}.link-list-wrapper ul li a:hover:not(.disabled){text-decoration:none}.link-list-wrapper ul li a:hover:not(.disabled) span{color:#06c;text-decoration:underline}.link-list-wrapper ul li a:hover:not(.disabled) p{color:#06c;text-decoration:none}.link-list-wrapper ul li a.disabled:hover{text-decoration:none}.link-list-wrapper ul li a.medium{font-weight:600}.link-list-wrapper ul li a span{color:#06c;display:block;margin-right:24px}.link-list-wrapper ul li a.right-icon i.right{position:absolute;top:0;right:24px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.link-list-wrapper ul li a.right-icon i.right.secondary{color:#9da2a6}.link-list-wrapper ul li a.right-icon[aria-expanded=true] i.right{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.link-list-wrapper ul li a.active span{color:#17324d;text-decoration:underline}.link-list-wrapper ul li a.disabled{cursor:not-allowed}.link-list-wrapper ul li a.disabled.left-icon i,.link-list-wrapper ul li a.disabled.left-icon i.secondary,.link-list-wrapper ul li a.disabled.right-icon i,.link-list-wrapper ul li a.disabled.right-icon i.secondary,.link-list-wrapper ul li a.disabled span{color:#adb2b8}.link-list-wrapper ul li a.left-icon{display:-webkit-box;display:-ms-flexbox;display:flex}.link-list-wrapper ul li a.left-icon i.left{margin-right:8px}.link-list-wrapper ul li a.large{font-size:1em}.link-list-wrapper ul li a p{font-size:.778em;line-height:normal;color:#5b6f82}.link-list-wrapper ul li a.avatar{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:8px}.link-list-wrapper ul li a.avatar .avatar{display:block;border-radius:50px;margin-right:8px}.link-list-wrapper ul li h3{font-size:1em;color:#17324d;padding:0 24px}.link-list-wrapper ul li h3 a{line-height:inherit;font-size:1em;padding:0}.link-list-wrapper ul .divider{display:block;height:1px;background:#ebeced;margin:8px 0}.link-list-wrapper ul .toggles label{padding:0 24px;font-size:.889em;line-height:2.3em;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:auto;font-weight:inherit;margin:0}.link-list-wrapper ul .toggles input[type=checkbox]+.lever{margin:8px 0 0}.link-list-wrapper ul .form-check.form-check-group{padding:0 24px;-webkit-box-shadow:none;box-shadow:none}.link-list-wrapper ul .form-check.form-check-group [type=checkbox]+label{padding-left:0;font-size:.889em;line-height:2.3em;height:inherit;margin-bottom:0}.link-list-wrapper ul .form-check.form-check-group [type=checkbox]+label:after{right:24px}.link-list-wrapper ul .form-check.form-check-group [type=checkbox]+label:before{right:35px}.link-list-wrapper ul .form-check.form-check-group [type=checkbox][disabled]+label{color:#adb2b8}@media (min-width:576px){.link-list-wrapper ul li a.large{font-size:1em;line-height:2.7em}}@media (min-width:768px){.link-list-wrapper ul li a.large{line-height:2.7em}}@-webkit-keyframes megamenuFadeIn{0%{opacity:0;margin-top:16px}to{opacity:1;margin-top:16px}}@keyframes megamenuFadeIn{0%{opacity:0;margin-top:16px}to{opacity:1;margin-top:16px}}.navbar{background:#06c}.navbar .navbar-collapsable{position:fixed;top:0;right:0;left:0;bottom:0;z-index:10;background:rgba(0,0,0,.6);display:none}.navbar .navbar-collapsable .menu-wrapper{background:#06c;position:absolute;top:0;bottom:0;right:0;left:48px;pointer-events:all;overflow-y:auto;-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition:all .3s;transition:all .3s}.navbar .navbar-collapsable .navbar-nav{margin-top:102px;padding:24px 0}.navbar .navbar-collapsable .navbar-nav li a.nav-link{color:#fff;font-weight:400;padding:12px 24px;position:relative}.navbar .navbar-collapsable .navbar-nav li a.nav-link.active{border-left:2px solid #fff}.navbar .navbar-collapsable.expanded .close-div,.navbar .navbar-collapsable.expanded .menu-wrapper{-webkit-transform:translateX(0);transform:translateX(0)}.navbar .close-div{-webkit-transform:translateX(100%);transform:translateX(100%);padding:24px;position:fixed;left:48px;right:0;top:0;background:#06c;z-index:10;-webkit-transition:all .3s;transition:all .3s}.navbar .close-div .close-menu{background:transparent;color:#fff;text-align:center;font-size:.75em;text-transform:uppercase;padding:0}.navbar .close-div .close-menu span{display:block;text-align:center;font-size:2em}.navbar .close-div .close-menu span:before{margin-right:0}.navbar .dropdown-menu{background:transparent;-webkit-box-shadow:none;box-shadow:none}.navbar .dropdown-menu:before{display:none}.navbar .dropdown-menu .link-list-wrapper{padding-left:24px;padding-right:24px}.navbar .dropdown-menu .link-list-wrapper ul li a h3,.navbar .dropdown-menu .link-list-wrapper ul li a span,.navbar .dropdown-menu .link-list-wrapper ul li h3{color:#fff}.navbar .dropdown-toggle{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar .dropdown-toggle:after{font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:auto;height:auto;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;content:"\e818";vertical-align:auto;border:none;border-bottom:0;font-size:.8em;line-height:2em;-webkit-transform-origin:center;transform-origin:center;-webkit-transition:all .3s;transition:all .3s}.navbar .dropdown-toggle[aria-expanded=true]:after{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.custom-navbar-toggler{background:none;border:none}.custom-navbar-toggler span{color:#fff;font-size:1.625em}.inline-menu .link-list-wrapper .link-list,.inline-menu .link-list-wrapper .link-list li a{position:relative}.inline-menu .link-list-wrapper .link-list li a i{color:#6aaaeb}.inline-menu .link-list-wrapper .link-list li a:after{content:"";display:block;width:2px;background:#06c;position:absolute;right:0;top:0;height:100%;-webkit-transform-origin:center;transform-origin:center;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:all .3s;transition:all .3s;z-index:1}.inline-menu .link-list-wrapper .link-list li a.active span{color:#06c;text-decoration:none}.inline-menu .link-list-wrapper .link-list li a[aria-expanded=true]:after{-webkit-transform:scaleY(1);transform:scaleY(1)}.inline-menu .link-list-wrapper .link-list:after{content:"";display:block;width:2px;background:-webkit-gradient(linear,left top,left bottom,from(#e6ecf2),to(rgba(230,236,242,.3)));background:linear-gradient(180deg,#e6ecf2 0,rgba(230,236,242,.3));position:absolute;right:0;top:0;height:100%}@media (min-width:992px){.navbar{background:#06c;padding:0}.navbar .navbar-collapsable{position:relative;z-index:auto;background:none;display:block!important}.navbar .navbar-collapsable,.navbar .navbar-collapsable .menu-wrapper{top:auto;right:auto;left:auto;bottom:auto;-webkit-transition:none;transition:none}.navbar .navbar-collapsable .menu-wrapper{position:inherit;overflow-y:visible;-webkit-transform:none;transform:none}.navbar .navbar-collapsable .navbar-nav{margin-top:0;padding:0 24px}.navbar .navbar-collapsable .navbar-nav li a.nav-link{font-weight:400;padding:12px 24px}.navbar .navbar-collapsable .navbar-nav li a.nav-link.active{border-left:0;border-bottom:2px solid #fff}.navbar .navbar-collapsable .navbar-nav li a.nav-link.disabled{opacity:.5;cursor:not-allowed}.navbar .close-div{display:none}.navbar .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#19191a;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:0 solid transparent;border-radius:4px;-webkit-box-shadow:0 0 30px 5px rgba(0,0,0,.05);box-shadow:0 0 30px 5px rgba(0,0,0,.05)}.navbar .dropdown-menu.show{-webkit-animation:dropdownFadeIn .3s forwards;animation:dropdownFadeIn .3s forwards;top:calc(100% - 16px)}.navbar .dropdown-menu:before{display:block}.navbar .dropdown-menu .link-list-wrapper{padding-left:0;padding-right:0}.navbar .dropdown-menu .link-list-wrapper ul li a h3,.navbar .dropdown-menu .link-list-wrapper ul li a span{color:#06c}.navbar .dropdown-menu .link-list-wrapper ul li h3{color:#19191a}.navbar .dropdown-toggle{display:block;-webkit-box-pack:inherit;-ms-flex-pack:inherit;justify-content:inherit}.navbar .dropdown-toggle:after{content:"";font-size:.8rem;font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;border:none;display:inline-block;vertical-align:0;width:auto;height:auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.navbar.megamenu .navbar-collapsable{width:100%}.navbar.megamenu .navbar-collapsable .nav-item{position:static}.navbar.megamenu .navbar-collapsable .nav-item a{position:relative}.navbar.megamenu .navbar-collapsable .nav-item a:before{content:"";position:absolute;top:auto;bottom:-12px;left:24px;width:18px;height:18px;border-radius:4px;background-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0;-webkit-transition:opacity .3s;transition:opacity .3s}.navbar.megamenu .navbar-collapsable .nav-item.show a:before{opacity:1}.navbar.megamenu .navbar-collapsable .dropdown-menu{min-width:auto;left:24px;right:24px}.navbar.megamenu .navbar-collapsable .dropdown-menu:before{display:none}.navbar.megamenu .navbar-collapsable .dropdown-menu.show{-webkit-animation:megamenuFadeIn .3s forwards;animation:megamenuFadeIn .3s forwards}.custom-navbar-toggler{display:none}}.skiplinks{background-color:#0bd9d2;text-align:center}.skiplinks a{display:inline-block;padding:.5rem;display:block;font-weight:600;color:#5b6f82;text-decoration:underline}.componente-base{background-color:#0073e6;color:#fff;cursor:pointer;padding:8px}.focus--keyboard,.form-check [type=checkbox]:focus+label,.toggles label input[type=checkbox]:focus+.lever{border-color:#f90;-webkit-box-shadow:0 0 6px 2px #f90;box-shadow:0 0 6px 2px #f90;outline:none}.focus--mouse,.form-check [type=checkbox]:focus.focus--mouse+label,.toggles label input[type=checkbox]:focus.focus--mouse+.lever{border-color:inherit;-webkit-box-shadow:none;box-shadow:none;outline:none}.bg-primary--dark{background-color:#06c}.bg-primary--mid-dark{background-color:#004e95}.bg-primary--darken{background-color:#002b4d}.text-grey{color:#ccc}.text-sans-serif{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}.text-serif{font-family:Lora,serif}.text-light-blue{color:#e6f3fe}.text-blue{color:#0073e6}.border-dark-blue{border-color:#193e5e!important}.border-medium-blue{border-color:#06c!important}.border-grey-light{border-color:#eaebed!important}.border-width-2{border-width:2px!important}.stopScrolling--vertical{overflow-y:hidden}.deactive{display:none!important}@font-face{font-family:docs-icons;src:url(../font/docs.eot);src:url(../font/docs-italia.eot#iefix) format("embedded-opentype"),url(../font/docs-italia.ttf) format("truetype"),url(../font/docs-italia.woff) format("woff"),url(../font/docs-italia.svg#docs) format("svg");font-weight:400;font-style:normal}[class*=" docs-icon-"],[class^=docs-icon-]{font-family:docs-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:middle;color:inherit;font-size:20.8px;font-size:1.3rem;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.docs-icon-more:before{content:""}.docs-icon-expand:before{content:""}.docs-icon-collapse:before{content:""}.docs-icon-plus:before{content:""}.docs-icon-minus:before{content:""}.docs-icon-document:before{content:""}.docs-icon-edit:before{content:""}.docs-icon-download:before{content:""}.docs-icon-info:before{content:""}.docs-icon-compare:before{content:""}.docs-icon-github:before{content:""}.docs-icon-share:before{content:""}.docs-icon-search:before{content:""}.docs-icon-link:before{content:""}.docs-icon-external-link:before{content:""}.docs-icon-comment:before{content:""}.docs-icon-attention:before,.docs-icon-warning:before{content:""}.docs-icon-example:before{content:""}.docs-icon-procedure:before{content:""}.docs-icon-hint:before{content:""}.docs-icon-note:before{content:""}.docs-icon-step:before{content:""}.docs-icon-pdf:before{content:""}.docs-icon-html:before{content:""}.docs-icon-project:before{content:""}.docs-icon-publisher:before{content:""}.docs-icon-docs:before{content:""}.docs-icon-user:before{content:""}.small{font-size:14px}.navbar-dark--text-white{color:#fff}.navbar-dark .lang-selector .nav-link,.navbar-dark .navbar-nav .nav-link{color:#fff!important}.navbar.bg-white{background-color:#fff}.navbar.primary-bg-a7{background-color:#0059b3}@media (min-width:992px){.dropdown-menu.dropdown-menu-right:before{right:24px;left:auto}}@media (min-width:992px){.navbar .dropdown-menu.dropdown-menu-right{left:auto;right:0}}@media (max-width:991.98px){.dropdown-menu-right{right:auto;left:auto}}.btn-group.show .dropdown-menu[x-placement=bottom-start],.dropdown.show .dropdown-menu[x-placement=bottom-start]{-webkit-animation:dropdownFadeIn .3s forwards;animation:dropdownFadeIn .3s forwards}.btn-group.show .dropdown-menu[x-placement=top-start],.dropdown.show .dropdown-menu[x-placement=top-start]{-webkit-animation:dropdownFadeInTop .3s forwards;animation:dropdownFadeInTop .3s forwards}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-menu:before{z-index:-1}.injected{display:none}body{color:#596771;background-color:#002b4d}body.no-scroll{overflow-y:hidden}p{font-family:Lora,serif}h1,h2,h3,h4,h5{color:#000;margin-bottom:2rem}img{max-width:100%;height:auto}.container-fluid--desktop{max-width:1450px}@-webkit-keyframes pulsate{0%{-webkit-transform:scale(.1);transform:scale(.1);opacity:0}50%{opacity:1}to{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}}@keyframes pulsate{0%{-webkit-transform:scale(.1);transform:scale(.1);opacity:0}50%{opacity:1}to{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}}.loading{overflow:hidden}.loading:after{position:absolute;background:#0073e6;height:100%;width:100%;z-index:10;content:"";left:0;top:0}.loading:before{border:5px solid #fff;margin:-15px 0 0 -15px;border-radius:30px;position:absolute;content:"";z-index:11;height:30px;left:50%;top:50%;opacity:0;width:30px;-webkit-animation:pulsate 1s ease-out;animation:pulsate 1s ease-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.loading.no-bg:after{background:none;position:relative}.dropdown-menu{background-color:#fff;padding:.5rem;margin:0;border-radius:.2rem;-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);z-index:100}.dropdown-menu .dropdown-item{color:#0073e6}.dropdown-menu .dropdown-item.active,.dropdown-menu .dropdown-item:active{font-weight:600;text-decoration:inherit;background-color:inherit}#version-list .dropdown-toggle .current-version{max-width:8em;text-overflow:ellipsis;overflow:hidden;display:inline-block;font-size:inherit;font-weight:400}#version-list .version-list-wrapper{max-height:10.2em;max-width:18em;overflow-y:scroll}#version-list .dropdown-item{text-overflow:ellipsis;max-width:16em;overflow-x:hidden}.document-actions .dropdown-toggle:after{vertical-align:middle;line-height:1.5}@media (max-width:767.98px){.document-actions .dropdown-toggle:after{font-family:italia-icon-font!important;border:none;margin:0 2em 0 0;width:auto;height:auto;float:right;content:"\e818";vertical-align:middle;font-size:.8em;line-height:2em;-webkit-transform-origin:center;transform-origin:center;-webkit-transition:all .3s;transition:all .3s}.document-actions .dropdown-toggle[aria-expanded=true]:after{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.document-actions .dropdown-toggle:hover{text-decoration:none}.document-actions .dropdown-menu.show{position:static!important;-webkit-transform:none!important;transform:none!important;-webkit-box-shadow:none;box-shadow:none;padding:0;margin-top:16px;-webkit-animation:none;animation:none}.document-actions .dropdown-menu.show:before{display:none}}.header{font-size:16px;font-size:1rem}.header .navbar-brand{font-size:14.224px;font-size:.889rem;font-weight:600}.header .navbar-brand a{text-decoration:none}.header .navbar .dropdown-toggle:after{margin:0 .2rem;font-size:11.2px;font-size:.7rem}.header .nav-item{margin-left:.2rem}@media (min-width:992px){.header .nav-item{border-left:0;margin-left:0}}.header .nav-item.active{font-weight:600}.header .nav-item:not(.nav-text):not(.nav-item--no-underline).active,.header .nav-item:not(.nav-text):not(.nav-item--no-underline):hover{border-left:.2rem solid #fff;margin-left:0}@media (min-width:992px){.header .nav-item:not(.nav-text):not(.nav-item--no-underline).active,.header .nav-item:not(.nav-text):not(.nav-item--no-underline):hover{border-left:0;margin-left:0;border-bottom:2px solid #fff;margin-bottom:0}}.slim-header{font-size:14.224px;font-size:.889rem}.slim-header .navbar-toggler .navbar__icon{font-size:11.2px;font-size:.7rem;line-height:3em;display:inline-block;-webkit-transform:scaleY(-1);transform:scaleY(-1);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.slim-header .navbar-toggler.collapsed .navbar__icon{-webkit-transform:scaleY(1);transform:scaleY(1)}.slim-header .navbar-toggler .dropdown-toggle:after{content:""}.slim-header.navbar .divider{border-top:.05rem solid #799ebc;padding-right:1px;width:10%;margin-top:.75rem;margin-bottom:1rem;margin-left:.2rem;padding-bottom:1px}.slim-header.navbar .divider:first-child{margin-top:1px}.slim-header.navbar .divider.divider--w-100{width:100%}@media (min-width:992px){.slim-header.navbar .divider.divider--w-100{width:inherit}}@media (min-width:992px){.slim-header.navbar .divider{border-top:0;width:inherit;margin-top:inherit;margin-bottom:inherit;border-right:.05rem solid #06c;padding-right:1px;margin-left:0}}.secondary-nav{font-weight:600}@media (max-width:991.98px){.secondary-nav.secondary-nav--offcanvas{-webkit-transform:translateX(-100%);transform:translateX(-100%);z-index:10;background-color:#fff;color:#06c;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;position:fixed;top:0;left:0;bottom:0;right:25%;overflow-y:auto}.secondary-nav.secondary-nav--offcanvas.active{-webkit-transform:translateX(0);transform:translateX(0)}}.secondary-nav .navbar-nav li{padding:.5rem;border-bottom:.2rem solid transparent}.secondary-nav .nav-item:not(.nav-text):not(.nav-item--no-underline).active,.secondary-nav .nav-item:not(.nav-text):not(.nav-item--no-underline):hover{border-bottom:.2rem solid #fff}@media (max-width:991.98px){.article-intro-more .dropdown.show:before{content:"";width:100vw;height:100%;position:fixed;top:0;left:0;background-color:rgba(0,0,0,.5);z-index:999}}.article-intro-more .dropdown .dropdown-toggle:after{display:none}.article-intro-more .dropdown .dropdown-menu{background-color:#fff;padding:.5rem;margin:0;border-radius:.2rem;-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);z-index:100}@media (max-width:991.98px){.article-intro-more .dropdown .dropdown-menu{position:fixed!important;z-index:1001!important;top:calc(50% - 140px)!important;left:calc(50% - 140px)!important;-webkit-transform:none!important;transform:none!important}.article-intro-more .dropdown .dropdown-menu:before{display:none}}.article-intro-more .dropdown .dropdown-menu .dropdown-item{color:#0073e6}@media (max-width:991.98px){.lang-selector .dropdown.show:before{content:"";width:100vw;height:100%;position:fixed;top:0;left:0;background-color:rgba(0,0,0,.5);z-index:999}}.lang-selector .dropdown .dropdown-menu{background-color:#fff;padding:.5rem;margin:0;border-radius:.2rem;-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);z-index:100}@media (max-width:991.98px){.lang-selector .dropdown .dropdown-menu{position:fixed!important;z-index:1001!important;top:calc(50% - 80px)!important;left:calc(50% - 80px)!important;-webkit-transform:none!important;transform:none!important}.lang-selector .dropdown .dropdown-menu:before{display:none}}.lang-selector .dropdown .dropdown-menu .dropdown-item{color:#0073e6}.lang-selector .dropdown .dropdown-menu .dropdown-item.active,.lang-selector .dropdown .dropdown-menu .dropdown-item:active{font-weight:600;text-decoration:inherit;background-color:inherit}.h1--header{font-size:21.328px;font-size:1.333rem;font-weight:600;line-height:1.2;letter-spacing:unset}@media (min-width:576px){.h1--header{font-size:1.8rem}}.h1--header span{font-size:11.2px;font-size:.7rem;font-weight:400}.svg--header{width:39px;height:36px}@media (min-width:576px){.svg--header{width:65px;height:60px}}.h2--header{font-size:14px;font-weight:300;letter-spacing:unset}.docs__document-info{color:#fff;font-size:14.4px;font-size:.9rem;vertical-align:bottom}.docs__document-info .docs__document-info__icon{font-size:19.2px;font-size:1.2rem;vertical-align:bottom}.docs__document-info .docs__document-info__ownership .docs__document-info__label{font-size:12.8px;font-size:.8rem}.docs__document-info .docs__document-info__ownership .docs__document-info__icon{font-size:16px;font-size:1rem}.doc-header{-webkit-box-shadow:0 0 120px 0 rgba(0,0,0,.1);box-shadow:0 0 120px 0 rgba(0,0,0,.1);position:relative;z-index:10;color:#0073e6;font-size:16px;font-weight:600}.doc-header .progress-container{width:100%;height:4px;height:.25rem;background:#e6f3fe}.doc-header .progress-bar{height:4px;height:.25rem;background:#06c;width:0}.docs-italia #cerca{border:1px solid #ccc;font-size:12.8px;font-size:.8rem;font-weight:100}.docs-italia #cerca::-webkit-input-placeholder{color:#ccc}.docs-italia #cerca::-moz-placeholder{color:#ccc}.docs-italia #cerca::-ms-input-placeholder{color:#ccc}.docs-italia #cerca::placeholder{color:#ccc}.social{color:#fff}.social .social__label{font-size:15.2px;font-size:.95rem}.social .social__link{color:#fff;font-size:16px;font-size:1rem}.social .social__link:active,.social .social__link:hover{text-decoration:none}#rtd-search-form{border:1px solid #ccc}#rtd-search-form input[type=text]{border:none;height:100%}#rtd-search-form .input-group-append button{background-color:#fff}#rtd-search-form .input-group-append button .docs-icon-search{font-size:19.2px;font-size:1.2rem}#documentInfo .tag{font-family:Titillium Web,Geneva,Tahoma,sans-serif}.offcanvas-menu{position:fixed;z-index:1000;width:100vw;height:100vh;top:0;left:0;right:0;bottom:0}.offcanvas-menu.animate--left{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-webkit-transition:-webkit-transform .4s;transition:-webkit-transform .4s;transition:transform .4s;transition:transform .4s,-webkit-transform .4s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1)}.offcanvas-menu.js-active{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:-webkit-transform .8s;transition:-webkit-transform .8s;transition:transform .8s;transition:transform .8s,-webkit-transform .8s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1)}.offcanvas-menu .offcanvas-menu__inner{width:80%;background-color:#fff;height:100vh;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:all .5s ease-out;transition:all .5s ease-out}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__header{padding:1.5rem 1.8rem 1rem}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__header .offcanvas-menu__title{font-weight:600;font-size:19.2px;font-size:1.2rem}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav{padding:.5rem 0 0;margin:0}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item{list-style:none;margin:0;padding:.5rem 1rem}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:first-child,.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:nth-child(4){position:relative}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:first-child:before,.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:nth-child(4):before{content:"";width:64px;height:1px;left:32px;left:2rem;border-top:1px solid rgba(0,102,204,.2);position:absolute;top:0}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item .offcanvas-menu__nav__link{padding:.5rem 1rem;font-size:16px;font-size:1rem;display:block}.offcanvas-menu.deactive .offcanvas-menu__inner{margin-left:-80%;overflow:hidden}.offcanvas-menu .offcanvas-menu__extra{width:20%;height:100vh;position:fixed;right:0;top:0}body:before{position:fixed;top:0;left:0;z-index:999;bottom:0;right:0;background:rgba(0,0,0,.5);content:"";opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);-webkit-transition:opacity .4s,-webkit-transform 0s .4s;transition:opacity .4s,-webkit-transform 0s .4s;transition:opacity .4s,transform 0s .4s;transition:opacity .4s,transform 0s .4s,-webkit-transform 0s .4s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1)}body.show-menu:before{opacity:1;-webkit-transition:opacity .8s;transition:opacity .8s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1);-webkit-transform:translateZ(0);transform:translateZ(0)}#desktop-menu{-webkit-transform:translate(0);transform:translate(0);-webkit-transform:translateZ(0);transform:translateZ(0);will-change:position,transform;padding-bottom:5rem}#desktop-menu>button:first-of-type{margin-top:1.5rem}.col--nav{width:100%}@media (min-width:768px){.col--nav{width:420px;float:left;border-right:1px solid #eeeff0;padding-left:4.5rem}}.docs-menu{will-change:min-height;display:none}@media (min-width:768px){.docs-menu{display:block}}@media (max-width:767.98px){.docs-offcanvas-menu{-webkit-transform:translateX(100%);transform:translateX(100%);z-index:10;background-color:#fff;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;position:fixed;top:0;left:0;bottom:0;right:0;overflow-y:auto}.docs-offcanvas-menu.active{-webkit-transform:translateX(0);transform:translateX(0)}}@media (min-width:768px){.docs-offcanvas-menu{display:none}}.navbar-toggler--wrap{position:fixed;bottom:0;left:0;right:0;z-index:9;background-color:#fff;-webkit-box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25);box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25)}@media (min-width:768px){.navbar-toggler--wrap{display:none}}.navbar-toggler{color:#06c;padding:1rem 1rem 1rem 2rem}.navbar-toggler__chapter{color:#000;font-size:12.8px;font-size:.8rem}.sidebar-tabs{position:fixed;top:0;left:0;right:0;background-color:#fff;-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;z-index:11;-webkit-box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25);box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25)}.sidebar-tabs.active{-webkit-transform:translateX(0);transform:translateX(0)}@media (min-width:768px){.sidebar-tabs{display:none}}.sidebar-btn{text-transform:uppercase;color:#06c;font-weight:700;cursor:pointer;border:0;border-bottom:3px solid #0073e6;background:none}@media (min-width:768px){.sidebar-btn{border-bottom:2px solid #bbd8f1}}.sidebar-btn.sidebar-btn--mobile{display:inline-block;font-size:11.2px;font-size:.7rem;text-align:center;border:0}.sidebar-btn.sidebar-btn--mobile.active.show{border-bottom:3px solid #0073e6;text-decoration:none}@media (min-width:768px){.sidebar-btn.sidebar-btn--mobile.active.show{border-bottom:2px solid #bbd8f1}}.form-check [type=checkbox]:focus.focus--mouse+label.sidebar-btn,.sidebar-btn.focus--mouse,.toggles label input[type=checkbox]:focus.focus--mouse+.sidebar-btn.lever{border-color:#0073e6!important}@media (min-width:768px){.form-check [type=checkbox]:focus.focus--mouse+label.sidebar-btn,.sidebar-btn.focus--mouse,.toggles label input[type=checkbox]:focus.focus--mouse+.sidebar-btn.lever{border-color:#bbd8f1!important}}.sidebar-btn .it-collapse,.sidebar-btn .it-expand{font-size:9.6px;font-size:.6rem;line-height:2.5}.sidebar-btn .it-expand{display:inline-block}.sidebar-btn.collapsed .it-expand,.sidebar-btn .it-collapse{display:none}.sidebar-btn.collapsed .it-collapse{display:inline-block}@media (min-width:768px){.sidebar-btn{display:block;width:100%;text-align:left}}@media (max-width:767.98px){.sidebar-btn.collapsed .it-collapse,.sidebar-btn.collapsed .it-expand,.sidebar-btn .it-collapse,.sidebar-btn .it-expand{display:none}}.main-container{overflow:hidden;position:relative;background-color:#fff}.doc-content__consultation{position:absolute;right:0;left:0;top:0;background-color:#4bd4d6;text-align:left;text-transform:uppercase;font-weight:700;color:#000;padding:.5rem 0 .5rem 2rem}@media (min-width:992px){.doc-content__consultation{padding-left:4rem}}@media (min-width:1200px){.doc-content__consultation{-webkit-transform:rotate(45deg) translate(45px,-125px);transform:rotate(45deg) translate(45px,-125px);width:320px;-webkit-transform-origin:left;transform-origin:left;z-index:1;left:auto;text-align:center;padding-left:0}}.col-content{padding:4rem 2rem}@media (min-width:992px){.col-content{padding:4rem 4rem 5rem}}.caption-wrap{clear:both}.caption-wrap .caption--table{margin-top:1rem;margin-bottom:1rem;display:block;font-family:Lora,serif;font-style:italic;font-size:12px;font-size:.75rem;padding:0}@media (min-width:992px){.caption-wrap .caption--table{width:calc(100% - 200px);float:left}}.caption-wrap .reference--wrap{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;margin-top:1rem;margin-bottom:2rem;font-size:.9em}@media (min-width:768px){.caption-wrap .reference--wrap{width:200px;float:right;padding-left:2rem}}.caption-number{font-weight:700;color:#000}.chapter-header{margin-bottom:1rem;margin-left:.5rem}.chapter-nav{position:relative}@media (min-width:992px){.chapter-nav{width:200px;float:left}}.figure-fixed-wrap{display:block;width:100%;overflow-x:auto}.figure-fixed{max-width:none}.title__background{width:100%;background-color:#e6f3fe;position:absolute;top:-1px;height:auto;left:-8px;left:-.5rem;display:none;right:0;z-index:0}.title__background:after{content:"";position:absolute;left:100%;-webkit-transform:translateX(-50%);transform:translateX(-50%);top:0;bottom:0;width:0;height:0;border-left:20px solid transparent;border-right:20px solid transparent;border-top:20px solid #e6f3fe}.std-term{background-color:#bffffd;color:#000;padding:.2rem}.footer-buttons--next{clear:both;margin-top:4rem}.footer-buttons--next a{background-color:#0073e6;color:#fff;padding:.5rem 1rem;border-radius:.2rem;font-weight:700;display:inline-block}.footer-buttons--prev{margin-bottom:2.5rem}.reference-icon{vertical-align:middle;display:inline-block}#doc-content{width:100%;position:relative}@media (min-width:768px){#doc-content{width:calc(100% - 420px);float:left}}#doc-content a.reference[href]{text-decoration:underline}#doc-content .useful-docs .mimetype{display:none}#doc-content .useful-docs ul{list-style-type:none;padding-left:0}#doc-content .useful-docs li{border-top:1px solid #ccc;padding-top:1rem;padding-bottom:1rem;vertical-align:middle}#doc-content .useful-docs li:after{display:none}#doc-content .useful-docs [class*=" docs-icon-"],#doc-content .useful-docs [class^=docs-icon-]{font-size:30.4px;font-size:1.9rem;color:#0073e6}#doc-content ul.simple,#doc-content ul.simple ul{list-style-type:disc}#doc-content ul.simple li,#doc-content ul.simple ul li{position:relative;margin-bottom:.5rem;font-size:14.4px;font-size:.9rem}#doc-content ul.simple li ul li,#doc-content ul.simple ul li ul li{margin-top:.5rem}#doc-content .section{clear:both}#doc-content .section:after{content:"";display:table;clear:both}@media (min-width:992px){#doc-content .section>*{width:calc(100% - 200px);float:left;clear:left}}@media (min-width:992px){#doc-content .section .caption-wrap,#doc-content .section .chapter-header,#doc-content .section .figure,#doc-content .section .full-width,#doc-content .section .section,#doc-content .section .table-responsive,#doc-content .section>.toctree-wrapper.compound{width:100%}}#doc-content .section .figure{width:100%}#doc-content .section .figure[id],#doc-content .section .rubric.ref[id],#doc-content .section .section[id],#doc-content .section .table[id]{border-top:4.2rem solid transparent}#doc-content .section .glossary dt:not([id=""]){margin-top:-4em;padding-top:4em}#doc-content .section ol.loweralpha,#doc-content .section ol.loweralpha li{list-style:lower-alpha}#doc-content .section ol.upperalpha,#doc-content .section ol.upperalpha li{list-style:upper-alpha}#doc-content .section ol.upperroman,#doc-content .section ol.upperroman li{list-style:upper-roman}#doc-content .section ol,#doc-content .section ol.arabic{list-style:decimal}#doc-content .topic-title{color:#000;font-weight:700;font-size:22.4px;font-size:1.4rem;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .topic.procedure{margin-bottom:3rem}#doc-content .topic.procedure em{font-weight:700}#doc-content .topic.procedure ol{padding-left:1rem}#doc-content .topic.procedure ol li{position:relative;margin-bottom:1rem;padding-left:1rem;counter-increment:list;list-style-type:none;font-family:Lora,serif}#doc-content .topic.procedure ol li:after{position:absolute;left:-16px;left:-1rem;top:0;width:16px;width:1rem;height:24px;height:1.5rem;z-index:1;content:counter(list);color:#fff;text-align:center;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600}#doc-content .topic.procedure .topic-title{text-transform:uppercase;font-size:17.6px;font-size:1.1rem;font-weight:700;color:#002b4d;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;padding-bottom:.2rem;background:-webkit-gradient(linear,left top,left bottom,from(#004e95),to(#004e95)) no-repeat 100% 100%/calc(100% - 2rem) 2px;background:linear-gradient(#004e95,#004e95) no-repeat 100% 100%/calc(100% - 2rem) 2px;margin-bottom:1rem}#doc-content .topic.procedure .topic-title [class*=" docs-icon-"],#doc-content .topic.procedure .topic-title [class^=docs-icon-]{margin-right:.5rem}#doc-content .topic.procedure .procedure__img{padding-left:1.5rem;margin-bottom:2rem;margin-left:.5rem;margin-top:2rem;border-left:1px solid #799ebc}#doc-content .topic.procedure .procedure__img img{-webkit-box-shadow:0 0 61px 0 rgba(0,0,0,.15);box-shadow:0 0 61px 0 rgba(0,0,0,.15)}#doc-content .topic.procedure .procedure-internal-title{text-transform:uppercase;color:#000;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12.8px;font-size:.8rem;font-weight:700}#doc-content .topic.procedure .docs-icon-step{color:#004e95;position:absolute;left:-24px;left:-1.5rem;font-size:32px;font-size:2rem}@media (min-width:992px){#doc-content .title-wrap{width:calc(100% - 200px);float:left;clear:left;position:relative}#doc-content .title-wrap h2{line-height:60px}#doc-content .title-wrap h3{line-height:46px}#doc-content .title-wrap h1,#doc-content .title-wrap h2,#doc-content .title-wrap h3{display:inline;cursor:pointer;position:relative;color:#000;box-shadow:.5rem 0 0 #fff,-.5rem 0 0 #fff;-webkit-box-shadow:.5rem 0 0 #fff,-.5rem 0 0 #fff;-webkit-box-decoration-break:clone;-ms-box-decoration-break:clone;-o-box-decoration-break:clone;box-decoration-break:clone;left:-.5rem;z-index:1}#doc-content .title-wrap h1 .title__chapter,#doc-content .title-wrap h2 .title__chapter,#doc-content .title-wrap h3 .title__chapter{position:relative;color:#0073e6}#doc-content .title-wrap h1{line-height:71px}#doc-content .title-wrap h1 .title__chapter{position:relative;background-color:#0073e6;color:#fff;margin-right:.5rem;padding-left:.5rem;padding-right:.5rem;display:inline-block;z-index:1}#doc-content .title-wrap h1 .title__chapter:after,#doc-content .title-wrap h1 .title__chapter:before{content:"";top:0;bottom:0;width:.5rem;background-color:#0073e6;position:absolute}#doc-content .title-wrap h1 .title__chapter:after{right:100%}#doc-content .title-wrap h1 .title__chapter:before{left:100%}}#doc-content .title-wrap.active h1,#doc-content .title-wrap.active h2,#doc-content .title-wrap.active h3{-webkit-box-shadow:.5rem 0 0 #e6f3fe,-.5rem 0 0 #e6f3fe;box-shadow:.5rem 0 0 #e6f3fe,-.5rem 0 0 #e6f3fe;background-color:#e6f3fe}#doc-content .title-wrap.active .title__background{display:block}#doc-content .headerlink{display:none}#doc-content .document-info{padding:0}#doc-content .document-info .docutils.field-list{width:100%;margin-bottom:2rem;border-bottom:1px solid #ccc;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;display:grid}#doc-content .document-info .docutils.field-list tr{display:block;margin-bottom:2rem}@media (min-width:576px){#doc-content .document-info .docutils.field-list tr{width:50%;float:left}}#doc-content .document-info .docutils.field-list .field-body,#doc-content .document-info .docutils.field-list .field-name{display:block;font-weight:400}#doc-content .document-info .docutils.field-list .field-body{color:#06c;text-decoration:underline}#doc-content dd>p{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .highlights{font-size:24px;font-size:1.5rem;font-family:Lora,serif}#doc-content blockquote.epigraph{margin-top:2rem;padding-left:2rem;border-left:4px solid #00c4c8;color:#596771;font-size:19.2px;font-size:1.2rem;margin-bottom:2rem}#doc-content blockquote.epigraph .attribution{margin-bottom:0;font-size:16px;font-size:1rem}#doc-content .question-and-answers blockquote{margin-top:.5rem;margin-bottom:0}#doc-content .question-and-answers blockquote>div{font-weight:700;font-family:Lora,serif}#doc-content .question-and-answers .pull-quote{max-width:490px;margin-bottom:2rem}#doc-content .question-and-answers .pull-quote ul{list-style-type:none;padding-left:1.5rem}#doc-content .question-and-answers .pull-quote ul li{display:inline-block;margin-top:1rem}#doc-content .question-and-answers .pull-quote ul li:after{display:none}#doc-content .question-and-answers .pull-quote ul li a{padding:.2rem .5rem;margin-right:.2rem;background-color:#bffffd;color:#000;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;border-bottom:2px dotted #ccc}#doc-content .question-and-answers .pull-quote>div>p{text-transform:uppercase;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;color:#0b0b0b;margin-bottom:0;font-weight:100}#doc-content .question-and-answers .pull-quote:nth-of-type(odd){float:left;clear:right}#doc-content .question-and-answers .pull-quote:nth-of-type(odd) blockquote>div,#doc-content .question-and-answers .pull-quote:nth-of-type(odd) ul{padding-left:1.5rem;border-left:5px solid #00c4c8}#doc-content .question-and-answers .pull-quote:nth-of-type(2n){float:right;text-align:right;clear:left}#doc-content .question-and-answers .pull-quote:nth-of-type(2n) blockquote>div,#doc-content .question-and-answers .pull-quote:nth-of-type(2n) ul{padding-right:1.5rem;border-right:5px solid #00c4c8}#doc-content .question-and-answers .glossary.docutils{display:none}#doc-content .highlighted{background:#bffffd;display:inline-block;font-weight:700}.highlight{padding:1rem;margin-bottom:1em}.highlight pre{margin:0;padding-bottom:1em}.highlighttable .highlight{padding:0}.code .highlight{background:none}code:not(.download) .pre{background-color:#efc;padding:.2rem}code.download{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:100%}#doc-content .admonition{margin-bottom:2rem;margin-top:2rem;padding-left:2rem;border-left:4px solid;color:#596771}#doc-content .admonition .more{padding:0}#doc-content .admonition .admonition-title{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;text-transform:uppercase;font-weight:700}#doc-content .admonition .admonition-title [class*=" docs-icon-"],#doc-content .admonition .admonition-title [class^=docs-icon-]{font-size:24px;font-size:1.5rem;margin-right:.5rem}#doc-content .admonition .admonition__hidden-paragraph{display:none}#doc-content .admonition .admonition__toggle-wrap{border-top:1px solid #ccc;padding-top:1rem;margin-top:1.5rem}#doc-content .admonition .admonition__toggle-btn{cursor:pointer;background:none;border:none;color:#0073e6;padding-left:0}#doc-content .admonition .admonition__toggle-btn [class*=" docs-icon-"],#doc-content .admonition .admonition__toggle-btn [class^=docs-icon-]{font-size:9.6px;font-size:.6rem;margin-left:.5rem;position:relative}#doc-content .admonition .admonition__toggle-btn [class*=" docs-icon-"]:after,#doc-content .admonition .admonition__toggle-btn [class^=docs-icon-]:after{content:"";width:16px;width:1rem;height:16px;height:1rem;border:2px solid #0073e6;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);position:absolute;border-radius:50%}#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-less:first-letter,#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-more:first-letter{text-transform:uppercase}#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-less{display:none}#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-more{display:inline-block}#doc-content .admonition .admonition__toggle-btn.active .admonition__toggle-show-more{display:none}#doc-content .admonition .admonition__toggle-btn.active .admonition__toggle-show-less{display:inline-block}#doc-content .admonition.display-page{background-color:#f9fafb;padding:2rem;position:relative;border:none}#doc-content .admonition.display-page:after,#doc-content .admonition.display-page:before{content:"";width:0;height:0;right:0;top:0;position:absolute;z-index:1}#doc-content .admonition.display-page:before{border-bottom:50px solid transparent;border-right:50px solid #fff}#doc-content .admonition.display-page:after{border-top:50px solid transparent;border-bottom:50px solid #ccc;border-right:50px solid transparent;-webkit-transform:translateY(-50%);transform:translateY(-50%)}#doc-content .admonition.display-page .admonition__hidden-paragraph p,#doc-content .admonition.display-page>p,#doc-content .admonition.display-page li{font-size:12.8px;font-size:.8rem;color:#002b4d}#doc-content .admonition.display-page ol{counter-reset:list}#doc-content .admonition.display-page ol li{margin-bottom:1rem;position:relative;list-style-type:none;counter-increment:list;color:#002b4d;font-family:Lora,serif;text-indent:16px;text-indent:1rem}#doc-content .admonition.display-page ol li:after{position:absolute;left:-16px;left:-1rem;top:0;width:17.6px;width:1.1rem;height:24px;height:1.5rem;z-index:1;content:counter(list) ".";text-align:center;font-weight:700}#doc-content .admonition.display-page ol li:before{position:absolute;left:-32px;left:-2rem;top:.65em;height:1px;z-index:1;content:"";font-weight:700;background-color:#002b4d;width:16px;width:1rem}#doc-content .admonition.display-page .admonition-title,#doc-content .admonition.display-page .code-block__header{color:#004e95;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .admonition.display-page .admonition-title{padding-bottom:.2rem;display:inline-block;background:-webkit-gradient(linear,left top,left bottom,from(#004e95),to(#004e95)) no-repeat 100% 100%/calc(100% - 2.2rem) 2px;background:linear-gradient(#004e95,#004e95) no-repeat 100% 100%/calc(100% - 2.2rem) 2px;margin-bottom:1rem;overflow:hidden}#doc-content .admonition.display-page .admonition-internal-title{text-transform:uppercase;font-size:12.8px;font-size:.8rem;font-weight:700;color:#002b4d;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .admonition.display-page .linenodiv pre{color:#8998a5;font-weight:400}#doc-content .admonition.display-page .highlighttable pre{font-size:12.8px;font-size:.8rem}#doc-content .admonition.admonition-consultation{padding-bottom:1rem;border-bottom:1px solid #ccc;position:relative}#doc-content .admonition.admonition-consultation a{text-decoration:underline}#doc-content .admonition.admonition-consultation .last{font-family:Lora,serif}#doc-content .admonition.admonition-consultation .admonition-title{color:#000;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .admonition.admonition-consultation .admonition-title [class*=" docs-icon-"],#doc-content .admonition.admonition-consultation .admonition-title [class^=docs-icon-]{font-size:19.2px;font-size:1.2rem}#doc-content .admonition.error{border-color:#d83750}#doc-content .admonition.error .admonition-title{color:#d83750}#doc-content .admonition.note{border-color:#004e95}#doc-content .admonition.note .admonition-title{color:#004e95}#doc-content .admonition.attention,#doc-content .admonition.warning{border-color:#df7d26}#doc-content .admonition.attention .admonition-title,#doc-content .admonition.warning .admonition-title{color:#df7d26}#doc-content .admonition.important{border-color:#008255}#doc-content .admonition.important .admonition-title{color:#008255}#doc-content .admonition.important .last{font-weight:700;font-size:19.2px;font-size:1.2rem}#doc-content .admonition.hint{border-color:#008255}#doc-content .admonition.hint .admonition-title{color:#008255}#doc-content .admonition.hint .reference.internal{font-size:12.8px;font-size:.8rem;position:relative}#doc-content .admonition.hint .reference.internal:after{content:"";width:6.4px;width:.4rem;height:6.4px;height:.4rem;border-top:1px solid #0073e6;border-right:1px solid #0073e6;left:100%;-webkit-transform:rotate(45deg) translateY(-50%);transform:rotate(45deg) translateY(-50%);position:absolute;top:50%}#doc-content .admonition.admonition-may,#doc-content .admonition.admonition-must,#doc-content .admonition.admonition-must-not,#doc-content .admonition.admonition-should,#doc-content .admonition.admonition-should-not,#doc-content .admonition.admonition-use,#doc-content .admonition.admonition-use-not{margin-top:2rem;border:2px solid;border-radius:1em;padding:2em;position:relative}#doc-content .admonition.admonition-may .admonition__header,#doc-content .admonition.admonition-must-not .admonition__header,#doc-content .admonition.admonition-must .admonition__header,#doc-content .admonition.admonition-should-not .admonition__header,#doc-content .admonition.admonition-should .admonition__header,#doc-content .admonition.admonition-use-not .admonition__header,#doc-content .admonition.admonition-use .admonition__header{display:inline-block;position:relative;padding:0 1em;background:#fff}#doc-content .admonition.admonition-may .admonition__header .admonition-title,#doc-content .admonition.admonition-must-not .admonition__header .admonition-title,#doc-content .admonition.admonition-must .admonition__header .admonition-title,#doc-content .admonition.admonition-should-not .admonition__header .admonition-title,#doc-content .admonition.admonition-should .admonition__header .admonition-title,#doc-content .admonition.admonition-use-not .admonition__header .admonition-title,#doc-content .admonition.admonition-use .admonition__header .admonition-title{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;margin:0}#doc-content .admonition.admonition-may:before,#doc-content .admonition.admonition-must-not:before,#doc-content .admonition.admonition-must:before,#doc-content .admonition.admonition-should-not:before,#doc-content .admonition.admonition-should:before,#doc-content .admonition.admonition-use-not:before,#doc-content .admonition.admonition-use:before{position:absolute;right:4em;top:-.65em;width:6em;padding:0 1em;display:inline-block;background-color:#fff}#doc-content .admonition.admonition-may,#doc-content .admonition.admonition-must,#doc-content .admonition.admonition-must-not,#doc-content .admonition.admonition-should,#doc-content .admonition.admonition-should-not{border-color:#004080}#doc-content .admonition.admonition-may .admonition__header,#doc-content .admonition.admonition-must-not .admonition__header,#doc-content .admonition.admonition-must .admonition__header,#doc-content .admonition.admonition-should-not .admonition__header,#doc-content .admonition.admonition-should .admonition__header{top:-2.8em}#doc-content .admonition.admonition-may .admonition__header .admonition-title,#doc-content .admonition.admonition-must-not .admonition__header .admonition-title,#doc-content .admonition.admonition-must .admonition__header .admonition-title,#doc-content .admonition.admonition-should-not .admonition__header .admonition-title,#doc-content .admonition.admonition-should .admonition__header .admonition-title{color:#004080}#doc-content .admonition.admonition-use{border-color:#00cf86}#doc-content .admonition.admonition-use .admonition__header .admonition-title{color:#00cf86}#doc-content .admonition.admonition-use .admonition__header .admonition-title:before{content:""}#doc-content .admonition.admonition-use-not{border-color:#d1344c}#doc-content .admonition.admonition-use-not .admonition__header .admonition-title{color:#d1344c}#doc-content .admonition.admonition-use-not .admonition__header .admonition-title:before{content:""}#doc-content .admonition.admonition-use-not .admonition__header,#doc-content .admonition.admonition-use .admonition__header{top:-3.2em}#doc-content .admonition.admonition-use-not .admonition__header .admonition-title:before,#doc-content .admonition.admonition-use .admonition__header .admonition-title:before{font-family:docs-icons;margin-right:.5rem;font-size:1.6em;vertical-align:middle}#doc-content .admonition.admonition-must:before{content:url(../images/must.svg)}#doc-content .admonition.admonition-should:before{content:url(../images/should.svg)}#doc-content .admonition.admonition-must-not:before{content:url(../images/must_not.svg)}#doc-content .admonition.admonition-should-not:before{content:url(../images/should_not.svg)}#doc-content .admonition.admonition-may:before{content:url(../images/may.svg)}.footer *{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}.footer a:hover{text-decoration:none}.footer .in-collaboration{font-size:.8em}.footer .team-logo--icon{width:54px}.footer .team-logo--text{font-size:16px;font-size:1rem;line-height:18px;max-width:160px;text-transform:uppercase}.footer .agid-logo--icon{width:8em}@media (min-width:768px){.footer .agid-logo--icon{width:10em}}.footer .agid-logo--separator{border-left-width:2px!important;height:30px}@media (min-width:768px){.footer .agid-logo--separator{height:40px}}.footer .agid-logo--text{width:112px;width:7rem;line-height:1.2;font-size:1em;display:inline-block;vertical-align:middle}@media (min-width:768px){.footer .agid-logo--text{font-size:1.1em;width:8rem}}.footer .small-prints{color:#00fff8;font-weight:600}.footer .social{font-size:1em;color:#fff}.footer .social .icon{color:#00264d;background-color:#fff;padding:.3em;border-radius:100%;font-size:22px}.footer .colophon{border-top:1px solid hsla(0,0%,100%,.1);margin-top:1.5em}@media (min-width:992px){.footer .colophon{margin-top:2em}}.footer-menu__link:hover{color:#fff}.t_translate-wrap{display:none}.doc-tooltip{background-color:#fff;font-family:Lora,serif;-webkit-box-shadow:0 0 100px 0 rgba(0,0,0,.15);box-shadow:0 0 100px 0 rgba(0,0,0,.15)}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:before,.doc-tooltip.bs-popover-auto[x-placement^=top]:before,.doc-tooltip.bs-popover-bottom:before,.doc-tooltip.bs-popover-top:before{content:"";width:0;height:0;border-top:40px solid transparent;border-bottom:40px solid transparent;border-left:40px solid #fff;position:absolute;left:0;z-index:-1}.doc-tooltip.bs-popover-auto[x-placement^=top]:before,.doc-tooltip.bs-popover-top:before{bottom:-40px}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:before,.doc-tooltip.bs-popover-bottom:before{top:-40px}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:after,.doc-tooltip.bs-popover-auto[x-placement^=top]:after,.doc-tooltip.bs-popover-bottom:after,.doc-tooltip.bs-popover-top:after{content:"";width:15px;height:15px;-webkit-transform:rotate(45deg);transform:rotate(45deg);position:absolute;left:5px;z-index:-2}.doc-tooltip.bs-popover-auto[x-placement^=top]:after,.doc-tooltip.bs-popover-top:after{-webkit-box-shadow:5px 5px 70px 8px rgba(0,0,0,.15);box-shadow:5px 5px 70px 8px rgba(0,0,0,.15);bottom:-20px}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:after,.doc-tooltip.bs-popover-bottom:after{-webkit-box-shadow:-5px -5px 70px 8px rgba(0,0,0,.15);box-shadow:-5px -5px 70px 8px rgba(0,0,0,.15);top:-20px}.doc-tooltip.doc-tooltip--note:after,.doc-tooltip.doc-tooltip--note:before{content:none}.tooltip__wrap{overflow:hidden;width:330px;padding:2rem;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}.tooltip__title{overflow:hidden;font-style:italic;margin-bottom:.5rem;font-size:1em;letter-spacing:0}.tooltip__content{font-size:14.4px;font-size:.9rem;font-style:italic;margin-bottom:0}.tooltip__close-btn{position:absolute;top:16px;top:1rem;right:16px;right:1rem;width:20px;height:20px;padding:0;background:none;border:0;cursor:pointer}.tooltip__close-btn:after,.tooltip__close-btn:before{content:"";position:absolute;height:20px;width:1px;background-color:#0073e6;top:0;left:50%}.tooltip__close-btn:after{-webkit-transform:rotate(45deg) translateX(-50%);transform:rotate(45deg) translateX(-50%)}.tooltip__close-btn:before{-webkit-transform:rotate(-45deg) translateX(-50%);transform:rotate(-45deg) translateX(-50%)}.tooltip__link{color:#0073e6;font-size:12.8px;font-size:.8rem;font-weight:100;text-transform:uppercase;letter-spacing:0;position:relative;display:inline-block;margin-top:1rem}.tooltip__link:after{content:"";position:absolute;left:100%;top:0;width:30px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAGCAYAAAAVMmT4AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gUPDDQNy1r5IQAAAH5JREFUGNNj+I8HTD704v+ZR1/gfCYGPODNlz8MLv3XGc4+/srAwMDAwHjx6df//jNuYVX84esfhg9f/jAI8LAw3G4yYGD8+vPv/ztvfmBVPP3wK4YZ+14wdIfJM5Q4SzIw/v///z8uZzRsf8rAw8bEUOIsCRHA58EXn36h8AF2435mx6vmAAAAAABJRU5ErkJggg==");background-repeat:no-repeat;bottom:0;background-position:50%}@media (max-width:991.98px){.chapter-nav__list--hidden:not(.show){display:none}}@media (min-width:992px){.chapter-nav__list--hidden{visibility:hidden;opacity:0;-webkit-transition:visibility .35s,opacity .35s;transition:visibility .35s,opacity .35s}.chapter-nav__list--hidden.active{visibility:visible;opacity:1}}@media (max-width:991.98px){.chapter-nav__list-wrap{max-width:300px;margin-left:auto;margin-right:auto;border-radius:4px}}@media (min-width:992px){.chapter-nav__wrap{position:absolute;left:2rem;top:1rem}}.chapter-link{background:none;border:none;color:#0073e6;padding:0;display:inline-block;font-size:.9em;font-weight:400;cursor:pointer;vertical-align:middle}.chapter-link:hover{text-decoration:underline}.chapter-link__title{float:left}.chapter-link__counter{margin-right:.3rem;display:inline-block;float:left}.chapter-nav__list{list-style-type:none;margin-bottom:0;padding:1rem}@media (min-width:992px){.chapter-nav__list{padding:0}}.chapter-nav__title{padding:1rem;color:#000;font-size:12.8px;font-size:.8rem;font-weight:700;border-bottom:1px solid #ccc}.chapter-nav__title .title__chapter{color:#8998a5}@media (min-width:992px){.chapter-nav__title{display:none}}.chapter-nav__item:not(:last-child){margin-bottom:1rem}@media (min-width:992px){.chapter-nav__item:not(:last-child){margin-bottom:0}}.chapter-nav__list--visible{margin-top:1rem}@media (min-width:992px){.chapter-nav__list--visible{margin-top:-.5rem}}.chapter-nav__list--visible .chapter-nav__item{display:inline-block}@media (min-width:992px){.chapter-nav__list--visible .chapter-nav__item{display:block}}#doc-content ::-webkit-scrollbar{width:1em;height:14px}#doc-content ::-webkit-scrollbar-track{background-color:#e6f3fe;border-radius:7px;border:2px solid #fff}#doc-content ::-webkit-scrollbar-thumb{background-color:#0073e6;border-radius:7px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHCAYAAAABIM1CAAAALUlEQVQoU2N88+m/hggf4w0GLODJp//CLEwMUhI8jJexyT/7/l+OcdSAQRAGABbrTN6F2sNMAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:50%}#doc-content table:not(.footnote){border:0}#doc-content table:not(.footnote) td{border-right:0;border-left:0}#doc-content table:not(.footnote):not(.highlighttable) td{min-width:220px}#doc-content table:not(.footnote) thead .head{border-right:0;border-left:0;text-transform:uppercase;color:#000;font-size:12px;font-size:.75rem;vertical-align:top}#doc-content table:not(.footnote) tr{font-size:12px;font-size:.75rem}#doc-content .footnote-reference{color:#193e5e;border:1px solid #193e5e;border-radius:3px;padding:0 .4rem;line-height:1.4}#doc-content .note-action{margin-top:.5rem}#doc-content .note-back-btn,#doc-content .note-close-btn{background:none;border:0;display:inline-block;color:#0073e6;font-size:1.2em;cursor:pointer}#doc-content .note-back-btn{position:relative}#doc-content .note-back-btn:before{content:"";top:0;bottom:0;width:1px;position:absolute;background-color:#0073e6;left:0}#doc-content .note-back-btn:hover{text-decoration:underline}#doc-content .docutils.footnote{color:#000;font-size:12.8px;font-size:.8rem;display:none;margin-bottom:2rem}#doc-content .docutils.footnote td{width:100%;float:left}#doc-content .docutils.footnote .fn-backref{color:#193e5e;border:1px solid #193e5e;border-radius:3px;padding:.2rem;line-height:1;display:inline-block;margin-bottom:.5rem}.block-comments{margin-top:4.4rem;padding-bottom:2rem}.block-comments__body p{font-family:Titillium Web,Geneva,Tahoma,sans-serif}.block-comments__header{border-bottom-color:#ccc!important;border-top-color:#eeeff0!important}.block-comments__header h6{color:#06c}.block-comments__img{width:56px}.block-comments__reply-anchor{margin-top:-5em;padding-top:5em}.block-comments__logout-link{display:none;padding-top:.25em}.block-comments__logout-link--icon{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#d83750;text-shadow:0 0 20px #000}.block-comments__logout-link--icon:hover{color:#fff}.block-comments__logout-link:hover{text-decoration:none}.block-comments__logout-link--visible{display:block;position:relative}.block-comments__input{margin-bottom:1em!important}.block-comments__toggle-btn{background:none;width:32px;width:2rem;height:32px;height:2rem}.block-comments__toggle-btn .docs-icon-minus,.block-comments__toggle-btn .docs-icon-plus{color:#06c;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.block-comments__toggle-btn .docs-icon-plus{display:none}.block-comments__toggle-btn.collapsed .docs-icon-plus{display:block}.block-comments__toggle-btn.collapsed .docs-icon-minus{display:none}.block-comments__item-btn{background:none;width:32px;width:2rem;height:24px;height:1.5rem;border:0}.block-comments__item-btn .it-collapse,.block-comments__item-btn .it-expand{color:#06c}.block-comments__item-btn.collapsed .it-collapse,.block-comments__item-btn .it-expand{display:none}.block-comments__item-btn.collapsed .it-expand{display:inline-block}.block-comments__item{padding-top:1em}.block-comments__item.hidden{opacity:.5}.block-comments__item.is-new{background-color:#e6f3fe;-webkit-animation:background-fade-highlight 2s ease-out 1 forwards;animation:background-fade-highlight 2s ease-out 1 forwards}.block-comments__content{word-wrap:break-word}.block-comments__name{color:#06c;font-weight:400;font-size:16px;font-size:1rem;letter-spacing:0}.block-comments__date,.block-comments__role{font-size:14px;line-height:21px}.block-comments__role{letter-spacing:.88px}.block-comments__paragraph{font-size:14px;line-height:21px}.block-comments__paragraph a{text-decoration:underline}.box-comment{position:relative;width:100%}.box-comment:not(.sending) .loading{display:none}.box-comment.sending .loading{margin-left:1em;display:inline-block!important;position:relative;overflow:visible;width:40px;z-index:1}.box-comment.sending .loading:before{border:5px solid #0073e6!important;top:60%}.box-comment textarea{min-height:5em;font-weight:400;border:1px solid #eeeff0;border-radius:5px}.box-comment textarea:focus{border:1px solid #596771}.box-comment textarea::-webkit-input-placeholder{color:#ccc}.box-comment textarea::-moz-placeholder{color:#ccc}.box-comment textarea::-ms-input-placeholder{color:#ccc}.box-comment textarea::placeholder{color:#ccc}.box-comment__login{display:-webkit-box;display:-ms-flexbox;display:flex;border:1px solid #edf5fc;border-radius:5px;padding:1em}.box-comment__legend{font-size:12px}.box-comment__user-image{border-radius:50%;position:relative;height:56px;width:56px;float:left}.box-comment__user-image--anon{margin:.25em .75em .25em .25em;background-color:#e8f2fc}.box-comment__user-image i{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.box-comment__buttons{float:left}.box-comment__required{float:right}.box-comment__required>span{font-size:.8em}.box-comment__submit{position:relative;overflow:hidden}.box-comment__submit .loading.no-bg{display:none;width:30px;height:0;content:" ";overflow:visible;margin-bottom:5px;margin-left:-15px;margin-right:5px}.box-comment__submit .loading.no-bg:before{left:auto}.box-comment__submit>div:not(.loading){display:inline}.box-comment__suggestions__tooltip .tooltip__content{font-style:normal;padding-left:1.75em;font-size:.95em}.missing_permission{width:100%}.missing_permission__text{border:1px solid #edf5fc;border-radius:5px;padding:1em}@-webkit-keyframes background-fade-highlight{to{background-color:transparent}}@keyframes background-fade-highlight{to{background-color:transparent}}@media (max-width:767.98px){.sidebar-nav{padding-top:5.5rem}}.sidebar-nav a{text-decoration:none;color:#596771;font-size:14.4px;font-size:.9rem;display:block;line-height:1.6;margin-bottom:1rem;margin-top:1rem}.sidebar-nav a.current_item{position:relative;z-index:1;margin-bottom:1rem;margin-top:1rem;-webkit-transition:margin-bottom .3s,margin-top .3s;transition:margin-bottom .3s,margin-top .3s}.sidebar-nav a.current_item:before{content:"";position:absolute;top:-8px;top:-.5rem;bottom:-8px;bottom:-.5rem;left:-8px;left:-.5rem;right:-8px;right:-.5rem;background-color:#bffffd;z-index:-1}.sidebar-nav a:focus,.sidebar-nav a:hover{text-decoration:underline}.sidebar-nav>.sidebar-list--wrapper{padding:1rem}@media (min-width:768px){.sidebar-nav>.sidebar-list--wrapper{padding:0}}.sidebar-nav>.sidebar-list--wrapper>ul>li{padding:.1rem 3rem .1rem 1rem}.sidebar-nav>.sidebar-list--wrapper>ul>li>a{font-weight:700}.sidebar-nav>.sidebar-list--wrapper ul{list-style-type:none;padding-left:0;margin-bottom:0}.sidebar-nav>.sidebar-list--wrapper ul.current>li.current{background-color:#f6fbff}.sidebar-nav>.sidebar-list--wrapper ul.current>li.current a{color:#004e95}.sidebar-nav>.sidebar-list--wrapper ul ul{padding-left:1rem}.sidebar-nav>.sidebar-list--wrapper.figures-index--menu,.sidebar-nav>.sidebar-list--wrapper.glossary-mobile--menu,.sidebar-nav>.sidebar-list--wrapper.table-index--menu{padding-top:1rem}.sidebar-nav>.sidebar-list--wrapper.figures-index--menu>ul>li,.sidebar-nav>.sidebar-list--wrapper.glossary-mobile--menu>ul>li,.sidebar-nav>.sidebar-list--wrapper.table-index--menu>ul>li{padding-bottom:0;padding-top:.5rem}#glossary-page>.chapter-header{display:none}#glossary-page .chapter-header{padding-top:2rem;padding-bottom:2rem;padding-left:.5rem;overflow:hidden}#glossary-page .chapter-header h2{font-size:128px;font-size:8rem;font-family:Lora,serif;line-height:1}#glossary-page .glossary-page__btn{border:0;background:none;cursor:pointer;color:#0073e6;display:block;width:100%;text-align:left;text-transform:uppercase;-webkit-transition:color .3s;transition:color .3s}#glossary-page .glossary-page__btn .docs-icon-minus,#glossary-page .glossary-page__btn .docs-icon-plus{color:#0073e6}#glossary-page .glossary-page__btn .docs-icon-minus{display:inline-block}#glossary-page .glossary-page__btn .docs-icon-plus{display:none}#glossary-page .glossary-page__btn.collapsed{color:#596771}#glossary-page .glossary-page__btn.collapsed .docs-icon-minus{display:none}#glossary-page .glossary-page__btn.collapsed .docs-icon-plus{display:inline-block}#glossary-page .term-content{padding-left:2.3rem}#glossary-page .term-content,#glossary-page .term-content p{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#glossary-page .term-content:last-of-type.show,#glossary-page dt:last-of-type .glossary-page__btn.collapsed{border-bottom:2px solid #eaebed}.glossary-page__copy-link-wrap{color:#0073e6}.glossary-page__copy-link{background:none;border:none;color:#0073e6;cursor:pointer}@media (max-width:767.98px){.return-to-top{bottom:4rem}}.return-to-top i:before{margin:0}@media (max-width:767.98px){.modal.modal-sm-full .modal-dialog{margin:0;max-width:none}.modal.modal-sm-full .modal-dialog .modal-content{margin:0;width:100vw;height:100vh;border-radius:0!important;border:none}}@font-face{font-family:italia-icon-font;src:url(../font/italia-icon-font.eot?94539880);src:url(../font/italia-icon-font.eot?94539880#iefix) format("embedded-opentype"),url(../font/italia-icon-font.woff2?94539880) format("woff2"),url(../font/italia-icon-font.woff?94539880) format("woff"),url(../font/italia-icon-font.ttf?94539880) format("truetype"),url(../font/italia-icon-font.svg?94539880#italia-icon-font) format("svg");font-weight:400;font-style:normal}[class*=" it-"]:before,[class^=it-]:before{font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;font-smoothing:antialiased}.it-app:before{content:"\e800"}.it-app-1:before{content:"\e801"}.it-arrow-down:before{content:"\e802"}.it-arrow-left:before{content:"\e803"}.it-arrow-right:before{content:"\e804"}.it-arrow-up:before{content:"\e805"}.it-behance:before{content:"\e806"}.it-calendar:before{content:"\e807"}.it-camera:before{content:"\e808"}.it-cancel:before{content:"\e809"}.it-check:before{content:"\e80a"}.it-chevron-left:before{content:"\e80d"}.it-chevron-right:before{content:"\e80e"}.it-close:before{content:"\e80f"}.it-collapse:before{content:"\e810"}.it-comment:before{content:"\e811"}.it-copy:before{content:"\e812"}.it-download:before{content:"\e813"}.it-drop-down:before{content:"\e814"}.it-drop-up:before{content:"\e815"}.it-help:before{content:"\e816"}.it-expand-media:before{content:"\e817"}.it-expand:before{content:"\e818"}.it-external-link:before{content:"\e819"}.it-facebook:before{content:"\e81a"}.it-favorite:before{content:"\e81b"}.it-file:before{content:"\e81c"}.it-flickr:before{content:"\e81d"}.it-github:before{content:"\e81e"}.it-googleplus:before{content:"\e81f"}.it-no:before{content:"\e820"}.it-instagram:before{content:"\e821"}.it-link:before{content:"\e822"}.it-linkedin:before{content:"\e823"}.it-list:before{content:"\e824"}.it-lock:before{content:"\e825"}.it-mail:before{content:"\e826"}.it-medium:before{content:"\e827"}.it-more-actions:before{content:"\e828"}.it-more-items:before{content:"\e829"}.it-pdf:before{content:"\e82a"}.it-pin:before{content:"\e82b"}.it-print:before{content:"\e82c"}.it-refresh:before{content:"\e82f"}.it-rss:before{content:"\e830"}.it-search:before{content:"\e831"}.it-settings:before{content:"\e832"}.it-share:before{content:"\e833"}.it-slideshare:before{content:"\e834"}.it-twitter:before{content:"\e835"}.it-unlock:before{content:"\e836"}.it-upload:before{content:"\e837"}.it-video:before{content:"\e838"}.it-warning:before{content:"\e839"}.it-whatsapp:before{content:"\e83a"}.it-youtube-text:before{content:"\e83b"}.it-youtube:before{content:"\e83c"}.it-zoom-in:before{content:"\e83d"}.it-zoom-out:before{content:"\e83e"}.it-error:before{content:"\e83f"}.it-info:before{content:"\e840"}.it-paper-plane:before{content:"\e841"} \ No newline at end of file diff --git a/_static/data/glossary.json b/_static/data/glossary.json deleted file mode 100644 index 9e26dfeeb..000000000 --- a/_static/data/glossary.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/_static/doctools.js b/_static/doctools.js deleted file mode 100644 index c3db08d1c..000000000 --- a/_static/doctools.js +++ /dev/null @@ -1,264 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Base JavaScript utilities for all Sphinx HTML documentation. - * - * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"use strict"; - -const _ready = (callback) => { - if (document.readyState !== "loading") { - callback(); - } else { - document.addEventListener("DOMContentLoaded", callback); - } -}; - -/** - * highlight a given string on a node by wrapping it in - * span elements with the given class name. - */ -const _highlight = (node, addItems, text, className) => { - if (node.nodeType === Node.TEXT_NODE) { - const val = node.nodeValue; - const parent = node.parentNode; - const pos = val.toLowerCase().indexOf(text); - if ( - pos >= 0 && - !parent.classList.contains(className) && - !parent.classList.contains("nohighlight") - ) { - let span; - - const closestNode = parent.closest("body, svg, foreignObject"); - const isInSVG = closestNode && closestNode.matches("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.classList.add(className); - } - - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - parent.insertBefore( - span, - parent.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling - ) - ); - node.nodeValue = val.substr(0, pos); - - if (isInSVG) { - const rect = document.createElementNS( - "http://www.w3.org/2000/svg", - "rect" - ); - const bbox = parent.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute("class", className); - addItems.push({ parent: parent, target: rect }); - } - } - } else if (node.matches && !node.matches("button, select, textarea")) { - node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); - } -}; -const _highlightText = (thisNode, text, className) => { - let addItems = []; - _highlight(thisNode, addItems, text, className); - addItems.forEach((obj) => - obj.parent.insertAdjacentElement("beforebegin", obj.target) - ); -}; - -/** - * Small JavaScript module for the documentation. - */ -const Documentation = { - init: () => { - Documentation.highlightSearchWords(); - Documentation.initDomainIndexTable(); - Documentation.initOnKeyListeners(); - }, - - /** - * i18n support - */ - TRANSLATIONS: {}, - PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), - LOCALE: "unknown", - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext: (string) => { - const translated = Documentation.TRANSLATIONS[string]; - switch (typeof translated) { - case "undefined": - return string; // no translation - case "string": - return translated; // translation exists - default: - return translated[0]; // (singular, plural) translation tuple exists - } - }, - - ngettext: (singular, plural, n) => { - const translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated !== "undefined") - return translated[Documentation.PLURAL_EXPR(n)]; - return n === 1 ? singular : plural; - }, - - addTranslations: (catalog) => { - Object.assign(Documentation.TRANSLATIONS, catalog.messages); - Documentation.PLURAL_EXPR = new Function( - "n", - `return (${catalog.plural_expr})` - ); - Documentation.LOCALE = catalog.locale; - }, - - /** - * highlight the search words provided in the url in the text - */ - highlightSearchWords: () => { - const highlight = - new URLSearchParams(window.location.search).get("highlight") || ""; - const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); - if (terms.length === 0) return; // nothing to do - - // There should never be more than one element matching "div.body" - const divBody = document.querySelectorAll("div.body"); - const body = divBody.length ? divBody[0] : document.querySelector("body"); - window.setTimeout(() => { - terms.forEach((term) => _highlightText(body, term, "highlighted")); - }, 10); - - const searchBox = document.getElementById("searchbox"); - if (searchBox === null) return; - searchBox.appendChild( - document - .createRange() - .createContextualFragment( - '" - ) - ); - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords: () => { - document - .querySelectorAll("#searchbox .highlight-link") - .forEach((el) => el.remove()); - document - .querySelectorAll("span.highlighted") - .forEach((el) => el.classList.remove("highlighted")); - const url = new URL(window.location); - url.searchParams.delete("highlight"); - window.history.replaceState({}, "", url); - }, - - /** - * helper function to focus on search bar - */ - focusSearchBar: () => { - document.querySelectorAll("input[name=q]")[0]?.focus(); - }, - - /** - * Initialise the domain index toggle buttons - */ - initDomainIndexTable: () => { - const toggler = (el) => { - const idNumber = el.id.substr(7); - const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); - if (el.src.substr(-9) === "minus.png") { - el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; - toggledRows.forEach((el) => (el.style.display = "none")); - } else { - el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; - toggledRows.forEach((el) => (el.style.display = "")); - } - }; - - const togglerElements = document.querySelectorAll("img.toggler"); - togglerElements.forEach((el) => - el.addEventListener("click", (event) => toggler(event.currentTarget)) - ); - togglerElements.forEach((el) => (el.style.display = "")); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); - }, - - initOnKeyListeners: () => { - // only install a listener if it is really needed - if ( - !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS - ) - return; - - const blacklistedElements = new Set([ - "TEXTAREA", - "INPUT", - "SELECT", - "BUTTON", - ]); - document.addEventListener("keydown", (event) => { - if (blacklistedElements.has(document.activeElement.tagName)) return; // bail for input elements - if (event.altKey || event.ctrlKey || event.metaKey) return; // bail with special keys - - if (!event.shiftKey) { - switch (event.key) { - case "ArrowLeft": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const prevLink = document.querySelector('link[rel="prev"]'); - if (prevLink && prevLink.href) { - window.location.href = prevLink.href; - event.preventDefault(); - } - break; - case "ArrowRight": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const nextLink = document.querySelector('link[rel="next"]'); - if (nextLink && nextLink.href) { - window.location.href = nextLink.href; - event.preventDefault(); - } - break; - case "Escape": - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; - Documentation.hideSearchWords(); - event.preventDefault(); - } - } - - // some keyboard layouts may need Shift to get / - switch (event.key) { - case "/": - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; - Documentation.focusSearchBar(); - event.preventDefault(); - } - }); - }, -}; - -// quick alias for translations -const _ = Documentation.gettext; - -_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js deleted file mode 100644 index 860ac2179..000000000 --- a/_static/documentation_options.js +++ /dev/null @@ -1,14 +0,0 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: 'version: latest', - LANGUAGE: 'en', - COLLAPSE_INDEX: false, - BUILDER: 'html', - FILE_SUFFIX: '.html', - LINK_SUFFIX: '.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false, - SHOW_SEARCH_SUMMARY: true, - ENABLE_SEARCH_SHORTCUTS: false, -}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png deleted file mode 100644 index a858a410e4faa62ce324d814e4b816fff83a6fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( diff --git a/_static/font/docs-italia.eot b/_static/font/docs-italia.eot deleted file mode 100644 index 169c6163b35c962c959ee57b2c2257fd4ae9f981..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11192 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 k!RrF@`>@1b^2_9IJhy - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/_static/font/docs-italia.ttf b/_static/font/docs-italia.ttf deleted file mode 100644 index 96a7767f4dd660a0d79cc2678274189f10fb7ad4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11012 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 diff --git a/_static/font/docs-italia.woff b/_static/font/docs-italia.woff deleted file mode 100644 index cda2cacb9b6c8afb3c845bff87d03a2b034e3dea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11092 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 B(DMKQ diff --git a/_static/font/italia-icon-font.eot b/_static/font/italia-icon-font.eot deleted file mode 100644 index 5242e53839d7d1643699f0b6fc9a012d4f4d5f56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23672 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 - - -Copyright (C) 2018 by original authors @ fontello.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/_static/font/italia-icon-font.ttf b/_static/font/italia-icon-font.ttf deleted file mode 100644 index f290bd6e060305044fed76427a695f7cf364aa71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23472 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 QzV+UM@c%$i^b_(w0enpTDF6Tf diff --git a/_static/font/italia-icon-font.woff b/_static/font/italia-icon-font.woff deleted file mode 100644 index 101f487bc8f60c2e787058058785bbec8f2a43cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13888 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 Y*7{$1T|uO;#mK-h0I+Vv4*(^b diff --git a/_static/font/italia-icon-font.woff2 b/_static/font/italia-icon-font.woff2 deleted file mode 100644 index 4598d5a9919533a1c6aba2b07bddaec3786da1df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11952 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 CrWaHI diff --git a/_static/images/agid-logo.svg b/_static/images/agid-logo.svg deleted file mode 100644 index a81f5eb84..000000000 --- a/_static/images/agid-logo.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - -Logo dell&Agenzia per l&Italia Digitale -Emblema della Repubblica Italiana con accanto l&acronimo AGID - - - - - - - - - - - - - - - - - diff --git a/_static/images/may.svg b/_static/images/may.svg deleted file mode 100644 index 53670ba97..000000000 --- a/_static/images/may.svg +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/_static/images/must.svg b/_static/images/must.svg deleted file mode 100644 index 177c3c51e..000000000 --- a/_static/images/must.svg +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/_static/images/must_not.svg b/_static/images/must_not.svg deleted file mode 100644 index 8c0c0d852..000000000 --- a/_static/images/must_not.svg +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/_static/images/should.svg b/_static/images/should.svg deleted file mode 100644 index c1f35d655..000000000 --- a/_static/images/should.svg +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/_static/images/should_not.svg b/_static/images/should_not.svg deleted file mode 100644 index 88e64a64c..000000000 --- a/_static/images/should_not.svg +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/_static/images/team-digitale-logo.svg b/_static/images/team-digitale-logo.svg deleted file mode 100644 index fa557011d..000000000 --- a/_static/images/team-digitale-logo.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - diff --git a/_static/jquery-3.6.0.js b/_static/jquery-3.6.0.js deleted file mode 100644 index fc6c299b7..000000000 --- a/_static/jquery-3.6.0.js +++ /dev/null @@ -1,10881 +0,0 @@ -/*! - * jQuery JavaScript Library v3.6.0 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2021-03-02T17:08Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 - // Plus for old WebKit, typeof returns "function" for HTML collections - // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) - return typeof obj === "function" && typeof obj.nodeType !== "number" && - typeof obj.item !== "function"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.6.0", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), - function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); - } ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.6 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2021-02-16 - */ -( function( window ) { -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ( {} ).hasOwnProperty, - arr = [], - pop = arr.pop, - pushNative = arr.push, - push = arr.push, - slice = arr.slice, - - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - return nonHex ? - - // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android<4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && - - // Support: IE 8 only - // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem && elem.namespaceURI, - docElem = elem && ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; - } ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert( function( el ) { - el.className = "i"; - return !el.getAttribute( "className" ); - } ); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; - } ); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: Opera 10 - 11 only - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); - } - - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { - - assert( function( el ) { - - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - } ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); - } : - function( a, b ) { - if ( b ) { - while ( ( b = b.parentNode ) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( ( cur = cur.parentNode ) ) { - ap.unshift( cur ); - } - cur = b; - while ( ( cur = cur.parentNode ) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { - i++; - } - - return i ? - - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : - - // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - /* eslint-disable max-len */ - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - /* eslint-enable max-len */ - - }; - }, - - "CHILD": function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - "not": markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element (issue #299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - "has": markFunction( function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - } ), - - "contains": markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); - }, - - "selected": function( elem ) { - - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo( function() { - return [ 0 ]; - } ), - - "last": createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - "even": createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "odd": createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - } ); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - } ); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; - } - } ); -} - -return Sizzle; - -} )( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -} -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the primary Deferred - primary = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - primary.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( primary.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return primary.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); - } - - return primary.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - - // Support: Chrome 86+ - // In Chrome, if an element having a focusout handler is blurred by - // clicking outside of it, it invokes the handler synchronously. If - // that handler calls `.remove()` on the element, the data is cleared, - // leaving `result` undefined. We need to guard against this. - return result && result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - which: true -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - // Suppress native focus or blur as it's already being fired - // in leverageNative. - _default: function() { - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - // - // Support: Firefox 70+ - // Only Firefox includes border widths - // in computed dimensions. (gh-4529) - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; - tr.style.cssText = "border:1px solid"; - - // Support: Chrome 86+ - // Height set through cssText does not get applied. - // Computed height then comes back as 0. - tr.style.height = "1px"; - trChild.style.height = "9px"; - - // Support: Android 8 Chrome 86+ - // In our bodyBackground.html iframe, - // display for all div elements is set to "inline", - // which causes a problem only in Android 8 Chrome 86. - // Ensuring the div is display: block - // gets around this issue. - trChild.style.display = "block"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + - parseInt( trStyle.borderTopWidth, 10 ) + - parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml, parserErrorElem; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) {} - - parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; - if ( !xml || parserErrorElem ) { - jQuery.error( "Invalid XML: " + ( - parserErrorElem ? - jQuery.map( parserErrorElem.childNodes, function( el ) { - return el.textContent; - } ).join( "\n" ) : - data - ) ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ).filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ).map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - -originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - 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" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script but not if jsonp - if ( !isSuccess && - jQuery.inArray( "script", s.dataTypes ) > -1 && - jQuery.inArray( "json", s.dataTypes ) < 0 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( "